~ubuntu-branches/ubuntu/maverick/avr-libc/maverick

« back to all changes in this revision

Viewing changes to tests/simulate/math/trunc-01.c

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2009-10-31 11:52:10 UTC
  • mfrom: (1.1.8 upstream) (4.1.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20091031115210-x0mlijnegkce86fk
Tags: 1:1.6.7-1
* New upstream relese (closes: #544030)
* Added lintian overrides (closes: #553265)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Test of trunc() function.
2
 
   $Id: trunc-01.c,v 1.1 2007/02/05 21:35:58 dmix Exp $
3
 
 */
4
 
#include <math.h>
5
 
#include <stdio.h>
6
 
#include <stdlib.h>
7
 
#include "progmem.h"
8
 
 
9
 
union lofl_u {
10
 
    long lo;
11
 
    float fl;
12
 
};
13
 
 
14
 
volatile union lofl_u v = { .lo = 1 };
15
 
 
16
 
PROGMEM const struct {          /* Table of test cases. */
17
 
    union lofl_u x;             /* argument     */
18
 
    union lofl_u z;             /* trunc(x)     */
19
 
} t[] = {
20
 
 
21
 
    /* Zero     */
22
 
    { { .fl= +0.0 },    { .fl= +0.0 }   },
23
 
    { { .fl= -0.0 },    { .fl= -0.0 }   },
24
 
 
25
 
    /* Normal   */
26
 
    { { .fl= 0.1 },             { .fl= 0.0 }    },
27
 
    { { .fl= 1.9 },             { .fl= 1.0 }    },
28
 
    { { .fl= 1000000.5 },       { .fl= 1000000.0 } },
29
 
    { { .fl= -0.1 },            { .fl= -0.0 }   },
30
 
    { { .fl= -1.9 },            { .fl= -1.0 }   },
31
 
    { { .fl= -1000000.5 },      { .fl= -1000000.0 } },
32
 
 
33
 
    /* Inf      */
34
 
    { { 0x7f800000 },   { 0x7f800000 } },
35
 
    { { 0xff800000 },   { 0xff800000 } },
36
 
    
37
 
    /* Subnormal        */
38
 
    { { 0x00000001 }, { 0x00000000 } },
39
 
    { { 0x00000100 }, { 0x00000000 } },
40
 
    { { 0x00010000 }, { 0x00000000 } },
41
 
    { { 0x007fffff }, { 0x00000000 } },
42
 
    { { 0x80000001 }, { .fl= -0.0 } },
43
 
    { { 0x80000100 }, { .fl= -0.0 } },
44
 
    { { 0x80010000 }, { .fl= -0.0 } },
45
 
    { { 0x807fffff }, { .fl= -0.0 } },
46
 
    
47
 
    /* Margin values    */
48
 
    { { 0x3f7fffff }, { .fl= 0.0 } },
49
 
    { { 0x3f800000 }, { .fl= 1.0 } },
50
 
    { { 0x3f800001 }, { .fl= 1.0 } },
51
 
    { { 0x3fffffff }, { .fl= 1.0 } },
52
 
    { { 0x40000000 }, { .fl= 2.0 } },
53
 
    { { 0x40000001 }, { .fl= 2.0 } },
54
 
    { { 0x403fffff }, { .fl= 2.0 } },
55
 
    { { .fl= 0x0.ffffffp+23 }, { .fl= 0x0.fffffep+23 } },
56
 
    { { .fl= 0x1.000000p+23 }, { .fl= 0x1.000000p+23 } },
57
 
    { { 0x7f7fffff }, { 0x7f7fffff } },
58
 
 
59
 
    { { 0xbf7fffff }, { .fl= -0.0 } },
60
 
    { { 0xbf800000 }, { .fl= -1.0 } },
61
 
    { { 0xbf800001 }, { .fl= -1.0 } },
62
 
    { { 0xbfffffff }, { .fl= -1.0 } },
63
 
    { { 0xc0000000 }, { .fl= -2.0 } },
64
 
    { { 0xc0000001 }, { .fl= -2.0 } },
65
 
    { { 0xc03fffff }, { .fl= -2.0 } },
66
 
    { { .fl= -0x0.ffffffp+23 }, { .fl= -0x0.fffffep+23 } },
67
 
    { { .fl= -0x1.000000p+23 }, { .fl= -0x1.000000p+23 } },
68
 
    { { 0xff7fffff }, { 0xff7fffff } },
69
 
    
70
 
    /* All possible shifts      */
71
 
    { { .fl= 0x0.ffffffp+00 }, { .fl= 0x0p+00 } },
72
 
    { { .fl= 0x0.ffffffp+01 }, { .fl= 0x1p+00 } },
73
 
    { { .fl= 0x0.ffffffp+02 }, { .fl= 0x3p+00 } },
74
 
    { { .fl= 0x0.ffffffp+03 }, { .fl= 0x7p+00 } },
75
 
    { { .fl= 0x0.ffffffp+04 }, { .fl= 0xfp+00 } },
76
 
    { { .fl= 0x0.ffffffp+05 }, { .fl= 0x1fp+00 } },
77
 
    { { .fl= 0x0.ffffffp+06 }, { .fl= 0x3fp+00 } },
78
 
    { { .fl= 0x0.ffffffp+07 }, { .fl= 0x7fp+00 } },
79
 
    { { .fl= 0x0.ffffffp+08 }, { .fl= 0xffp+00 } },
80
 
    { { .fl= 0x0.ffffffp+09 }, { .fl= 0x1ffp+00 } },
81
 
    { { .fl= 0x0.ffffffp+10 }, { .fl= 0x3ffp+00 } },
82
 
    { { .fl= 0x0.ffffffp+11 }, { .fl= 0x7ffp+00 } },
83
 
    { { .fl= 0x0.ffffffp+12 }, { .fl= 0xfffp+00 } },
84
 
    { { .fl= 0x0.ffffffp+13 }, { .fl= 0x1fffp+00 } },
85
 
    { { .fl= 0x0.ffffffp+14 }, { .fl= 0x3fffp+00 } },
86
 
    { { .fl= 0x0.ffffffp+15 }, { .fl= 0x7fffp+00 } },
87
 
    { { .fl= 0x0.ffffffp+16 }, { .fl= 0xffffp+00 } },
88
 
    { { .fl= 0x0.ffffffp+17 }, { .fl= 0x1ffffp+00 } },
89
 
    { { .fl= 0x0.ffffffp+18 }, { .fl= 0x3ffffp+00 } },
90
 
    { { .fl= 0x0.ffffffp+19 }, { .fl= 0x7ffffp+00 } },
91
 
    { { .fl= 0x0.ffffffp+20 }, { .fl= 0xfffffp+00 } },
92
 
    { { .fl= 0x0.ffffffp+21 }, { .fl= 0x1fffffp+00 } },
93
 
    { { .fl= 0x0.ffffffp+22 }, { .fl= 0x3fffffp+00 } },
94
 
    { { .fl= 0x0.ffffffp+23 }, { .fl= 0x7fffffp+00 } },
95
 
    { { .fl= 0x0.ffffffp+24 }, { .fl= 0xffffffp+00 } },
96
 
    { { .fl= 0x0.ffffffp+25 }, { .fl= 0xffffffp+01 } },
97
 
    { { .fl= 0x0.ffffffp+26 }, { .fl= 0xffffffp+02 } },
98
 
    { { .fl= 0x0.ffffffp+27 }, { .fl= 0xffffffp+03 } },
99
 
    { { .fl= 0x0.ffffffp+28 }, { .fl= 0xffffffp+04 } },
100
 
    { { .fl= 0x0.ffffffp+29 }, { .fl= 0xffffffp+05 } },
101
 
 
102
 
    /* All possible shifts, negative value      */
103
 
    { { .fl= -0x0.ffffffp+00 }, { .fl= -0x0p+00 } },
104
 
    { { .fl= -0x0.ffffffp+01 }, { .fl= -0x1p+00 } },
105
 
    { { .fl= -0x0.ffffffp+02 }, { .fl= -0x3p+00 } },
106
 
    { { .fl= -0x0.ffffffp+03 }, { .fl= -0x7p+00 } },
107
 
    { { .fl= -0x0.ffffffp+04 }, { .fl= -0xfp+00 } },
108
 
    { { .fl= -0x0.ffffffp+05 }, { .fl= -0x1fp+00 } },
109
 
    { { .fl= -0x0.ffffffp+06 }, { .fl= -0x3fp+00 } },
110
 
    { { .fl= -0x0.ffffffp+07 }, { .fl= -0x7fp+00 } },
111
 
    { { .fl= -0x0.ffffffp+08 }, { .fl= -0xffp+00 } },
112
 
    { { .fl= -0x0.ffffffp+09 }, { .fl= -0x1ffp+00 } },
113
 
    { { .fl= -0x0.ffffffp+10 }, { .fl= -0x3ffp+00 } },
114
 
    { { .fl= -0x0.ffffffp+11 }, { .fl= -0x7ffp+00 } },
115
 
    { { .fl= -0x0.ffffffp+12 }, { .fl= -0xfffp+00 } },
116
 
    { { .fl= -0x0.ffffffp+13 }, { .fl= -0x1fffp+00 } },
117
 
    { { .fl= -0x0.ffffffp+14 }, { .fl= -0x3fffp+00 } },
118
 
    { { .fl= -0x0.ffffffp+15 }, { .fl= -0x7fffp+00 } },
119
 
    { { .fl= -0x0.ffffffp+16 }, { .fl= -0xffffp+00 } },
120
 
    { { .fl= -0x0.ffffffp+17 }, { .fl= -0x1ffffp+00 } },
121
 
    { { .fl= -0x0.ffffffp+18 }, { .fl= -0x3ffffp+00 } },
122
 
    { { .fl= -0x0.ffffffp+19 }, { .fl= -0x7ffffp+00 } },
123
 
    { { .fl= -0x0.ffffffp+20 }, { .fl= -0xfffffp+00 } },
124
 
    { { .fl= -0x0.ffffffp+21 }, { .fl= -0x1fffffp+00 } },
125
 
    { { .fl= -0x0.ffffffp+22 }, { .fl= -0x3fffffp+00 } },
126
 
    { { .fl= -0x0.ffffffp+23 }, { .fl= -0x7fffffp+00 } },
127
 
    { { .fl= -0x0.ffffffp+24 }, { .fl= -0xffffffp+00 } },
128
 
    { { .fl= -0x0.ffffffp+25 }, { .fl= -0xffffffp+01 } },
129
 
    { { .fl= -0x0.ffffffp+26 }, { .fl= -0xffffffp+02 } },
130
 
    { { .fl= -0x0.ffffffp+27 }, { .fl= -0xffffffp+03 } },
131
 
    { { .fl= -0x0.ffffffp+28 }, { .fl= -0xffffffp+04 } },
132
 
    { { .fl= -0x0.ffffffp+29 }, { .fl= -0xffffffp+05 } },
133
 
};
134
 
 
135
 
void x_exit (int index)
136
 
{
137
 
#ifndef __AVR__
138
 
    fprintf (stderr, "t[%d]:  %#lx\n", index - 1, v.lo);
139
 
#endif
140
 
    exit (index ? index : -1);
141
 
}
142
 
 
143
 
int main ()
144
 
{
145
 
    union lofl_u x, z;
146
 
    int i;
147
 
    
148
 
    for (i = 0; i < (int) (sizeof(t) / sizeof(t[0])); i++) {
149
 
        x.lo = pgm_read_dword (& t[i].x);
150
 
        z.lo = pgm_read_dword (& t[i].z);
151
 
        v.fl = trunc (x.fl);
152
 
        /* Comparison is integer to verify the zero sign.       */
153
 
        if (v.lo != z.lo)
154
 
            x_exit (i+1);
155
 
    }
156
 
    return 0;
157
 
}