~ubuntu-branches/ubuntu/karmic/avr-libc/karmic

« back to all changes in this revision

Viewing changes to tests/simulate/printf/sprintf-5.c

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2008-08-10 09:59:16 UTC
  • mfrom: (1.1.7 upstream) (4.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080810095916-wwyigh3vt0e9s7ud
Tags: 1:1.6.2.cvs20080610-2
Added build-depends on texlive-extra-utils (closes: #493454)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Test of sprintf(), 'p,X' specifications.
 
2
   $Id: sprintf-5.c,v 1.1 2007/02/18 13:44:46 dmix Exp $        */
 
3
 
 
4
#include <stdio.h>
 
5
#include <stdlib.h>
 
6
#include <string.h>
 
7
#include "progmem.h"
 
8
 
 
9
#ifndef __AVR__
 
10
# define sprintf_P      sprintf
 
11
#endif
 
12
 
 
13
void Check (int line,
 
14
            const char *expstr,
 
15
            int retval, const char *retstr)
 
16
{
 
17
    int code;
 
18
 
 
19
    if (retval != (int)strlen (retstr))
 
20
        code = 1000 + line;
 
21
    else if (strcmp_P (retstr, expstr))
 
22
        code = line;
 
23
    else
 
24
        return;
 
25
#if     !defined(__AVR__)
 
26
    if (code) {
 
27
        printf ("\nLine %3d: expect: %3d, \"%s\","
 
28
                "\n          output: %3d, \"%s\"\n",
 
29
                line, strlen (expstr), expstr, retval, retstr);
 
30
        code = (line < 256 ? line : 255);       /* common OS restriction */
 
31
    }
 
32
#elif   defined(DEBUG)
 
33
    exit ((int)retstr);
 
34
#endif
 
35
    exit (code);
 
36
}
 
37
 
 
38
/* 'vp' is used to avoid gcc warnings about format string.      */
 
39
#define CHECK(expstr, fmt, ...) do {                            \
 
40
    char s[260];                                                \
 
41
    int i;                                                      \
 
42
    int (* volatile vp)(char *, const char *, ...) = sprintf_P; \
 
43
    memset (s, 0, sizeof(s));                                   \
 
44
    i = vp (s, PSTR(fmt), ##__VA_ARGS__);                       \
 
45
    Check (__LINE__, PSTR(expstr), i, s);                       \
 
46
} while (0)
 
47
 
 
48
int main ()
 
49
{
 
50
    /* '%X'     */
 
51
    CHECK ("0 1234 5678 9ABC DEF0",
 
52
           "%X %X %X %X %X", 0, 0x1234, 0x5678, 0x9abc, 0xdef0);
 
53
    CHECK ("0XFEDC 0XBA98 0X7654 0X3210",
 
54
           "%#X %#X %#X %#X", 0xfedc, 0xba98, 0x7654, 0x3210);
 
55
 
 
56
    /* '%p'     */
 
57
#ifdef  __AVR__
 
58
    CHECK ("0", "%p", 0);
 
59
#endif
 
60
    CHECK ("0x1 0xabcd 0xef02", "%p %p %p", 1, 0xabcd, 0xef02);
 
61
 
 
62
    return 0;
 
63
}