1 #include "config.h" 2 3 #include <ntp.h> 4 #include <ntp_fp.h> 5 #include <refidsmear.h> 6 7 //#include "ntp_stdlib.h" 8 //#include "ntp_calendar.h" 9 10 #include "unity.h" 11 12 #include <stdio.h> 13 14 /* 15 * we want to test a refid format of: 16 * 254.x.y.x 17 * 18 * where x.y.z are 24 bits containing 2 (signed) integer bits 19 * and 22 fractional bits. 20 * 21 * we want functions to convert to/from this format, with unit tests. 22 * 23 * Interesting test cases include: 24 * 254.0.0.0 25 * 254.0.0.1 26 * 254.127.255.255 27 * 254.128.0.0 28 * 254.255.255.255 29 */ 30 31 32 void setUp(void); 33 void rtol(uint32_t r, char *es); 34 void rtoltor(uint32_t er, char *es); 35 void ltor(l_fp l, char *er); 36 void test_refidsmear(void); 37 38 39 void 40 setUp(void) 41 { 42 init_lib(); 43 44 return; 45 } 46 47 void 48 rtol(uint32_t r, char *es) 49 { 50 l_fp l; 51 char *as; 52 char msg[100]; 53 54 TEST_ASSERT_NOT_NULL(es); 55 56 snprintf(msg, 100, "rtol was called with r=%#.8x, es=%s", r, es); 57 58 l = convertRefIDToLFP(htonl(r)); 59 as = lfptoa(&l, 8); 60 61 //printf("refid %#x, smear %s\n", r, as); 62 63 TEST_ASSERT_NOT_NULL_MESSAGE(as, msg); 64 TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg); 65 66 return; 67 } 68 69 70 void 71 rtoltor(uint32_t er, char *es) 72 { 73 l_fp l; 74 char *as; 75 uint32_t ar; 76 char msg[100]; 77 78 TEST_ASSERT_NOT_NULL(es); 79 80 snprintf(msg, 100, "rtoltor was called with er=%#.8x, es=%s", er, es); 81 82 l = convertRefIDToLFP(htonl(er)); 83 as = lfptoa(&l, 8); 84 85 ar = convertLFPToRefID(l); 86 87 //printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(ar)); 88 89 TEST_ASSERT_NOT_NULL_MESSAGE(as, msg); 90 TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg); 91 TEST_ASSERT_EQUAL_UINT_MESSAGE(er, ntohl(ar), msg); 92 93 return; 94 } 95 96 97 void 98 ltor(l_fp l, char *er) 99 { 100 uint32_t r; 101 102 printf("ltor: "); 103 104 r = convertLFPToRefID(l); 105 printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(r)); 106 107 return; 108 } 109 110 111 void test_refidsmear(void) 112 { 113 114 rtol(0xfe800000, "-2.00000000"); 115 rtol(0xfe800001, "-1.99999976"); 116 rtol(0xfe8ffffe, "-1.75000048"); 117 rtol(0xfe8fffff, "-1.75000024"); 118 rtol(0xfef00000, "-0.25000000"); 119 rtol(0xfef00001, "-0.24999976"); 120 rtol(0xfefffffe, "-0.00000048"); 121 rtol(0xfeffffff, "-0.00000024"); 122 123 rtol(0xfe000000, "0.00000000"); 124 rtol(0xfe000001, "0.00000024"); 125 rtol(0xfe6ffffe, "1.74999952"); 126 rtol(0xfe6fffff, "1.74999976"); 127 rtol(0xfe700000, "1.75000000"); 128 rtol(0xfe700001, "1.75000024"); 129 rtol(0xfe7ffffe, "1.99999952"); 130 rtol(0xfe7fffff, "1.99999976"); 131 132 rtoltor(0xfe800000, "-2.00000000"); 133 rtoltor(0xfe800001, "-1.99999976"); 134 rtoltor(0xfe8ffffe, "-1.75000048"); 135 rtoltor(0xfe8fffff, "-1.75000024"); 136 rtoltor(0xfef00000, "-0.25000000"); 137 rtoltor(0xfef00001, "-0.24999976"); 138 rtoltor(0xfefffffe, "-0.00000048"); 139 rtoltor(0xfeffffff, "-0.00000024"); 140 141 rtoltor(0xfe000000, "0.00000000"); 142 rtoltor(0xfe000001, "0.00000024"); 143 rtoltor(0xfe6ffffe, "1.74999952"); 144 rtoltor(0xfe6fffff, "1.74999976"); 145 rtoltor(0xfe700000, "1.75000000"); 146 rtoltor(0xfe700001, "1.75000024"); 147 rtoltor(0xfe7ffffe, "1.99999952"); 148 rtoltor(0xfe7fffff, "1.99999976"); 149 150 return; 151 } 152