Annotation of embedaddon/bird2/lib/checksum_test.c, revision 1.1.1.1
1.1 misho 1: /*
2: * BIRD Library -- IP One-Complement Checksum Tests
3: *
4: * (c) 2015 CZ.NIC z.s.p.o.
5: *
6: * Can be freely distributed and used under the terms of the GNU GPL.
7: */
8:
9: #include <stdio.h>
10:
11: #include "test/birdtest.h"
12:
13: #include "lib/checksum.h"
14:
15: #define MAX_NUM 10000
16:
17: static u16
18: ipsum_calculate_expected(u32 *a)
19: {
20: int i;
21: u32 sum = 0;
22:
23: for(i = 0; i < MAX_NUM; i++)
24: {
25: sum += a[i] & 0xffff;
26: bt_debug("low) \t0x%08X \n", sum);
27:
28: sum += a[i] >> 16;
29: bt_debug("high) \t0x%08X \n", sum);
30:
31: u16 carry = sum >> 16;
32: sum = (sum & 0xffff) + carry;
33: bt_debug("carry) \t0x%08X \n\n", sum);
34: }
35: bt_debug("sum) \t0x%08X \n", sum);
36:
37: sum = sum ^ 0xffff;
38: bt_debug("~sum) \t0x%08X \n", sum);
39:
40: return sum;
41: }
42:
43: static int
44: t_calculate(void)
45: {
46: u32 a[MAX_NUM];
47: int i;
48:
49: for (i = 0; i < MAX_NUM; i++)
50: a[i] = bt_random();
51:
52: u16 sum_calculated = ipsum_calculate(a, sizeof(a), NULL);
53: u16 sum_calculated_2 = ipsum_calculate(&a[0], sizeof(u32)*(MAX_NUM/2), &a[MAX_NUM/2], sizeof(u32)*(MAX_NUM - MAX_NUM/2), NULL);
54: bt_assert(sum_calculated == sum_calculated_2);
55:
56: u16 sum_expected = ipsum_calculate_expected(a);
57:
58: bt_debug("sum_calculated: %08X \n", sum_calculated);
59: bt_debug("sum_expected: %08X \n", sum_expected);
60:
61: bt_assert(sum_calculated == sum_expected);
62:
63: return 1;
64: }
65:
66: static int
67: t_verify(void)
68: {
69: u32 a[MAX_NUM+1];
70: int i;
71:
72: for (i = 0; i < MAX_NUM; i++)
73: a[i] = bt_random();
74:
75: u16 sum = ipsum_calculate_expected(a);
76:
77: a[MAX_NUM] = sum;
78:
79: bt_assert(ipsum_verify(a, sizeof(a), NULL));
80:
81: return 1;
82: }
83:
84:
85: int
86: main(int argc, char *argv[])
87: {
88: bt_init(argc, argv);
89:
90: bt_test_suite(t_calculate, "Checksum of pseudo-random data");
91: bt_test_suite(t_verify, "Verification of pseudo-random data.");
92:
93: return bt_exit_value();
94: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>