0
|
1 #include "dmlib.h"
|
|
2 #include <stdio.h>
|
|
3
|
|
4 #define FP_DW_SIZE 8
|
|
5 #define FP_W0_SIZE 4
|
|
6
|
|
7 void check(const char *str, DMFixedPoint v, Uint64 dw)
|
|
8 {
|
|
9 DMFixedPoint *q = (DMFixedPoint *) &dw;
|
|
10
|
|
11 printf("%-15s = ", str); FP_PRINTF(v); printf("\n");
|
|
12 printf("should be = "); FP_PRINTF((*q)); printf("\n");
|
|
13
|
|
14 if (v.dw != dw)
|
|
15 {
|
|
16 printf("ERROR! A test value differs from expected!\n");
|
|
17 exit(1);
|
|
18 }
|
|
19 }
|
|
20
|
|
21 int main(int argc, char *argv[])
|
|
22 {
|
|
23 int i;
|
|
24 DMFixedPoint a, b, delta;
|
|
25 char *s;
|
|
26
|
|
27 (void) argc;
|
|
28 (void) argv;
|
|
29
|
|
30 // Check host characteristics
|
|
31 switch (SDL_BYTEORDER)
|
|
32 {
|
|
33 case SDL_BIG_ENDIAN: s = "big endian"; break;
|
|
34 case SDL_LIL_ENDIAN: s = "little endian"; break;
|
|
35 default: s = "unknown?"; break;
|
|
36 }
|
|
37
|
|
38 printf(
|
|
39 "SDL byte order = %s (%d)\n\n", s, SDL_BYTEORDER);
|
|
40
|
|
41 printf(
|
|
42 "sizeof(DMFixedPoint) = %d bytes\n"
|
|
43 "sizeof(DMFixedPoint.dw = %d bytes (should be %d)\n"
|
|
44 "sizeof(DMFixedPoint.w[0] = %d bytes (should be %d)\n",
|
|
45 sizeof(a), sizeof(a.dw), FP_DW_SIZE,
|
|
46 sizeof(a.w[0]), FP_W0_SIZE);
|
|
47
|
|
48 if (sizeof(a.dw) != FP_DW_SIZE || sizeof(a.w[0]) != FP_W0_SIZE)
|
|
49 {
|
|
50 printf("ERROR! Some type sizes DO NOT MATCH!\n");
|
|
51 return -1;
|
|
52 }
|
|
53
|
|
54 // TEST #1
|
|
55 printf("\nTEST #1: set initial values\n");
|
|
56 FP_SETHL(a, 55, 0);
|
|
57 check("a", a, 0x0000003700000000ULL);
|
|
58
|
|
59 FP_CONV(b, 178);
|
|
60 check("b", b, 0x00000000000000b2ULL);
|
|
61
|
|
62 FP_DIV_R(delta, a, b);
|
|
63 check("delta", delta, 0x000000004f19e33cULL);
|
|
64
|
|
65 // Test #2
|
|
66 printf("\nTEST #2: 50 x (a + delta)\n");
|
|
67 for (i = 0; i < 50; i++)
|
|
68 {
|
|
69 FP_ADD(a, delta);
|
|
70 }
|
|
71 check("a end", a, 0x00000046730e61b8ULL);
|
|
72
|
|
73
|
|
74 // Test #3
|
|
75 printf("\nTEST #3: 50 x (a - delta)\n");
|
|
76 for (i = 0; i < 50; i++)
|
|
77 {
|
|
78 FP_SUB(a, delta);
|
|
79 }
|
|
80 check("a end", a, 0x0000003700000000ULL);
|
|
81
|
|
82 // Test #4
|
|
83 printf("\nTEST #4: 5 x (a * delta)\n");
|
|
84 for (i = 0; i < 5; i++)
|
|
85 {
|
|
86 FP_MUL(a, delta);
|
|
87 }
|
|
88 check("a end", a, 0xd644e40000000000ULL);
|
|
89
|
|
90 // Test #5
|
|
91 printf("\nTEST #4: 2 x (a / delta)\n");
|
|
92 for (i = 0; i < 2; i++)
|
|
93 {
|
|
94 FP_DIV(a, delta);
|
|
95 }
|
|
96 check("a end", a, 8ULL);
|
|
97
|
|
98 return 0;
|
|
99 }
|