Mercurial > hg > dmlib
comparison tests/fptest.c @ 1610:61246926756a
Slight improvements to fptest.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 15 May 2018 11:33:46 +0300 |
parents | a9516570cc26 |
children | 186cf6a7d634 |
comparison
equal
deleted
inserted
replaced
1609:c29adf5ce240 | 1610:61246926756a |
---|---|
2 #include "dmlib.h" | 2 #include "dmlib.h" |
3 #include <stdio.h> | 3 #include <stdio.h> |
4 | 4 |
5 #define FP_DW_SIZE 8 | 5 #define FP_DW_SIZE 8 |
6 #define FP_W0_SIZE 4 | 6 #define FP_W0_SIZE 4 |
7 | |
8 static int test_number = 0; | |
7 | 9 |
8 void check(const char *str, DMFixedPoint v, Sint64 dw) | 10 void check(const char *str, DMFixedPoint v, Sint64 dw) |
9 { | 11 { |
10 DMFixedPoint *q = (DMFixedPoint *) &dw; | 12 DMFixedPoint *q = (DMFixedPoint *) &dw; |
11 | 13 |
13 printf("should be = "); FP_PRINTF64((*q)); printf("\n"); | 15 printf("should be = "); FP_PRINTF64((*q)); printf("\n"); |
14 | 16 |
15 if (v.dw != dw) | 17 if (v.dw != dw) |
16 { | 18 { |
17 printf("ERROR! A test value differs from expected!\n"); | 19 printf("ERROR! A test value differs from expected!\n"); |
18 exit(1); | |
19 } | 20 } |
21 } | |
22 | |
23 | |
24 void header(const char *msg) | |
25 { | |
26 test_number++; | |
27 printf("\nTEST #%d: %s\n", test_number, msg); | |
20 } | 28 } |
21 | 29 |
22 int main(int argc, char *argv[]) | 30 int main(int argc, char *argv[]) |
23 { | 31 { |
24 int i; | 32 int i; |
50 { | 58 { |
51 printf("ERROR! Some type sizes DO NOT MATCH!\n"); | 59 printf("ERROR! Some type sizes DO NOT MATCH!\n"); |
52 return -1; | 60 return -1; |
53 } | 61 } |
54 | 62 |
55 // TEST #1 | 63 //----------------------------------------------- |
56 printf("\nTEST #1: set initial values\n"); | 64 header("set initial values"); |
57 FP_SETHL(a, 55, 0); | 65 FP_SETHL(a, 55, 0); |
58 check("a", a, 0x0000003700000000ULL); | 66 check("a", a, 0x0000003700000000ULL); |
59 | 67 |
60 FP_CONV(b, 178); | 68 FP_CONV(b, 178); |
61 check("b", b, 0x00000000000000b2ULL); | 69 check("b", b, 0x00000000000000b2ULL); |
62 | 70 |
63 FP_DIV_R(delta, a, b); | 71 FP_DIV_R(delta, a, b); |
64 check("delta", delta, 0x000000004f19e33cULL); | 72 check("delta", delta, 0x000000004f19e33cULL); |
65 | 73 |
66 // Test #2 | 74 //----------------------------------------------- |
67 printf("\nTEST #2: 50 x (a + delta)\n"); | 75 header("50 x (a + delta)"); |
68 for (i = 0; i < 50; i++) | 76 for (i = 0; i < 50; i++) |
69 { | 77 { |
70 FP_ADD(a, delta); | 78 FP_ADD(a, delta); |
71 } | 79 } |
72 check("a end", a, 0x00000046730e61b8ULL); | 80 check("a end", a, 0x00000046730e61b8ULL); |
73 | 81 |
74 | 82 //----------------------------------------------- |
75 // Test #3 | 83 header("50 x (a - delta)"); |
76 printf("\nTEST #3: 50 x (a - delta)\n"); | |
77 for (i = 0; i < 50; i++) | 84 for (i = 0; i < 50; i++) |
78 { | 85 { |
79 FP_SUB(a, delta); | 86 FP_SUB(a, delta); |
80 } | 87 } |
81 check("a end", a, 0x0000003700000000ULL); | 88 check("a end", a, 0x0000003700000000ULL); |
82 | 89 |
83 // Test #4 | 90 //----------------------------------------------- |
84 printf("\nTEST #4: 5 x (a * delta)\n"); | 91 header("5 x (a * delta)"); |
85 for (i = 0; i < 5; i++) | 92 for (i = 0; i < 5; i++) |
86 { | 93 { |
87 FP_MUL(a, delta); | 94 FP_MUL(a, delta); |
88 } | 95 } |
89 check("a end", a, 0xd644e40000000000ULL); | 96 check("a end", a, 0xd644e40000000000ULL); |
90 | 97 |
91 // Test #5 | 98 //----------------------------------------------- |
92 printf("\nTEST #4: 2 x (a / delta)\n"); | 99 header("a / 2"); |
93 for (i = 0; i < 2; i++) | 100 FP_CONV(delta, 2); |
94 { | 101 FP_DIV(a, delta); |
95 FP_DIV(a, delta); | 102 check("a end", a, 0xeb22720000000000ULL); |
96 } | 103 |
97 check("a end", a, 8ULL); | 104 //----------------------------------------------- |
105 header("a / 2"); | |
106 FP_DIV(a, delta); | |
107 check("a end", a, 0xf591390000000000ULL); | |
108 | |
109 //----------------------------------------------- | |
110 header(""); | |
111 FP_SETHL(a, -200, 50); | |
112 FP_CONV(b, 15); | |
113 FP_DIV(a, b); | |
114 check("a end", a, 0xfffffff2aaaaaaaeULL); | |
98 | 115 |
99 return 0; | 116 return 0; |
100 } | 117 } |