b7301acbec04533cd4e063e084d6197e154bc5c0
[fw/sdcc] / support / regression / tests / bug1057979.c
1 /*
2    bug1057979.c
3 */
4
5 #include <stdlib.h>
6 #include <string.h>
7 #include <stdio.h>
8 #include <testfwk.h>
9
10 char s[12+1];
11
12 void
13 test_sprintf(void)
14 {
15   s[12] = 0x12;
16
17   sprintf( s, "%d", 99 );
18   ASSERT( 0 == strcmp( s, "99" ) );
19   sprintf( s, "%d", 100 );
20   ASSERT( 0 == strcmp( s, "100" ) );
21   sprintf( s, "%d", 2004 );
22   ASSERT( 0 == strcmp( s, "2004" ) );
23   sprintf( s, "%ld", 2147483647L );
24   ASSERT( 0 == strcmp( s, "2147483647" ) );
25
26   //and from bug 1073386
27 #ifdef SDCC_pic16
28   //pic16 printf doesn't support flags, width and precision specifiers
29   sprintf( s, "%04X", 0x8765u );
30   ASSERT( 0 == strcmp( s, "04X" ) );
31
32   //and from bug 1193299
33   sprintf( s, "%3.3s", "abcd" );
34   ASSERT( 0 == strcmp( s, "3.3s" ) );
35   sprintf( s, "%-3.3s", "abcd" );
36   ASSERT( 0 == strcmp( s, "-3.3s" ) );
37   sprintf( s, "%3.3s", "ab" );
38   ASSERT( 0 == strcmp( s, "3.3s" ) );
39   sprintf( s, "%-3.3s", "ab" );
40   ASSERT( 0 == strcmp( s, "-3.3s" ) );
41 #else
42   sprintf( s, "%04X", 0x8765u );
43   ASSERT( 0 == strcmp( s, "8765" ) );
44
45   //and from bug 1193299
46   sprintf( s, "%3.3s", "abcd" );
47   ASSERT( 0 == strcmp( s, "abc" ) );
48   sprintf( s, "%-3.3s", "abcd" );
49   ASSERT( 0 == strcmp( s, "abc" ) );
50   sprintf( s, "%3.3s", "ab" );
51   ASSERT( 0 == strcmp( s, " ab" ) );
52   sprintf( s, "%-3.3s", "ab" );
53   ASSERT( 0 == strcmp( s, "ab " ) );
54 #endif
55
56 #if defined(SDCC_ds390) || defined(PORT_HOST)
57   //and from bug 1358192
58   sprintf( s, "%f", 10.1 );
59   LOG((s));
60   ASSERT( 0 == strcmp( s, "10.100000" ) );
61
62   //and from bug 1388703
63   sprintf( s, "%4.1f", 1.36 );
64   LOG((s));
65   ASSERT( 0 == strcmp( s, " 1.4" ) );
66   sprintf( s, "%4.1f", -1.37 );
67   LOG((s));
68   ASSERT( 0 == strcmp( s, "-1.4" ) );
69 #endif
70
71   ASSERT( s[12]==0x12 );
72 }