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>