comparison test/test_compare.h @ 9:6ff0b7a44bb6

generic: add initial support for 256-bit and 512-bit types eventually this could be expanded to add floating point stuff as well
author Paper <paper@tflc.us>
date Mon, 18 Nov 2024 13:52:09 -0500
parents 75ab77f874e2
children d1d5d767004c
comparison
equal deleted inserted replaced
6:978c167dcceb 9:6ff0b7a44bb6
21 } \ 21 } \
22 \ 22 \
23 return 0; \ 23 return 0; \
24 } 24 }
25 25
26 #define CREATE_TESTS(sign, psign, bits, size) \ 26 #define CREATE_TESTS_SIGN(sign, psign, bits, size) \
27 CREATE_TEST(sign, psign, bits, size, cmplt, orig_a[i] < orig_b[i]) \ 27 CREATE_TEST(sign, psign, bits, size, cmplt, orig_a[i] < orig_b[i]) \
28 CREATE_TEST(sign, psign, bits, size, cmpgt, orig_a[i] > orig_b[i]) \ 28 CREATE_TEST(sign, psign, bits, size, cmpgt, orig_a[i] > orig_b[i]) \
29 CREATE_TEST(sign, psign, bits, size, cmpeq, orig_a[i] == orig_b[i]) \ 29 CREATE_TEST(sign, psign, bits, size, cmpeq, orig_a[i] == orig_b[i]) \
30 CREATE_TEST(sign, psign, bits, size, cmple, orig_a[i] <= orig_b[i]) \ 30 CREATE_TEST(sign, psign, bits, size, cmple, orig_a[i] <= orig_b[i]) \
31 CREATE_TEST(sign, psign, bits, size, cmpge, orig_a[i] >= orig_b[i]) 31 CREATE_TEST(sign, psign, bits, size, cmpge, orig_a[i] >= orig_b[i])
32 32
33 #define CREATE_TESTS_2(bits, size) CREATE_TESTS(, d, bits, size) CREATE_TESTS(u, u, bits, size) 33 #define CREATE_TESTS(bits, size) CREATE_TESTS_SIGN(, d, bits, size) CREATE_TESTS_SIGN(u, u, bits, size)
34 34
35 CREATE_TESTS_2(8, 16) 35 CREATE_TESTS(8, 16)
36 CREATE_TESTS_2(16, 8) 36 CREATE_TESTS(16, 8)
37 CREATE_TESTS_2(32, 4) 37 CREATE_TESTS(32, 4)
38 CREATE_TESTS_2(64, 2) 38 CREATE_TESTS(64, 2)
39 39
40 #undef CREATE_TESTS_2 40 CREATE_TESTS(8, 32)
41 CREATE_TESTS(16, 16)
42 CREATE_TESTS(32, 8)
43 CREATE_TESTS(64, 4)
44
45 CREATE_TESTS(8, 64)
46 CREATE_TESTS(16, 32)
47 CREATE_TESTS(32, 16)
48 CREATE_TESTS(64, 8)
49
50 #undef CREATE_TESTS_SIGN
41 #undef CREATE_TESTS 51 #undef CREATE_TESTS
42 #undef CREATE_TEST 52 #undef CREATE_TEST
43 53
44 static int test_compare(void) 54 static int test_compare(void)
45 { 55 {
46 int ret = 0; 56 int ret = 0;
47 57
48 #define RUN_TESTS(sign, bits, size) \ 58 #define RUN_TESTS_SIGN(sign, bits, size) \
49 for (size_t i = 0U; i < ARRAY_SIZE(testval##sign##bits); i++) { \ 59 for (size_t i = 0U; i < ARRAY_SIZE(testval##sign##bits); i++) { \
50 const v##sign##int##bits##x##size a = vtest##sign##bits##x##size(i); \ 60 const v##sign##int##bits##x##size a = vtest##sign##bits##x##size(i); \
51 for (size_t j = 0U; j < ARRAY_SIZE(testval##sign##bits); j++) { \ 61 for (size_t j = 0U; j < ARRAY_SIZE(testval##sign##bits); j++) { \
52 const v##sign##int##bits##x##size b = vtest##sign##bits##x##size(j); \ 62 const v##sign##int##bits##x##size b = vtest##sign##bits##x##size(j); \
53 ret |= test_compare_v##sign##int##bits##x##size##_cmplt(a, b); \ 63 ret |= test_compare_v##sign##int##bits##x##size##_cmplt(a, b); \
56 ret |= test_compare_v##sign##int##bits##x##size##_cmple(a, b); \ 66 ret |= test_compare_v##sign##int##bits##x##size##_cmple(a, b); \
57 ret |= test_compare_v##sign##int##bits##x##size##_cmpge(a, b); \ 67 ret |= test_compare_v##sign##int##bits##x##size##_cmpge(a, b); \
58 } \ 68 } \
59 } 69 }
60 70
61 #define RUN_TESTS_2(bits, size) \ 71 #define RUN_TESTS(bits, size) \
62 RUN_TESTS( , bits, size) \ 72 RUN_TESTS_SIGN( , bits, size) \
63 RUN_TESTS(u, bits, size) 73 RUN_TESTS_SIGN(u, bits, size)
64 74
65 RUN_TESTS_2(8, 16) 75 RUN_TESTS(8, 16)
66 RUN_TESTS_2(16, 8) 76 RUN_TESTS(16, 8)
67 RUN_TESTS_2(32, 4) 77 RUN_TESTS(32, 4)
68 RUN_TESTS_2(64, 2) 78 RUN_TESTS(64, 2)
69 79
70 #undef RUN_TESTS_2 80 RUN_TESTS(8, 32)
81 RUN_TESTS(16, 16)
82 RUN_TESTS(32, 8)
83 RUN_TESTS(64, 4)
84
85 RUN_TESTS(8, 64)
86 RUN_TESTS(16, 32)
87 RUN_TESTS(32, 16)
88 RUN_TESTS(64, 8)
89
90 #undef RUN_TESTS_SIGN
71 #undef RUN_TESTS 91 #undef RUN_TESTS
72 92
73 return ret; 93 return ret;
74 } 94 }