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 }