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

« back to all changes in this revision

Viewing changes to tests/simulate/stdlib/atol-2.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
/* This is a copy of 'atol-1.c', but without <stdlib.h>.
 
2
   The purpose is to check a native atol() function, as today (2007-02-06)
 
3
   the <stdlib.h> header substitutes an inlined version with strtol() usage.
 
4
 
 
5
   $Id: atol-2.c,v 1.1 2007/02/06 12:36:58 dmix Exp $
 
6
 */
 
7
 
 
8
#include <stdio.h>
 
9
#include <string.h>
 
10
#include "progmem.h"
 
11
 
 
12
long atol (const char *);
 
13
void exit (int);
 
14
 
 
15
PROGMEM const struct {
 
16
    char s[12];
 
17
    long val;
 
18
} t[] = {
 
19
 
 
20
    /* Empty string     */
 
21
    { "", 0 },
 
22
    { " ", 0 },
 
23
    { "\t\n\v\f\r", 0 },
 
24
 
 
25
    /* Common values    */
 
26
    { "0", 0 },
 
27
    { "+0", 0 },
 
28
    { "-0", 0 },
 
29
    { "1", 1 },
 
30
    { "+1", 1 },
 
31
    { "-1", -1 },
 
32
    { "32767", 32767 },
 
33
    { "32768", 32768 },
 
34
    { "-32767", -32767 },
 
35
    { "-32768", -32768 },
 
36
    { "-987654321", -987654321 },
 
37
    { "+1234567890", 1234567890 },
 
38
    { "2147483647", 2147483647 },
 
39
    { "-2147483647", -2147483647 },
 
40
    { "-2147483648", 0x80000000 },
 
41
    
 
42
    /* Nonzero end character    */
 
43
    { "12\001", 12 },
 
44
    { "123\377", 123 },
 
45
    { "1234/", 1234 },          /* '0'-1 == '/' */
 
46
    { "12345:", 12345 },        /* '9'+1 == ':' */
 
47
    { "321 4", 321 },
 
48
    
 
49
    /* Empty symbols at begin   */
 
50
    { " -4", -4 },
 
51
    { "\t+5", 5 },
 
52
    { "\t\n\v\f\r-321", -321 },         /* bug #18899   */
 
53
    
 
54
    /* No digits        */
 
55
    { "\001123", 0 },
 
56
    { "\377-123", 0 },
 
57
    { "\010123", 0 },           /* '\t'-1 == 010        */
 
58
    { "\016+123", 0 },          /* '\r'+1 == 016        */
 
59
    
 
60
    /* atol() accepts 10-base only      */
 
61
    { "010", 10 },
 
62
    { "0x10", 0 },
 
63
    { "0X10", 0 },
 
64
};
 
65
 
 
66
volatile long vlt = 1;          /* for debug conveniency        */
 
67
 
 
68
void t_exit (int idx)
 
69
{
 
70
#ifdef  __AVR__
 
71
    exit (idx + 1);
 
72
#else
 
73
    printf ("result=%ld against t[%d]={\"%s\", %ld}\n",
 
74
            vlt, idx, t[idx].s, t[idx].val);
 
75
    exit (1);
 
76
#endif
 
77
}
 
78
 
 
79
int main ()
 
80
{
 
81
    int i;
 
82
    char s[sizeof(t[0].s)];
 
83
 
 
84
    for (i = 0; i < (int)(sizeof(t) / sizeof(t[0])); i++) {
 
85
        strcpy_P (s, t[i].s);
 
86
        vlt = atol (s);
 
87
        if (vlt != (long)pgm_read_dword (& t[i].val))
 
88
            t_exit (i);
 
89
    }
 
90
    return 0;
 
91
}