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

« back to all changes in this revision

Viewing changes to tests/simulate/math/sqrt-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 sqrt() function.
2
 
   $Id: sqrt-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;             /* sqrt(x)      */
19
 
} t[] = {
20
 
 
21
 
    /* zero     */
22
 
    { { 0x00000000 }, { 0x00000000 } },
23
 
    { { 0x80000000 }, { 0x80000000 } },         /* sqrt(-0.0) --> -0.0  */
24
 
    
25
 
    /* +Inf     */
26
 
    { { 0x7f800000 }, { 0x7f800000 } },
27
 
    
28
 
    /* some known values        */
29
 
    { { .fl= 0.25 },    { .fl= 0.5 }    },
30
 
    { { .fl= 1 },       { .fl= 1 }      },
31
 
    { { .fl= 4 },       { .fl= 2 }      },
32
 
    { { .fl= 9 },       { .fl= 3 }      },
33
 
    { { .fl= 25 },      { .fl= 5 }      },
34
 
    { { .fl= 49 },      { .fl= 7 }      },
35
 
    { { .fl= 100 },     { .fl= 10 }     },
36
 
    { { .fl= 121 },     { .fl= 11 }     },
37
 
    { { .fl= 169 },     { .fl= 13 }     },
38
 
    { { .fl= 10000 },   { .fl= 100 }    },
39
 
    { { .fl= 1000000 }, { .fl= 1000 }   },
40
 
    
41
 
    /* subnormals       */
42
 
    { { 0x00000001 },   { 0x1a3504f3 }  },
43
 
    { { 0x00000002 },   { 0x1a800000 }  },
44
 
    { { 0x00000003 },   { 0x1a9cc471 }  },
45
 
    { { 0x00000080 },   { 0x1c000000 }  },
46
 
    { { 0x00000100 },   { 0x1c3504f3 }  },
47
 
    { { 0x00008000 },   { 0x1e000000 }  },
48
 
    { { 0x00010000 },   { 0x1e3504f3 }  },
49
 
    { { 0x00400000 },   { 0x1fb504f3 }  },
50
 
    { { 0x007fffff },   { 0x1fffffff }  },
51
 
    
52
 
    /* margin values    */
53
 
    { { 0x00800000 },   { 0x20000000 }  },
54
 
    { { 0x00800001 },   { 0x20000000 }  },
55
 
    { { 0x01000000 },   { 0x203504f3 }  },
56
 
    { { 0x01000001 },   { 0x203504f4 }  },
57
 
    { { 0x7f000000 },   { 0x5f3504f3 }  },
58
 
    { { 0x7f000001 },   { 0x5f3504f4 }  },
59
 
    { { 0x7f7ffffe },   { 0x5f7fffff }  },
60
 
    { { 0x7f7fffff },   { 0x5f7fffff }  },
61
 
    
62
 
    /* rounding */
63
 
    { { .fl= 0x0.800001p+1 }, { .fl= 0x0.800000p+1 } },
64
 
    { { .fl= 0x0.800002p+1 }, { .fl= 0x0.800001p+1 } },
65
 
    { { .fl= 0x0.800003p+1 }, { .fl= 0x0.800001p+1 } },
66
 
    { { .fl= 0x0.800004p+1 }, { .fl= 0x0.800002p+1 } },
67
 
    { { .fl= 0x0.800005p+1 }, { .fl= 0x0.800002p+1 } },
68
 
    { { .fl= 0x0.800006p+1 }, { .fl= 0x0.800003p+1 } },
69
 
    { { .fl= 0x0.800007p+1 }, { .fl= 0x0.800003p+1 } },
70
 
    { { .fl= 0x0.800008p+1 }, { .fl= 0x0.800004p+1 } },
71
 
    { { .fl= 0x0.800009p+1 }, { .fl= 0x0.800004p+1 } },
72
 
};
73
 
 
74
 
void x_exit (int index)
75
 
{
76
 
#ifndef __AVR__
77
 
    fprintf (stderr, "t[%d]:  %#lx\n", index - 1, v.lo);
78
 
#endif
79
 
    exit (index ? index : -1);
80
 
}
81
 
 
82
 
int main ()
83
 
{
84
 
    union lofl_u x, z;
85
 
    int i;
86
 
    
87
 
    for (i = 0; i < (int) (sizeof(t) / sizeof(t[0])); i++) {
88
 
        x.lo = pgm_read_dword (& t[i].x);
89
 
        z.lo = pgm_read_dword (& t[i].z);
90
 
        v.fl = sqrt (x.fl);
91
 
        /* Comparison is integer to verify the zero sign.       */
92
 
        if (v.lo != z.lo)
93
 
            x_exit (i+1);
94
 
    }
95
 
    return 0;
96
 
}