4 * This file is part of BeRTOS.
6 * Bertos is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 * As a special exception, you may use this file as part of a free software
21 * library without restriction. Specifically, if other files instantiate
22 * templates or use macros or inline functions from this file, or you compile
23 * this file and link it with other files to produce an executable, this
24 * file does not by itself cause the resulting executable to be covered by
25 * the GNU General Public License. This exception does not however
26 * invalidate any other reasons why the executable file might be covered by
27 * the GNU General Public License.
29 * Copyright 2011 Develer S.r.l. (http://www.develer.com/)
33 * \brief Fletcher-32 checksum algorithm
35 * \author Francesco Sacchi <batt@develer.com>
38 #include "fletcher32.h"
41 #include <cfg/debug.h>
46 /* Wikipedia reference implementation */
47 static uint32_t fletcher32( uint16_t *data, size_t len )
49 uint32_t sum1 = 0xffff, sum2 = 0xffff;
52 unsigned tlen = len > 360 ? 360 : len;
53 //kprintf("tlen %d\n", tlen);
58 //kprintf("sum1 %d sum2 %d\n", sum1, sum2);
60 ///kprintf("b sum1 %d sum2 %d\n", sum1, sum2);
61 sum1 = (sum1 & 0xffff) + (sum1 >> 16);
62 sum2 = (sum2 & 0xffff) + (sum2 >> 16);
63 //kprintf("a sum1 %d sum2 %d\n", sum1, sum2);
65 /* Second reduction step to reduce sums to 16 bits */
66 sum1 = (sum1 & 0xffff) + (sum1 >> 16);
67 sum2 = (sum2 & 0xffff) + (sum2 >> 16);
68 return sum2 << 16 | sum1;
71 static uint32_t fletcher32_b(const void *buf, size_t len)
73 size_t roundl = (len + 1) & 0xFFFFFFFE;
74 uint16_t *b = (uint16_t *)malloc(roundl);
78 uint32_t f2 = fletcher32(b, roundl / 2);
85 int fletcher32_testSetup(void)
91 int fletcher32_testTearDown(void)
96 static const char *tstbufs[] =
103 "1", "2", "3", "4", "5", "6", "7", "8", "9",
104 "11", "22", "33", "44", "55", "66", "77", "88", "99",
105 "111", "222", "333", "444", "555", "666", "777", "888", "999",
109 "abcdefghijklmnopqrstuvwxyz",
110 "abcdefghijklmnopqrstuvwxyza",
111 "abcdefghijklmnopqrstuvwxyz0123456789"
112 "abcdefghijklmnopqrstuvwxyz0123456789"
113 "abcdefghijklmnopqrstuvwxyz0123456789"
114 "abcdefghijklmnopqrstuvwxyz0123456789"
115 "abcdefghijklmnopqrstuvwxyz0123456789"
116 "abcdefghijklmnopqrstuvwxyz0123456789"
117 "abcdefghijklmnopqrstuvwxyz0123456789"
118 "abcdefghijklmnopqrstuvwxyz0123456789"
119 "abcdefghijklmnopqrstuvwxyz0123456789"
120 "abcdefghijklmnopqrstuvwxyz0123456789"
121 "abcdefghijklmnopqrstuvwxyz0123456789"
122 "abcdefghijklmnopqrstuvwxyz0123456789"
123 "abcdefghijklmnopqrstuvwxyz0123456789"
124 "abcdefghijklmnopqrstuvwxyz0123456789"
125 "abcdefghijklmnopqrstuvwxyz0123456789"
126 "abcdefghijklmnopqrstuvwxyz0123456789"
127 "abcdefghijklmnopqrstuvwxyz0123456789"
128 "abcdefghijklmnopqrstuvwxyz0123456789"
129 "abcdefghijklmnopqrstuvwxyz0123456789"
130 "abcdefghijklmnopqrstuvwxyz0123456789"
131 "abcdefghijklmnopqrstuvwxyz0123456789"
132 "abcdefghijklmnopqrstuvwxyz0123456789"
133 "abcdefghijklmnopqrstuvwxyz0123456789"
134 "abcdefghijklmnopqrstuvwxyz0123456789"
135 "abcdefghijklmnopqrstuvwxyz0123456789"
136 "abcdefghijklmnopqrstuvwxyz0123456789"
137 "abcdefghijklmnopqrstuvwxyz0123456789"
138 "abcdefghijklmnopqrstuvwxyz0123456789"
139 "abcdefghijklmnopqrstuvwxyz0123456789"
140 "abcdefghijklmnopqrstuvwxyz0123456789"
141 "abcdefghijklmnopqrstuvwxyz0123456789"
142 "abcdefghijklmnopqrstuvwxyz0123456789"
143 "abcdefghijklmnopqrstuvwxyz0123456789"
144 "abcdefghijklmnopqrstuvwxyz0123456789"
145 "abcdefghijklmnopqrstuvwxyz0123456789"
146 "abcdefghijklmnopqrstuvwxyz0123456789"
147 "abcdefghijklmnopqrstuvwxyz0123456789"
148 "abcdefghijklmnopqrstuvwxyz0123456789"
149 "abcdefghijklmnopqrstuvwxyz0123456789"
150 "abcdefghijklmnopqrstuvwxyz0123456789"
151 "abcdefghijklmnopqrstuvwxyz0123456789"
152 "abcdefghijklmnopqrstuvwxyz0123456789"
153 "abcdefghijklmnopqrstuvwxyz0123456789"
154 "abcdefghijklmnopqrstuvwxyz0123456789"
155 "abcdefghijklmnopqrstuvwxyz0123456789"
156 "abcdefghijklmnopqrstuvwxyz0123456789"
157 "abcdefghijklmnopqrstuvwxyz0123456789"
158 "abcdefghijklmnopqrstuvwxyz0123456789"
159 "abcdefghijklmnopqrstuvwxyz0123456789"
160 "abcdefghijklmnopqrstuvwxyz0123456789"
161 "abcdefghijklmnopqrstuvwxyz0123456789"
162 "abcdefghijklmnopqrstuvwxyz0123456789"
163 "abcdefghijklmnopqrstuvwxyz0123456789"
164 "abcdefghijklmnopqrstuvwxyz0123456789"
165 "abcdefghijklmnopqrstuvwxyz0123456789"
166 "abcdefghijklmnopqrstuvwxyz0123456789"
167 "abcdefghijklmnopqrstuvwxyz0123456789"
168 "abcdefghijklmnopqrstuvwxyz0123456789"
169 "abcdefghijklmnopqrstuvwxyz0123456789"
170 "abcdefghijklmnopqrstuvwxyz0123456789"
171 "abcdefghijklmnopqrstuvwxyz0123456789"
172 "abcdefghijklmnopqrstuvwxyz0123456789"
173 "abcdefghijklmnopqrstuvwxyz0123456789"
174 "abcdefghijklmnopqrstuvwxyz0123456789"
175 "abcdefghijklmnopqrstuvwxyz0123456789"
176 "abcdefghijklmnopqrstuvwxyz0123456789"
177 "abcdefghijklmnopqrstuvwxyz0123456789"
178 "abcdefghijklmnopqrstuvwxyz0123456789"
179 "abcdefghijklmnopqrstuvwxyz0123456789"
180 "abcdefghijklmnopqrstuvwxyz0123456789"
181 "abcdefghijklmnopqrstuvwxyz0123456789"
182 "abcdefghijklmnopqrstuvwxyz0123456789"
183 "abcdefghijklmnopqrstuvwxyz0123456789"
184 "abcdefghijklmnopqrstuvwxyz0123456789"
185 "abcdefghijklmnopqrstuvwxyz0123456789"
186 "abcdefghijklmnopqrstuvwxyz0123456789"
187 "abcdefghijklmnopqrstuvwxyz0123456789"
188 "abcdefghijklmnopqrstuvwxyz0123456789"
189 "abcdefghijklmnopqrstuvwxyz0123456789"
190 "abcdefghijklmnopqrstuvwxyz0123456789"
191 "abcdefghijklmnopqrstuvwxyz0123456789"
192 "abcdefghijklmnopqrstuvwxyz0123456789"
193 "abcdefghijklmnopqrstuvwxyz0123456789"
194 "abcdefghijklmnopqrstuvwxyz0123456789"
195 "abcdefghijklmnopqrstuvwxyz0123456789"
196 "abcdefghijklmnopqrstuvwxyz0123456789"
197 "abcdefghijklmnopqrstuvwxyz0123456789"
198 "abcdefghijklmnopqrstuvwxyz0123456789"
199 "abcdefghijklmnopqrstuvwxyz0123456789"
200 "abcdefghijklmnopqrstuvwxyz0123456789"
201 "abcdefghijklmnopqrstuvwxyz0123456789"
202 "abcdefghijklmnopqrstuvwxyz0123456789"
203 "abcdefghijklmnopqrstuvwxyz0123456789"
204 "abcdefghijklmnopqrstuvwxyz0123456789"
205 "abcdefghijklmnopqrstuvwxyz0123456789"
206 "abcdefghijklmnopqrstuvwxyz0123456789"
207 "abcdefghijklmnopqrstuvwxyz0123456789"
208 "abcdefghijklmnopqrstuvwxyz0123456789"
209 "abcdefghijklmnopqrstuvwxyz0123456789"
210 "abcdefghijklmnopqrstuvwxyz0123456789"
211 "abcdefghijklmnopqrstuvwxyz0123456789"
212 "abcdefghijklmnopqrstuvwxyz0123456789"
213 "abcdefghijklmnopqrstuvwxyz0123456789"
214 "abcdefghijklmnopqrstuvwxyz0123456789"
215 "abcdefghijklmnopqrstuvwxyz0123456789"
216 "abcdefghijklmnopqrstuvwxyz0123456789"
217 "abcdefghijklmnopqrstuvwxyz0123456789"
218 "abcdefghijklmnopqrstuvwxyz0123456789"
219 "abcdefghijklmnopqrstuvwxyz0123456789"
220 "abcdefghijklmnopqrstuvwxyz0123456789"
221 "abcdefghijklmnopqrstuvwxyz0123456789"
222 "abcdefghijklmnopqrstuvwxyz0123456789"
223 "abcdefghijklmnopqrstuvwxyz0123456789"
224 "abcdefghijklmnopqrstuvwxyz0123456789"
225 "abcdefghijklmnopqrstuvwxyz0123456789"
226 "abcdefghijklmnopqrstuvwxyz0123456789"
227 "abcdefghijklmnopqrstuvwxyz0123456789"
228 "abcdefghijklmnopqrstuvwxyz0123456789"
229 "abcdefghijklmnopqrstuvwxyz0123456789"
230 "abcdefghijklmnopqrstuvwxyz0123456789"
231 "abcdefghijklmnopqrstuvwxyz0123456789"
232 "abcdefghijklmnopqrstuvwxyz0123456789"
233 "abcdefghijklmnopqrstuvwxyz0123456789"
234 "abcdefghijklmnopqrstuvwxyz0123456789"
235 "abcdefghijklmnopqrstuvwxyz0123456789"
236 "abcdefghijklmnopqrstuvwxyz0123456789"
237 "abcdefghijklmnopqrstuvwxyz0123456789"
238 "abcdefghijklmnopqrstuvwxyz0123456789"
239 "abcdefghijklmnopqrstuvwxyz0123456789"
240 "abcdefghijklmnopqrstuvwxyz0123456789"
241 "abcdefghijklmnopqrstuvwxyz0123456789"
242 "abcdefghijklmnopqrstuvwxyz0123456789"
243 "abcdefghijklmnopqrstuvwxyz0123456789"
244 "abcdefghijklmnopqrstuvwxyz0123456789"
245 "abcdefghijklmnopqrstuvwxyz0123456789"
246 "abcdefghijklmnopqrstuvwxyz0123456789"
247 "abcdefghijklmnopqrstuvwxyz0123456789"
248 "abcdefghijklmnopqrstuvwxyz0123456789"
249 "abcdefghijklmnopqrstuvwxyz0123456789"
250 "abcdefghijklmnopqrstuvwxyz0123456789"
251 "abcdefghijklmnopqrstuvwxyz0123456789"
252 "abcdefghijklmnopqrstuvwxyz0123456789"
253 "abcdefghijklmnopqrstuvwxyz0123456789"
254 "abcdefghijklmnopqrstuvwxyz0123456789"
255 "abcdefghijklmnopqrstuvwxyz0123456789"
256 "abcdefghijklmnopqrstuvwxyz0123456789"
257 "abcdefghijklmnopqrstuvwxyz0123456789"
258 "abcdefghijklmnopqrstuvwxyz0123456789"
259 "abcdefghijklmnopqrstuvwxyz0123456789"
260 "abcdefghijklmnopqrstuvwxyz0123456789"
261 "abcdefghijklmnopqrstuvwxyz0123456789"
262 "abcdefghijklmnopqrstuvwxyz0123456789"
263 "abcdefghijklmnopqrstuvwxyz0123456789"
264 "abcdefghijklmnopqrstuvwxyz0123456789"
265 "abcdefghijklmnopqrstuvwxyz0123456789"
266 "abcdefghijklmnopqrstuvwxyz0123456789"
267 "abcdefghijklmnopqrstuvwxyz0123456789"
268 "abcdefghijklmnopqrstuvwxyz0123456789"
269 "abcdefghijklmnopqrstuvwxyz0123456789"
270 "abcdefghijklmnopqrstuvwxyz0123456789"
271 "abcdefghijklmnopqrstuvwxyz0123456789"
272 "abcdefghijklmnopqrstuvwxyz0123456789"
273 "abcdefghijklmnopqrstuvwxyz0123456789"
274 "abcdefghijklmnopqrstuvwxyz0123456789"
275 "abcdefghijklmnopqrstuvwxyz0123456789"
276 "abcdefghijklmnopqrstuvwxyz0123456789"
277 "abcdefghijklmnopqrstuvwxyz0123456789"
278 "abcdefghijklmnopqrstuvwxyz0123456789"
279 "abcdefghijklmnopqrstuvwxyz0123456789"
280 "abcdefghijklmnopqrstuvwxyz0123456789"
281 "abcdefghijklmnopqrstuvwxyz0123456789"
282 "abcdefghijklmnopqrstuvwxyz0123456789"
283 "abcdefghijklmnopqrstuvwxyz0123456789"
284 "abcdefghijklmnopqrstuvwxyz0123456789"
285 "abcdefghijklmnopqrstuvwxyz0123456789"
286 "abcdefghijklmnopqrstuvwxyz0123456789"
287 "abcdefghijklmnopqrstuvwxyz0123456789"
288 "abcdefghijklmnopqrstuvwxyz0123456789"
289 "abcdefghijklmnopqrstuvwxyz0123456789"
290 "abcdefghijklmnopqrstuvwxyz0123456789"
291 "abcdefghijklmnopqrstuvwxyz0123456789"
292 "abcdefghijklmnopqrstuvwxyz0123456789"
293 "abcdefghijklmnopqrstuvwxyz0123456789"
294 "abcdefghijklmnopqrstuvwxyz0123456789"
295 "abcdefghijklmnopqrstuvwxyz0123456789"
296 "abcdefghijklmnopqrstuvwxyz0123456789"
297 "abcdefghijklmnopqrstuvwxyz0123456789"
298 "abcdefghijklmnopqrstuvwxyz0123456789"
299 "abcdefghijklmnopqrstuvwxyz0123456789"
300 "abcdefghijklmnopqrstuvwxyz0123456789"
301 "abcdefghijklmnopqrstuvwxyz0123456789"
302 "abcdefghijklmnopqrstuvwxyz0123456789"
303 "abcdefghijklmnopqrstuvwxyz0123456789"
304 "abcdefghijklmnopqrstuvwxyz0123456789"
305 "abcdefghijklmnopqrstuvwxyz0123456789"
306 "abcdefghijklmnopqrstuvwxyz0123456789"
307 "abcdefghijklmnopqrstuvwxyz0123456789"
308 "abcdefghijklmnopqrstuvwxyz0123456789"
309 "abcdefghijklmnopqrstuvwxyz0123456789"
310 "abcdefghijklmnopqrstuvwxyz0123456789"
311 "abcdefghijklmnopqrstuvwxyz0123456789"
312 "abcdefghijklmnopqrstuvwxyz0123456789"
313 "abcdefghijklmnopqrstuvwxyz0123456789"
314 "abcdefghijklmnopqrstuvwxyz0123456789"
315 "abcdefghijklmnopqrstuvwxyz0123456789"
316 "abcdefghijklmnopqrstuvwxyz0123456789"
317 "abcdefghijklmnopqrstuvwxyz0123456789"
318 "abcdefghijklmnopqrstuvwxyz0123456789"
319 "abcdefghijklmnopqrstuvwxyz0123456789"
320 "abcdefghijklmnopqrstuvwxyz0123456789"
321 "abcdefghijklmnopqrstuvwxyz0123456789"
322 "abcdefghijklmnopqrstuvwxyz0123456789"
323 "abcdefghijklmnopqrstuvwxyz0123456789"
324 "abcdefghijklmnopqrstuvwxyz0123456789"
325 "abcdefghijklmnopqrstuvwxyz0123456789"
326 "abcdefghijklmnopqrstuvwxyz0123456789"
327 "abcdefghijklmnopqrstuvwxyz0123456789"
328 "abcdefghijklmnopqrstuvwxyz0123456789"
329 "abcdefghijklmnopqrstuvwxyz0123456789"
330 "abcdefghijklmnopqrstuvwxyz0123456789"
331 "abcdefghijklmnopqrstuvwxyz0123456789"
332 "abcdefghijklmnopqrstuvwxyz0123456789"
333 "abcdefghijklmnopqrstuvwxyz0123456789"
334 "abcdefghijklmnopqrstuvwxyz0123456789"
335 "abcdefghijklmnopqrstuvwxyz0123456789"
336 "abcdefghijklmnopqrstuvwxyz0123456789"
337 "abcdefghijklmnopqrstuvwxyz0123456789"
338 "abcdefghijklmnopqrstuvwxyz0123456789"
339 "abcdefghijklmnopqrstuvwxyz0123456789"
340 "abcdefghijklmnopqrstuvwxyz0123456789"
341 "abcdefghijklmnopqrstuvwxyz0123456789"
342 "abcdefghijklmnopqrstuvwxyz0123456789"
343 "abcdefghijklmnopqrstuvwxyz0123456789"
344 "abcdefghijklmnopqrstuvwxyz0123456789"
345 "abcdefghijklmnopqrstuvwxyz0123456789"
346 "abcdefghijklmnopqrstuvwxyz0123456789"
347 "abcdefghijklmnopqrstuvwxyz0123456789"
348 "abcdefghijklmnopqrstuvwxyz0123456789"
349 "abcdefghijklmnopqrstuvwxyz0123456789"
350 "abcdefghijklmnopqrstuvwxyz0123456789"
351 "abcdefghijklmnopqrstuvwxyz0123456789"
352 "abcdefghijklmnopqrstuvwxyz0123456789"
353 "abcdefghijklmnopqrstuvwxyz0123456789"
354 "abcdefghijklmnopqrstuvwxyz0123456789"
355 "abcdefghijklmnopqrstuvwxyz0123456789"
356 "abcdefghijklmnopqrstuvwxyz0123456789"
357 "abcdefghijklmnopqrstuvwxyz0123456789"
358 "abcdefghijklmnopqrstuvwxyz0123456789"
359 "abcdefghijklmnopqrstuvwxyz0123456789"
360 "abcdefghijklmnopqrstuvwxyz0123456789"
361 "abcdefghijklmnopqrstuvwxyz0123456789"
362 "abcdefghijklmnopqrstuvwxyz0123456789"
363 "abcdefghijklmnopqrstuvwxyz0123456789"
364 "abcdefghijklmnopqrstuvwxyz0123456789"
365 "abcdefghijklmnopqrstuvwxyz0123456789"
366 "abcdefghijklmnopqrstuvwxyz0123456789"
367 "abcdefghijklmnopqrstuvwxyz0123456789"
368 "abcdefghijklmnopqrstuvwxyz0123456789"
369 "abcdefghijklmnopqrstuvwxyz0123456789"
370 "abcdefghijklmnopqrstuvwxyz0123456789"
371 "abcdefghijklmnopqrstuvwxyz0123456789"
372 "abcdefghijklmnopqrstuvwxyz0123456789"
373 "abcdefghijklmnopqrstuvwxyz0123456789"
374 "abcdefghijklmnopqrstuvwxyz0123456789"
375 "abcdefghijklmnopqrstuvwxyz0123456789"
376 "abcdefghijklmnopqrstuvwxyz0123456789"
377 "abcdefghijklmnopqrstuvwxyz0123456789"
378 "abcdefghijklmnopqrstuvwxyz0123456789"
379 "abcdefghijklmnopqrstuvwxyz0123456789"
380 "abcdefghijklmnopqrstuvwxyz0123456789"
381 "abcdefghijklmnopqrstuvwxyz0123456789"
382 "abcdefghijklmnopqrstuvwxyz0123456789"
383 "abcdefghijklmnopqrstuvwxyz0123456789"
384 "abcdefghijklmnopqrstuvwxyz0123456789"
385 "abcdefghijklmnopqrstuvwxyz0123456789"
386 "abcdefghijklmnopqrstuvwxyz0123456789"
387 "abcdefghijklmnopqrstuvwxyz0123456789"
388 "abcdefghijklmnopqrstuvwxyz0123456789"
389 "abcdefghijklmnopqrstuvwxyz0123456789"
390 "abcdefghijklmnopqrstuvwxyz0123456789"
391 "abcdefghijklmnopqrstuvwxyz0123456789"
392 "abcdefghijklmnopqrstuvwxyz0123456789"
393 "abcdefghijklmnopqrstuvwxyz0123456789"
394 "abcdefghijklmnopqrstuvwxyz0123456789"
395 "abcdefghijklmnopqrstuvwxyz0123456789"
396 "abcdefghijklmnopqrstuvwxyz0123456789"
397 "abcdefghijklmnopqrstuvwxyz0123456789"
398 "abcdefghijklmnopqrstuvwxyz0123456789"
399 "abcdefghijklmnopqrstuvwxyz0123456789"
400 "abcdefghijklmnopqrstuvwxyz0123456789"
401 "abcdefghijklmnopqrstuvwxyz0123456789"
402 "abcdefghijklmnopqrstuvwxyz0123456789"
403 "abcdefghijklmnopqrstuvwxyz0123456789"
404 "abcdefghijklmnopqrstuvwxyz0123456789"
405 "abcdefghijklmnopqrstuvwxyz0123456789"
406 "abcdefghijklmnopqrstuvwxyz0123456789"
407 "abcdefghijklmnopqrstuvwxyz0123456789"
408 "abcdefghijklmnopqrstuvwxyz0123456789"
409 "abcdefghijklmnopqrstuvwxyz0123456789"
410 "abcdefghijklmnopqrstuvwxyz0123456789"
411 "abcdefghijklmnopqrstuvwxyz0123456789"
412 "abcdefghijklmnopqrstuvwxyz0123456789"
413 "abcdefghijklmnopqrstuvwxyz0123456789"
414 "abcdefghijklmnopqrstuvwxyz0123456789"
415 "abcdefghijklmnopqrstuvwxyz0123456789"
416 "abcdefghijklmnopqrstuvwxyz0123456789"
417 "abcdefghijklmnopqrstuvwxyz0123456789"
418 "abcdefghijklmnopqrstuvwxyz0123456789"
419 "abcdefghijklmnopqrstuvwxyz0123456789"
420 "abcdefghijklmnopqrstuvwxyz0123456789"
421 "abcdefghijklmnopqrstuvwxyz0123456789"
422 "abcdefghijklmnopqrstuvwxyz0123456789"
423 "abcdefghijklmnopqrstuvwxyz0123456789"
424 "abcdefghijklmnopqrstuvwxyz0123456789"
425 "abcdefghijklmnopqrstuvwxyz0123456789"
426 "abcdefghijklmnopqrstuvwxyz0123456789"
427 "abcdefghijklmnopqrstuvwxyz0123456789"
428 "abcdefghijklmnopqrstuvwxyz0123456789"
429 "abcdefghijklmnopqrstuvwxyz0123456789"
430 "abcdefghijklmnopqrstuvwxyz0123456789"
431 "abcdefghijklmnopqrstuvwxyz0123456789"
432 "abcdefghijklmnopqrstuvwxyz0123456789"
433 "abcdefghijklmnopqrstuvwxyz0123456789"
434 "abcdefghijklmnopqrstuvwxyz0123456789"
435 "abcdefghijklmnopqrstuvwxyz0123456789"
436 "abcdefghijklmnopqrstuvwxyz0123456789"
437 "abcdefghijklmnopqrstuvwxyz0123456789"
438 "abcdefghijklmnopqrstuvwxyz0123456789"
439 "abcdefghijklmnopqrstuvwxyz0123456789"
440 "abcdefghijklmnopqrstuvwxyz0123456789"
441 "abcdefghijklmnopqrstuvwxyz0123456789"
442 "abcdefghijklmnopqrstuvwxyz0123456789"
443 "abcdefghijklmnopqrstuvwxyz0123456789"
444 "abcdefghijklmnopqrstuvwxyz0123456789"
445 "abcdefghijklmnopqrstuvwxyz0123456789"
446 "abcdefghijklmnopqrstuvwxyz0123456789"
447 "abcdefghijklmnopqrstuvwxyz0123456789"
448 "abcdefghijklmnopqrstuvwxyz0123456789"
449 "abcdefghijklmnopqrstuvwxyz0123456789"
450 "abcdefghijklmnopqrstuvwxyz0123456789"
451 "abcdefghijklmnopqrstuvwxyz0123456789"
452 "abcdefghijklmnopqrstuvwxyz0123456789"
453 "abcdefghijklmnopqrstuvwxyz0123456789"
454 "abcdefghijklmnopqrstuvwxyz0123456789"
455 "abcdefghijklmnopqrstuvwxyz0123456789"
456 "abcdefghijklmnopqrstuvwxyz0123456789"
457 "abcdefghijklmnopqrstuvwxyz0123456789"
458 "abcdefghijklmnopqrstuvwxyz0123456789"
459 "abcdefghijklmnopqrstuvwxyz0123456789"
460 "abcdefghijklmnopqrstuvwxyz0123456789"
461 "abcdefghijklmnopqrstuvwxyz0123456789"
462 "abcdefghijklmnopqrstuvwxyz0123456789"
463 "abcdefghijklmnopqrstuvwxyz0123456789"
464 "abcdefghijklmnopqrstuvwxyz0123456789"
465 "abcdefghijklmnopqrstuvwxyz0123456789"
466 "abcdefghijklmnopqrstuvwxyz0123456789"
467 "abcdefghijklmnopqrstuvwxyz0123456789"
468 "abcdefghijklmnopqrstuvwxyz0123456789"
469 "abcdefghijklmnopqrstuvwxyz0123456789"
470 "abcdefghijklmnopqrstuvwxyz0123456789"
471 "abcdefghijklmnopqrstuvwxyz0123456789"
472 "abcdefghijklmnopqrstuvwxyz0123456789"
473 "abcdefghijklmnopqrstuvwxyz0123456789"
474 "abcdefghijklmnopqrstuvwxyz0123456789"
475 "abcdefghijklmnopqrstuvwxyz0123456789"
476 "abcdefghijklmnopqrstuvwxyz0123456789"
477 "abcdefghijklmnopqrstuvwxyz0123456789"
478 "abcdefghijklmnopqrstuvwxyz0123456789"
479 "abcdefghijklmnopqrstuvwxyz0123456789"
480 "abcdefghijklmnopqrstuvwxyz0123456789"
481 "abcdefghijklmnopqrstuvwxyz0123456789"
482 "abcdefghijklmnopqrstuvwxyz0123456789"
483 "abcdefghijklmnopqrstuvwxyz0123456789"
484 "abcdefghijklmnopqrstuvwxyz0123456789"
485 "abcdefghijklmnopqrstuvwxyz0123456789"
486 "abcdefghijklmnopqrstuvwxyz0123456789"
487 "abcdefghijklmnopqrstuvwxyz0123456789"
488 "abcdefghijklmnopqrstuvwxyz0123456789"
489 "abcdefghijklmnopqrstuvwxyz0123456789"
490 "abcdefghijklmnopqrstuvwxyz0123456789"
491 "abcdefghijklmnopqrstuvwxyz0123456789"
492 "abcdefghijklmnopqrstuvwxyz0123456789"
493 "abcdefghijklmnopqrstuvwxyz0123456789"
494 "abcdefghijklmnopqrstuvwxyz0123456789"
495 "abcdefghijklmnopqrstuvwxyz0123456789"
496 "abcdefghijklmnopqrstuvwxyz0123456789"
497 "abcdefghijklmnopqrstuvwxyz0123456789"
498 "abcdefghijklmnopqrstuvwxyz0123456789"
499 "abcdefghijklmnopqrstuvwxyz0123456789"
500 "abcdefghijklmnopqrstuvwxyz0123456789"
501 "abcdefghijklmnopqrstuvwxyz0123456789"
505 int fletcher32_testRun(void)
510 fletcher32_init(&ft);
511 for (unsigned t = 0; t < countof(tstbufs); t++)
514 fletcher32_update(&f, tstbufs[t], strlen(tstbufs[t]));
515 uint32_t f1 = fletcher32_final(&f);
517 uint32_t f2 = fletcher32_b(tstbufs[t], strlen(tstbufs[t]));
519 fletcher32_update(&ft, tstbufs[t], strlen(tstbufs[t]));
520 tot += strlen(tstbufs[t]);
522 //kdump(tstbufs[t], strlen(tstbufs[t]));
523 kprintf("f1 %04lX, f2 %04lX\n", f1, f2);
527 uint8_t *b = malloc(tot);
530 for (unsigned t = 0; t < countof(tstbufs); t++)
532 memcpy(b, tstbufs[t], strlen(tstbufs[t]));
533 b += strlen(tstbufs[t]);
535 uint32_t ft2 = fletcher32_b(start, tot);
536 uint32_t ft1 = fletcher32_final(&ft);
539 kprintf("ft1 %04lX, ft2 %04lX\n", ft1, ft2);
544 TEST_MAIN(fletcher32);