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