~ubuntu-branches/ubuntu/raring/avr-libc/raring-proposed

« back to all changes in this revision

Viewing changes to tests/simulate/printf/sprintf_min-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_min(), specification: x.
 
2
   $Id: sprintf_min-5.c,v 1.1.2.1 2008/03/20 21:42:31 joerg_wunsch Exp $        */
 
3
 
 
4
#ifndef __AVR__
 
5
# define PRINTFLN(line, fmt, ...)       \
 
6
    printf("\nLine %2d: " fmt "\n", line, ##__VA_ARGS__)
 
7
# define EXIT(code)     exit ((code) < 255 ? (code) : 255)
 
8
# define sprintf_P      sprintf
 
9
#else
 
10
# if defined(__AVR_ATmega128__)
 
11
  /* ATmega128 has enough RAM for sprintf(), print to 0x2000 in XRAM. */
 
12
#  define PRINTFLN(line, fmt, ...)      \
 
13
    sprintf ((char *)0x2000, "\nLine %d: " fmt "\n", line, ##__VA_ARGS__)
 
14
# else
 
15
   /* small AVR */
 
16
#  define PRINTFLN(args...)
 
17
# endif
 
18
# define EXIT   exit
 
19
#endif
 
20
 
 
21
#include <stdio.h>
 
22
#include <stdlib.h>
 
23
#include <string.h>
 
24
#include "progmem.h"
 
25
 
 
26
void Check (int line,
 
27
            const char *expstr,
 
28
            int retval, const char *retstr)
 
29
{
 
30
    int code;
 
31
 
 
32
    if (retval != (int)strlen (retstr))
 
33
        code = 1000 + line;
 
34
    else if (strcmp_P (retstr, expstr))
 
35
        code = line;
 
36
    else
 
37
        return;
 
38
    PRINTFLN (line, "expect: %3d, \"%s\",\n%8s output: %3d, \"%s\"\n",
 
39
              strlen(expstr), expstr, " ", retval, retstr);
 
40
#ifdef  DEBUG
 
41
    code = (int)retstr;
 
42
#endif
 
43
    EXIT (code);
 
44
}
 
45
 
 
46
/* 'vp' is used to avoid gcc warnings about format string.      */
 
47
#define CHECK(expstr, fmt, ...) do {                            \
 
48
    char s[260];                                                \
 
49
    int i;                                                      \
 
50
    int (* volatile vp)(char *, const char *, ...) = sprintf_P; \
 
51
    memset (s, 0, sizeof(s));                                   \
 
52
    i = vp (s, PSTR(fmt), ##__VA_ARGS__);                       \
 
53
    Check (__LINE__, PSTR(expstr), i, s);                       \
 
54
} while (0)
 
55
 
 
56
int main ()
 
57
{
 
58
    /* '%X'     */
 
59
    CHECK ("0 1234 5678 9ABC DEF0",
 
60
           "%X %X %X %X %X", 0, 0x1234, 0x5678, 0x9abc, 0xdef0);
 
61
    CHECK ("0XFEDC 0XBA98 0X7654 0X3210",
 
62
           "%#X %#X %#X %#X", 0xfedc, 0xba98, 0x7654, 0x3210);
 
63
 
 
64
    /* '%p'     */
 
65
#ifdef  __AVR__         /* Glibc result: (nil)  */
 
66
    CHECK ("0", "%p", 0);
 
67
#endif
 
68
    CHECK ("0x1 0xabcd 0xef02", "%p %p %p", 1, 0xabcd, 0xef02);
 
69
 
 
70
    return 0;
 
71
}