File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird2 / lib / checksum_test.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 21 16:03:56 2019 UTC (4 years, 9 months ago) by misho
Branches: bird2, MAIN
CVS tags: v2_0_7p0, HEAD
bird2 ver 2.0.7

    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>