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

« back to all changes in this revision

Viewing changes to tests/simulate/math/exp-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 exp() function.
2
 
   $Id: exp-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;             /* exp(x)       */
19
 
} t[] = {
20
 
 
21
 
    /* Zero     */
22
 
    { { .fl=  0.0 },    { .fl= 1 } },
23
 
    { { .fl= -0.0 },    { .fl= 1 } },
24
 
    
25
 
    /* Inf      */
26
 
    { { 0x7f800000 },   { 0x7f800000 } },
27
 
    { { 0xff800000 },   { 0x00000000 } },
28
 
 
29
 
    /* Subnormal        */
30
 
    { { 0x00000001 },   { .fl= 1 } },
31
 
    { { 0x00000100 },   { .fl= 1 } },
32
 
    { { 0x00010000 },   { .fl= 1 } },
33
 
    { { 0x007fffff },   { .fl= 1 } },
34
 
    { { 0x80000001 },   { .fl= 1 } },
35
 
    { { 0x80000100 },   { .fl= 1 } },
36
 
    { { 0x80010000 },   { .fl= 1 } },
37
 
    { { 0x807fffff },   { .fl= 1 } },
38
 
 
39
 
    /* Arg too small    */
40
 
    { { 0xc3000000 },   { .fl= 0 } },
41
 
    { { 0xc3800000 },   { .fl= 0 } },
42
 
    { { 0xc3ffffff },   { .fl= 0 } },
43
 
    { { 0xc4000000 },   { .fl= 0 } },
44
 
    { { 0xff7fffff },   { .fl= 0 } },
45
 
 
46
 
    /* Some values      */
47
 
    { { .fl=  1.0 },    { 0x402df854 } },
48
 
    { { .fl= -1.0 },    { 0x3ebc5ab2 } },
49
 
    
50
 
    /* Near 0.0 */
51
 
    { { .fl= 0x0.000002p0 }, { .fl= 0x1.000002p0 } },
52
 
    { { .fl= 0x0.000004p0 }, { .fl= 0x1.000004p0 } },
53
 
    { { .fl= 0x0.000006p0 }, { .fl= 0x1.000006p0 } },
54
 
    { { .fl= 0x0.000010p0 }, { .fl= 0x1.000010p0 } },
55
 
    { { .fl= 0x0.000100p0 }, { .fl= 0x1.000100p0 } },
56
 
    { { .fl= 0x0.000800p0 }, { .fl= 0x1.000800p0 } },
57
 
 
58
 
    { { .fl= -0x0.000001p0 }, { .fl= 0x0.ffffffp0 } },
59
 
    { { .fl= -0x0.000002p0 }, { .fl= 0x0.fffffep0 } },
60
 
    { { .fl= -0x0.000003p0 }, { .fl= 0x0.fffffdp0 } },
61
 
    { { .fl= -0x0.000010p0 }, { .fl= 0x0.fffff0p0 } },
62
 
    { { .fl= -0x0.000100p0 }, { .fl= 0x0.ffff00p0 } },
63
 
    { { .fl= -0x0.001000p0 }, { .fl= 0x0.fff000p0 } },
64
 
};
65
 
 
66
 
void x_exit (int index)
67
 
{
68
 
#ifndef __AVR__
69
 
    fprintf (stderr, "t[%d]:  %#lx\n", index - 1, v.lo);
70
 
#endif
71
 
    exit (index ? index : -1);
72
 
}
73
 
 
74
 
int main ()
75
 
{
76
 
    union lofl_u x, z;
77
 
    int i;
78
 
    
79
 
    for (i = 0; i < (int) (sizeof(t) / sizeof(t[0])); i++) {
80
 
        x.lo = pgm_read_dword (& t[i].x);
81
 
        z.lo = pgm_read_dword (& t[i].z);
82
 
        v.fl = exp (x.fl);
83
 
        /* Comparison is integer to verify the zero sign.       */
84
 
        if (v.lo != z.lo)
85
 
            x_exit (i+1);
86
 
    }
87
 
    return 0;
88
 
}