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

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2009-10-31 11:52:10 UTC
  • mfrom: (1.2.2 upstream)
  • mto: This revision was merged to the branch mainline in revision 10.
  • Revision ID: james.westby@ubuntu.com-20091031115210-crjd42sn6ezrj52c
* 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 modf() function.
2
 
   $Id: modf-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 vf = { 1 };
15
 
double vn = { 1 };
16
 
 
17
 
PROGMEM const struct {          /* Table of test cases. */
18
 
    union lofl_u x;     /* argument                     */
19
 
    union lofl_u f;     /* fraction part: modf(x,*pn)   */
20
 
    union lofl_u n;     /* integral part: *pn           */
21
 
} t[] = {
22
 
 
23
 
    /* zero     */
24
 
    { { 0x00000000 }, { 0x00000000 }, { .fl = 0 } },
25
 
    { { 0x80000000 }, { 0x80000000 }, { .fl = -0.0 } },
26
 
 
27
 
    /* subnormal        */
28
 
    { { 0x00000001 }, { 0x00000001 }, { .fl = 0 } },
29
 
    { { 0x00000100 }, { 0x00000100 }, { .fl = 0 } },
30
 
    { { 0x00010000 }, { 0x00010000 }, { .fl = 0 } },
31
 
    { { 0x007fffff }, { 0x007fffff }, { .fl = 0 } },
32
 
 
33
 
    { { 0x80000001 }, { 0x80000001 }, { .fl = -0.0 } },
34
 
    { { 0x80000100 }, { 0x80000100 }, { .fl = -0.0 } },
35
 
    { { 0x80010000 }, { 0x80010000 }, { .fl = -0.0 } },
36
 
    { { 0x807fffff }, { 0x807fffff }, { .fl = -0.0 } },
37
 
    
38
 
    /* integral normal  */
39
 
    { { .fl = 0x000001 }, { .fl = 0 }, { .fl = 0x000001 } },
40
 
    { { .fl = 0x000002 }, { .fl = 0 }, { .fl = 0x000002 } },
41
 
    { { .fl = 0x000004 }, { .fl = 0 }, { .fl = 0x000004 } },
42
 
    { { .fl = 0x000008 }, { .fl = 0 }, { .fl = 0x000008 } },
43
 
    { { .fl = 0x000010 }, { .fl = 0 }, { .fl = 0x000010 } },
44
 
    { { .fl = 0x000020 }, { .fl = 0 }, { .fl = 0x000020 } },
45
 
    { { .fl = 0x000040 }, { .fl = 0 }, { .fl = 0x000040 } },
46
 
    { { .fl = 0x000080 }, { .fl = 0 }, { .fl = 0x000080 } },
47
 
    { { .fl = 0x000100 }, { .fl = 0 }, { .fl = 0x000100 } },
48
 
    { { .fl = 0x000200 }, { .fl = 0 }, { .fl = 0x000200 } },
49
 
    { { .fl = 0x000400 }, { .fl = 0 }, { .fl = 0x000400 } },
50
 
    { { .fl = 0x000800 }, { .fl = 0 }, { .fl = 0x000800 } },
51
 
    { { .fl = 0x001000 }, { .fl = 0 }, { .fl = 0x001000 } },
52
 
    { { .fl = 0x002000 }, { .fl = 0 }, { .fl = 0x002000 } },
53
 
    { { .fl = 0x004000 }, { .fl = 0 }, { .fl = 0x004000 } },
54
 
    { { .fl = 0x008000 }, { .fl = 0 }, { .fl = 0x008000 } },
55
 
    { { .fl = 0x010000 }, { .fl = 0 }, { .fl = 0x010000 } },
56
 
    { { .fl = 0x020000 }, { .fl = 0 }, { .fl = 0x020000 } },
57
 
    { { .fl = 0x040000 }, { .fl = 0 }, { .fl = 0x040000 } },
58
 
    { { .fl = 0x080000 }, { .fl = 0 }, { .fl = 0x080000 } },
59
 
    { { .fl = 0x100000 }, { .fl = 0 }, { .fl = 0x100000 } },
60
 
    { { .fl = 0x200000 }, { .fl = 0 }, { .fl = 0x200000 } },
61
 
    { { .fl = 0x400000 }, { .fl = 0 }, { .fl = 0x400000 } },
62
 
    { { .fl = 0x7fffff }, { .fl = 0 }, { .fl = 0x7fffff } },
63
 
 
64
 
    { { .fl = -0x000001L }, { .fl = -0.0 }, { .fl = -0x000001L } },
65
 
    { { .fl = -0x000002L }, { .fl = -0.0 }, { .fl = -0x000002L } },
66
 
    { { .fl = -0x000080L }, { .fl = -0.0 }, { .fl = -0x000080L } },
67
 
    { { .fl = -0x000100L }, { .fl = -0.0 }, { .fl = -0x000100L } },
68
 
    { { .fl = -0x008000L }, { .fl = -0.0 }, { .fl = -0x008000L } },
69
 
    { { .fl = -0x010000L }, { .fl = -0.0 }, { .fl = -0x010000L } },
70
 
    { { .fl = -0x400000L }, { .fl = -0.0 }, { .fl = -0x400000L } },
71
 
    { { .fl = -0x7fffffL }, { .fl = -0.0 }, { .fl = -0x7fffffL } },
72
 
    
73
 
    /* normal too big   */
74
 
    { { .fl = 0x800000 }, { .fl = 0 }, { .fl = 0x800000 } },
75
 
    { { .fl = 0x800001 }, { .fl = 0 }, { .fl = 0x800001 } },
76
 
    { { 0x7e000000 }, { .fl = 0 }, { 0x7e000000 } },
77
 
    { { 0x7f000000 }, { .fl = 0 }, { 0x7f000000 } },
78
 
    { { 0x7f7fffff }, { .fl = 0 }, { 0x7f7fffff } },
79
 
 
80
 
    { { .fl = -0x800000L }, { .fl = -0.0 }, { .fl = -0x800000L } },
81
 
    { { .fl = -0x800001L }, { .fl = -0.0 }, { .fl = -0x800001L } },
82
 
    { { 0xfe000000 }, { .fl = -0.0 }, { 0xfe000000 } },
83
 
    { { 0xff000000 }, { .fl = -0.0 }, { 0xff000000 } },
84
 
    { { 0xff7fffff }, { .fl = -0.0 }, { 0xff7fffff } },
85
 
    
86
 
    /* Inf      */
87
 
    { { 0x7f800000 },   { .fl = 0 },    { 0x7f800000 } },
88
 
    { { 0xff800000 },   { .fl = -0.0 }, { 0xff800000 } },
89
 
    
90
 
    /* integral and fraction    */
91
 
    { { .fl= 0x1.000002p+0 }, { .fl= 0x0.000002p+0 }, { .fl= 1 } },
92
 
    { { .fl= 0x1.000004p+0 }, { .fl= 0x0.000004p+0 }, { .fl= 1 } },
93
 
    { { .fl= 0x1.000008p+0 }, { .fl= 0x0.000008p+0 }, { .fl= 1 } },
94
 
    { { .fl= 0x1.000010p+0 }, { .fl= 0x0.000010p+0 }, { .fl= 1 } },
95
 
    { { .fl= 0x1.000020p+0 }, { .fl= 0x0.000020p+0 }, { .fl= 1 } },
96
 
    { { .fl= 0x1.000040p+0 }, { .fl= 0x0.000040p+0 }, { .fl= 1 } },
97
 
    { { .fl= 0x1.000080p+0 }, { .fl= 0x0.000080p+0 }, { .fl= 1 } },
98
 
    { { .fl= 0x1.000100p+0 }, { .fl= 0x0.000100p+0 }, { .fl= 1 } },
99
 
    { { .fl= 0x1.000200p+0 }, { .fl= 0x0.000200p+0 }, { .fl= 1 } },
100
 
    { { .fl= 0x1.000400p+0 }, { .fl= 0x0.000400p+0 }, { .fl= 1 } },
101
 
    { { .fl= 0x1.000800p+0 }, { .fl= 0x0.000800p+0 }, { .fl= 1 } },
102
 
    { { .fl= 0x1.001000p+0 }, { .fl= 0x0.001000p+0 }, { .fl= 1 } },
103
 
    { { .fl= 0x1.002000p+0 }, { .fl= 0x0.002000p+0 }, { .fl= 1 } },
104
 
    { { .fl= 0x1.004000p+0 }, { .fl= 0x0.004000p+0 }, { .fl= 1 } },
105
 
    { { .fl= 0x1.008000p+0 }, { .fl= 0x0.008000p+0 }, { .fl= 1 } },
106
 
    { { .fl= 0x1.010000p+0 }, { .fl= 0x0.010000p+0 }, { .fl= 1 } },
107
 
    { { .fl= 0x1.020000p+0 }, { .fl= 0x0.020000p+0 }, { .fl= 1 } },
108
 
    { { .fl= 0x1.040000p+0 }, { .fl= 0x0.040000p+0 }, { .fl= 1 } },
109
 
    { { .fl= 0x1.080000p+0 }, { .fl= 0x0.080000p+0 }, { .fl= 1 } },
110
 
    { { .fl= 0x1.100000p+0 }, { .fl= 0x0.100000p+0 }, { .fl= 1 } },
111
 
    { { .fl= 0x1.200000p+0 }, { .fl= 0x0.200000p+0 }, { .fl= 1 } },
112
 
    { { .fl= 0x1.400000p+0 }, { .fl= 0x0.400000p+0 }, { .fl= 1 } },
113
 
    { { .fl= 0x1.800000p+0 }, { .fl= 0x0.800000p+0 }, { .fl= 1 } },
114
 
    { { .fl= 0x1.fffffep+0 }, { .fl= 0x0.fffffep+0 }, { .fl= 1 } },
115
 
 
116
 
    { { .fl= 0x2.000004p+0 }, { .fl= 0x0.000004p+0 }, { .fl= 2 } },
117
 
    { { .fl= 0x2.000400p+0 }, { .fl= 0x0.000400p+0 }, { .fl= 2 } },
118
 
    { { .fl= 0x2.800000p+0 }, { .fl= 0x0.800000p+0 }, { .fl= 2 } },
119
 
    { { .fl= 0x2.fffffcp+0 }, { .fl= 0x0.fffffcp+0 }, { .fl= 2 } },
120
 
    { { .fl= 0x7fffff.8p+0 }, { .fl= 0x0.8p+0 }, { .fl= 0x7fffffp+0 } },
121
 
 
122
 
    { { .fl= -0x1.000002p+0 }, { .fl= -0x0.000002p+0 }, { .fl= -1 } },
123
 
    { { .fl= -0x1.800000p+0 }, { .fl= -0x0.800000p+0 }, { .fl= -1 } },
124
 
    { { .fl= -0x1.fffffep+0 }, { .fl= -0x0.fffffep+0 }, { .fl= -1 } },
125
 
    { { .fl= -0x2.000004p+0 }, { .fl= -0x0.000004p+0 }, { .fl= -2 } },
126
 
    { { .fl= -0x2.000400p+0 }, { .fl= -0x0.000400p+0 }, { .fl= -2 } },
127
 
    { { .fl= -0x2.800000p+0 }, { .fl= -0x0.800000p+0 }, { .fl= -2 } },
128
 
    { { .fl= -0x2.fffffcp+0 }, { .fl= -0x0.fffffcp+0 }, { .fl= -2 } },
129
 
    { { .fl= -0x7fffff.8p+0 }, { .fl= -0x0.8p+0 }, { .fl= -0x7fffffp+0 } },
130
 
};
131
 
 
132
 
void x_exit (int index)
133
 
{
134
 
#ifndef __AVR__
135
 
    fprintf (stderr, "t[%d]:  %#lx\n", index - 1, vf.lo);
136
 
#endif
137
 
    exit (index ? index : -1);
138
 
}
139
 
 
140
 
int main ()
141
 
{
142
 
    union lofl_u x, zf, zn, vn1;
143
 
    int i;
144
 
    
145
 
    for (i = 0; i < (int) (sizeof(t) / sizeof(t[0])); i++) {
146
 
        x.lo = pgm_read_dword (& t[i].x);
147
 
        zf.lo = pgm_read_dword (& t[i].f);
148
 
        zn.lo = pgm_read_dword (& t[i].n);
149
 
        vf.fl = modf (x.fl, & vn);
150
 
        vn1.fl = vn;
151
 
        if ((vf.lo != zf.lo) || (vn1.lo != zn.lo))
152
 
            x_exit (i+1);
153
 
    }
154
 
    return 0;
155
 
}