1 #include "endianess.h"
2 #include <assert.h>
3
test_little_32(void)4 void test_little_32(void)
5 {
6 uint32_t t;
7 uint8_t res[4];
8
9 t = 0x04030201U;
10 memset(res, 0xFF, 4);
11 u32to8_little(res, &t);
12 assert(0 == memcmp(res, "\x01\x02\x03\x04", 4));
13
14 t = ~0U;
15 u8to32_little(&t, res);
16 assert(t == 0x04030201U);
17
18 t = ~0U;
19 t = load_u8to32_little(res);
20 assert(t == 0x04030201U);
21
22
23 t = ~0U;
24 t = LOAD_U32_LITTLE(res);
25 assert(t == 0x04030201U);
26
27 t = 0x04030201U;
28 memset(res, 0xFF, 4);
29 STORE_U32_LITTLE(res, t);
30 assert(0 == memcmp(res, "\x01\x02\x03\x04", 4));
31 }
32
test_big_32(void)33 void test_big_32(void)
34 {
35 uint32_t t;
36 uint8_t res[4];
37
38 t = 0x04030201U;
39 memset(res, 0xFF, 4);
40 u32to8_big(res, &t);
41 assert(0 == memcmp(res, "\x04\x03\x02\x01", 4));
42
43 t = ~0U;
44 u8to32_big(&t, res);
45 assert(t == 0x04030201U);
46
47 t = ~0U;
48 t = load_u8to32_big(res);
49 assert(t == 0x04030201U);
50
51
52 t = ~0U;
53 t = LOAD_U32_BIG(res);
54 assert(t == 0x04030201U);
55
56 t = 0x04030201U;
57 memset(res, 0xFF, 4);
58 STORE_U32_BIG(res, t);
59 assert(0 == memcmp(res, "\x04\x03\x02\x01", 4));
60 }
61
test_little_64(void)62 void test_little_64(void)
63 {
64 uint64_t t;
65 uint8_t res[8];
66
67 t = 0x0807060504030201UL;
68 memset(res, 0xFF, 8);
69 u64to8_little(res, &t);
70 assert(0 == memcmp(res, "\x01\x02\x03\x04\x05\x06\x07\x08", 8));
71
72 t = ~0UL;
73 u8to64_little(&t, res);
74 assert(t == 0x0807060504030201UL);
75
76 t = ~0UL;
77 t = load_u8to64_little(res);
78 assert(t == 0x0807060504030201UL);
79
80
81 t = ~0UL;
82 t = LOAD_U64_LITTLE(res);
83 assert(t == 0x0807060504030201UL);
84
85 t = 0x0807060504030201UL;
86 memset(res, 0xFF, 8);
87 STORE_U64_LITTLE(res, t);
88 assert(0 == memcmp(res, "\x01\x02\x03\x04\x05\x06\x07\x08", 8));
89 }
90
test_big_64(void)91 void test_big_64(void)
92 {
93 uint64_t t;
94 uint8_t res[8];
95
96 t = 0x0807060504030201UL;
97 memset(res, 0xFF, 8);
98 u64to8_big(res, &t);
99 assert(0 == memcmp(res, "\x08\x07\x06\x05\x04\x03\x02\x01", 8));
100
101 t = ~0UL;
102 u8to64_big(&t, res);
103 assert(t == 0x0807060504030201UL);
104
105 t = ~0UL;
106 t = load_u8to64_big(res);
107 assert(t == 0x0807060504030201UL);
108
109
110 t = ~0UL;
111 t = LOAD_U64_BIG(res);
112 assert(t == 0x0807060504030201UL);
113
114 t = 0x0807060504030201UL;
115 memset(res, 0xFF, 8);
116 STORE_U64_BIG(res, t);
117 assert(0 == memcmp(res, "\x08\x07\x06\x05\x04\x03\x02\x01", 8));
118 }
119
test_bytes_to_words(void)120 void test_bytes_to_words(void)
121 {
122 int res;
123 uint8_t b2[2] = { 9, 3 };
124 uint8_t b9[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
125 uint64_t w2[2] = { 6, 4 };
126 uint64_t w2_0[2];
127 uint8_t b17[17];
128
129 res = bytes_to_words(NULL, 10, b2, 2);
130 assert(res == ERR_NULL);
131 res = bytes_to_words(w2, 10, NULL, 2);
132 assert(res == ERR_NULL);
133 res = bytes_to_words(w2, 2, b2, 0);
134 assert(res == ERR_NOT_ENOUGH_DATA);
135 res = bytes_to_words(w2, 0, b2, 2);
136 assert(res == ERR_NOT_ENOUGH_DATA);
137
138 memset(b17, 0, 17);
139 b17[0] = 1;
140 res = bytes_to_words(w2, 2, b17, 17);
141 assert(res == ERR_MAX_DATA);
142
143 b17[0] = 0;
144 res = bytes_to_words(w2, 2, b17, 17);
145 assert(res == 0);
146 assert(w2[0] == 0 && w2[1] == 0);
147
148 res = bytes_to_words(w2_0, 2, b2, 2);
149 assert(w2_0[0] == 0x0903);
150 assert(w2_0[1] == 0);
151 assert(res == 0);
152
153 res = bytes_to_words(w2_0, 2, b9, 9);
154 assert(w2_0[0] == 0x0203040506070809);
155 assert(w2_0[1] == 0x01);
156 assert(res == 0);
157 }
158
test_words_to_bytes(void)159 void test_words_to_bytes(void)
160 {
161 int res;
162 uint8_t b2[2] = { 9, 3 };
163 uint8_t b9[9];
164 uint64_t w2[2] = { 6, 4 };
165 uint8_t b17[17];
166 uint64_t w3[3];
167 unsigned i;
168
169 memset(b17, 0xFF, 17);
170
171 res = words_to_bytes(NULL, 16, w2, 2);
172 assert(res == ERR_NULL);
173 res = words_to_bytes(b2, 16, NULL, 2);
174 assert(res == ERR_NULL);
175 res = words_to_bytes(b2, 2, w2, 0);
176 assert(res == ERR_NOT_ENOUGH_DATA);
177 res = words_to_bytes(b2, 0, w2, 2);
178 assert(res == ERR_NOT_ENOUGH_DATA);
179
180 res = words_to_bytes(b9, 8, w2, 2);
181 assert(res == ERR_MAX_DATA);
182
183 res = words_to_bytes(b9, 9, w2, 2);
184 assert(res == 0);
185 assert(0 == memcmp(b9, "\x04\x00\x00\x00\x00\x00\x00\x00\x06", 9));
186
187 res = words_to_bytes(b9, 9, w2, 1);
188 assert(res == 0);
189 assert(0 == memcmp(b9, "\x00\x00\x00\x00\x00\x00\x00\x00\x06", 9));
190
191 res = words_to_bytes(b17, 17, w2, 2);
192 assert(b17[0] == 0);
193 assert(0 == memcmp(b17+1, "\x00\x00\x00\x00\x00\x00\x00\x04", 8));
194 assert(0 == memcmp(b17+9, "\x00\x00\x00\x00\x00\x00\x00\x06", 8));
195 assert(res == 0);
196
197 memset(b17, 0xFF, sizeof b17);
198 memset(w3, 0, sizeof w3);
199 res = words_to_bytes(b17, 17, w3, 3);
200 assert(res == 0);
201 for (i=0; i<sizeof b17; i++) {
202 assert(b17[i] == 0);
203 }
204 }
205
main(void)206 int main(void)
207 {
208 test_little_32();
209 test_big_32();
210 test_little_64();
211 test_big_64();
212 test_bytes_to_words();
213 test_words_to_bytes();
214 return 0;
215 }
216