blob: 075209b75493a32b3198157360bc3efb0d69c35e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
// test_round.cc -- test driver for round<fpt> and round<double>
// $Id$
#include <stdio.h>
#include <assert.h>
#include "stdc.h"
#include "util++.hh"
//
// Usage:
// test_round x
//
int main(int argc, const char *const argv[])
{
for (int i = -10 ; i <= +10 ; ++i)
{
printf("testing %d +/- various things...\n", i);
float f = float(i);
double d = double(i);
//
// round<fpt>::to_integer()
//
assert( round<double>::to_integer(d - 0.49) == i );
assert( round<double>::to_integer(d - 0.01) == i );
assert( round<double>::to_integer(d - 1e-4) == i );
assert( round<double>::to_integer(d - 1e-10) == i );
assert( round<double>::to_integer(d ) == i );
assert( round<double>::to_integer(d + 1e-10) == i );
assert( round<double>::to_integer(d + 1e-4) == i );
assert( round<double>::to_integer(d + 0.01) == i );
assert( round<double>::to_integer(d + 0.49) == i );
assert( round<float>::to_integer(f - 0.49) == i );
assert( round<float>::to_integer(f - 0.01) == i );
assert( round<float>::to_integer(f - 1e-4) == i );
assert( round<float>::to_integer(f - 1e-10) == i );
assert( round<float>::to_integer(f ) == i );
assert( round<float>::to_integer(f + 1e-10) == i );
assert( round<float>::to_integer(f + 1e-4) == i );
assert( round<float>::to_integer(f + 0.01) == i );
assert( round<float>::to_integer(f + 0.49) == i );
//
// round<fpt>::floor()
//
assert( round<double>::floor(d - 0.49) == i-1 );
assert( round<double>::floor(d - 0.01) == i-1);
assert( round<double>::floor(d - 1e-4) == i-1 );
assert( round<double>::floor(d - 1e-10) == i-1 );
assert( round<double>::floor(d ) == i );
assert( round<double>::floor(d + 1e-10) == i );
assert( round<double>::floor(d + 1e-4) == i );
assert( round<double>::floor(d + 0.01) == i );
assert( round<double>::floor(d + 0.49) == i );
assert( round<float>::floor(f - 0.49) == i-1 );
assert( round<float>::floor(f - 0.01) == i-1 );
assert( round<float>::floor(f - 1e-4) == i-1 );
assert( round<float>::floor(f - 1e-10) == ((i == 0) ? i-1 : i) );
// i != 0 ==> not enough precision
// to see as noninteger
assert( round<float>::floor(f ) == i );
assert( round<float>::floor(f + 1e-10) == i );
assert( round<float>::floor(f + 1e-4) == i );
assert( round<float>::floor(f + 0.01) == i );
assert( round<float>::floor(f + 0.49) == i );
//
// round<fpt>::ceiling()
//
assert( round<double>::ceiling(d - 0.49) == i );
assert( round<double>::ceiling(d - 0.01) == i);
assert( round<double>::ceiling(d - 1e-4) == i );
assert( round<double>::ceiling(d - 1e-10) == i );
assert( round<double>::ceiling(d ) == i );
assert( round<double>::ceiling(d + 1e-10) == i+1 );
assert( round<double>::ceiling(d + 1e-4) == i+1 );
assert( round<double>::ceiling(d + 0.01) == i+1 );
assert( round<double>::ceiling(d + 0.49) == i+1 );
assert( round<float>::ceiling(f - 0.49) == i );
assert( round<float>::ceiling(f - 0.01) == i);
assert( round<float>::ceiling(f - 1e-4) == i );
assert( round<float>::ceiling(f - 1e-10) == i );
assert( round<float>::ceiling(f ) == i );
assert( round<float>::ceiling(f + 1e-10) == ((i == 0) ? i+1 : i) );
// i != 0 ==> not enough precision
// to see as noninteger
assert( round<float>::ceiling(f + 1e-4) == i+1 );
assert( round<float>::ceiling(f + 0.01) == i+1 );
assert( round<float>::ceiling(f + 0.49) == i+1 );
}
printf("everything looks ok!\n");
return 0;
}
|