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

« back to all changes in this revision

Viewing changes to tests/simulate/printf/sprintf_flt-g01.c

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2008-08-10 09:59:16 UTC
  • mfrom: (1.2.1 upstream) (8 intrepid)
  • mto: (4.1.7 sid)
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: james.westby@ubuntu.com-20080810095916-7ku06pjsfia3hz16
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(), float version, '%g(G)' specification.
 
2
   $Id: sprintf_flt-g01.c,v 1.1 2007/02/18 13:45:55 dmix Exp $  */
 
3
 
 
4
#include <stdio.h>
 
5
#include <stdlib.h>
 
6
#include <string.h>
 
7
#include "progmem.h"
 
8
 
 
9
PROGMEM static const struct sprf_s {
 
10
    char fmt[8];
 
11
    float val;
 
12
    char pattern[21];
 
13
} t[] = {
 
14
 
 
15
/* Nonregular cases.    */
 
16
    { "%g",     0,              "0"     },
 
17
    { "%g",     1,              "1"     },
 
18
    { "%.8g",   12345678,       "12345678"      },
 
19
    { "%.8g",   123456780,      "1.2345678e+08" },
 
20
    { "%.8g",   0.00012345678,  "0.00012345678" },
 
21
    { "%.8g",   0.000012345678, "1.2345678e-05" },
 
22
 
 
23
/* Flags separatly.     */
 
24
    { "%g",     1.23456e-5,     "1.23456e-05"   },
 
25
    { "%G",     1.23456e-5,     "1.23456E-05"   },
 
26
    { "%g",     -1.23456e-5,    "-1.23456e-05"  },
 
27
    { "% g",    1.23456e-5,     " 1.23456e-05"  },
 
28
    { "%+g",    1.23456e-5,     "+1.23456e-05"  },
 
29
    { "%.4g",   1.23456e-5,     "1.235e-05"     },
 
30
    { "%15g",   1.23456e-5,     "    1.23456e-05"       },
 
31
    { "%-15g",  1.23456e-5,     "1.23456e-05    "       },
 
32
    { "%015g",  1.23456e-5,     "00001.23456e-05"       },
 
33
 
 
34
/* Flags together.      */
 
35
    { "% G",    1.23456e-5,     " 1.23456E-05"  },
 
36
    { "% +g",   1.23456e-5,     "+1.23456e-05"  },
 
37
    { "% g",    -1.23456e-5,    "-1.23456e-05"  },
 
38
    { "%+015g", 1.23456e-5,     "+0001.23456e-05"       },
 
39
    { "%-015g", 1.23456e-5,     "1.23456e-05    "       },
 
40
 
 
41
/* Precision, 'f'       */
 
42
    { "%.8g",   1.2345678,      "1.2345678"     },
 
43
    { "%.7g",   1.2345678,      "1.234568"      },
 
44
    { "%.6g",   1.2345678,      "1.23457"       },
 
45
    { "%.5g",   1.2345678,      "1.2346"        },
 
46
    { "%.4g",   1.2345678,      "1.235"         },
 
47
    { "%.3g",   1.2345678,      "1.23"          },
 
48
    { "%.2g",   1.2345678,      "1.2"           },
 
49
    { "%.1g",   1.2345678,      "1"             },
 
50
    { "%.0g",   1.2345678,      "1"             },
 
51
    { "%.g",    1.2345678,      "1"             },
 
52
    { "%g",     1.2345678,      "1.23457"       },
 
53
 
 
54
/* Precision, 'g'       */
 
55
    { "%.8g",   1.2345678e+12,  "1.2345678e+12" },
 
56
    { "%.7g",   1.2345678e+12,  "1.234568e+12"  },
 
57
    { "%.6g",   1.2345678e+12,  "1.23457e+12"   },
 
58
    { "%.5g",   1.2345678e+12,  "1.2346e+12"    },
 
59
    { "%.4g",   1.2345678e+12,  "1.235e+12"     },
 
60
    { "%.3g",   1.2345678e+12,  "1.23e+12"      },
 
61
    { "%.2g",   1.2345678e+12,  "1.2e+12"       },
 
62
    { "%.1g",   1.2345678e+12,  "1e+12"         },
 
63
    { "%.0g",   1.2345678e+12,  "1e+12"         },
 
64
    { "%.g",    1.2345678e+12,  "1e+12"         },
 
65
    { "%g",     1.2345678e+12,  "1.23457e+12"   },
 
66
 
 
67
/* Width, 'f' without dec. point        */
 
68
    { "%0g",    10,             "10"            },
 
69
    { "%2g",    10,             "10"            },
 
70
    { "%3g",    10,             " 10"           },
 
71
    { "%12g",   10,             "          10"  },
 
72
    { "%12g",   -10,            "         -10"  },
 
73
 
 
74
/* Width, 'f', only fractional part     */
 
75
    { "%.3g",   0.123,          "0.123"         },
 
76
    { "%0.3g",  0.123,          "0.123"         },
 
77
    { "%5.3g",  0.123,          "0.123"         },
 
78
    { "%6.3g",  0.123,          " 0.123"        },
 
79
    { "%12.3g", 0.123,          "       0.123"  },
 
80
    { "%12.3g", -0.123,         "      -0.123"  },
 
81
 
 
82
/* Width, 'f', integer and fractional parts     */
 
83
    { "%.5g",   12.345,         "12.345"        },
 
84
    { "%0.5g",  12.345,         "12.345"        },
 
85
    { "%6.5g",  12.345,         "12.345"        },
 
86
    { "%7.5g",  12.345,         " 12.345"       },
 
87
    { "%12.5g", 12.345,         "      12.345"  },
 
88
    { "%12.5g", -12.345,        "     -12.345"  },
 
89
 
 
90
/* Width, 'e' without dec. point        */
 
91
    { "%0g",    1e+23,          "1e+23"         },
 
92
    { "%5g",    1e+23,          "1e+23"         },
 
93
    { "%6g",    1e+23,          " 1e+23"        },
 
94
    { "%12g",   1e+23,          "       1e+23"  },
 
95
    { "%12g",   -1e+23,         "      -1e+23"  },
 
96
 
 
97
/* Width, 'e' with dec. point   */
 
98
    { "%0g",    1.2e+34,        "1.2e+34"       },
 
99
    { "%7g",    1.2e+34,        "1.2e+34"       },
 
100
    { "%8g",    1.2e+34,        " 1.2e+34"      },
 
101
    { "%12g",   1.2e+34,        "     1.2e+34"  },
 
102
    { "%12g",   -1.2e+34,       "    -1.2e+34"  },
 
103
 
 
104
/* In contrast to 'f' spec.     */
 
105
    { "%.3g",   0.46,           "0.46"  },
 
106
    { "%.2g",   0.46,           "0.46"  },
 
107
    { "%.1g",   0.46,           "0.5"   },
 
108
    { "%.0g",   0.46,           "0.5"   },
 
109
    { "%3.0g",  0.46,           "0.5"   },
 
110
    { "%4.0g",  0.46,           " 0.5"  },
 
111
};
 
112
 
 
113
#ifndef __AVR__
 
114
# define strlen_P       strlen
 
115
#endif
 
116
 
 
117
void run_sprf (const struct sprf_s *pt, int testno)
 
118
{
 
119
    static char s[300];
 
120
    int n;
 
121
    int code;
 
122
 
 
123
#ifdef  __AVR__
 
124
    n = sprintf_P (s, pt->fmt, pgm_read_dword (& pt->val));
 
125
#else
 
126
    n = sprintf (s, pt->fmt, pt->val);
 
127
#endif
 
128
    if (n != (int)strlen_P (pt->pattern))
 
129
        code = testno + 1000;
 
130
    else if (strcmp_P (s, pt->pattern))
 
131
        code = testno;
 
132
    else
 
133
        return;
 
134
#if  !defined(__AVR__)
 
135
    printf ("\ntestno %3d: expect: %3d, \"%s\","
 
136
            "\n            output: %3d, \"%s\"\n",
 
137
            testno, strlen(pt->pattern), pt->pattern, n, s);
 
138
    exit (code < 256 ? testno : 255);
 
139
#elif   defined(DEBUG)
 
140
    exit ((int)s);
 
141
#endif
 
142
    exit (code);
 
143
}
 
144
 
 
145
int main ()
 
146
{
 
147
    int i;
 
148
    for (i = 0; (unsigned)i != sizeof(t)/sizeof(t[0]); i++)
 
149
        run_sprf (t+i, i+1);
 
150
    return 0;
 
151
}