Annotation of embedaddon/bird2/lib/checksum_test.c, revision 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>