1284990Scy#include "config.h" 2284990Scy 3284990Scy#include <ntp.h> 4284990Scy#include <ntp_fp.h> 5284990Scy#include <refidsmear.h> 6284990Scy 7284990Scy//#include "ntp_stdlib.h" 8284990Scy//#include "ntp_calendar.h" 9284990Scy 10284990Scy#include "unity.h" 11284990Scy 12284990Scy#include <stdio.h> 13284990Scy 14284990Scy/* 15284990Scy * we want to test a refid format of: 16284990Scy * 254.x.y.x 17284990Scy * 18284990Scy * where x.y.z are 24 bits containing 2 (signed) integer bits 19284990Scy * and 22 fractional bits. 20284990Scy * 21284990Scy * we want functions to convert to/from this format, with unit tests. 22284990Scy * 23284990Scy * Interesting test cases include: 24284990Scy * 254.0.0.0 25284990Scy * 254.0.0.1 26284990Scy * 254.127.255.255 27284990Scy * 254.128.0.0 28284990Scy * 254.255.255.255 29284990Scy */ 30284990Scy 31290000Sglebius 32293894Sglebiusvoid setUp(void); 33284990Scyvoid rtol(uint32_t r, char *es); 34290000Sglebiusvoid rtoltor(uint32_t er, char *es); 35290000Sglebiusvoid ltor(l_fp l, char *er); 36290000Sglebiusvoid test_refidsmear(void); 37284990Scy 38293894Sglebius 39284990Scyvoid 40293894SglebiussetUp(void) 41293894Sglebius{ 42293894Sglebius init_lib(); 43293894Sglebius 44293894Sglebius return; 45293894Sglebius} 46293894Sglebius 47293894Sglebiusvoid 48284990Scyrtol(uint32_t r, char *es) 49284990Scy{ 50284990Scy l_fp l; 51284990Scy char *as; 52284990Scy char msg[100]; 53284990Scy 54284990Scy TEST_ASSERT_NOT_NULL(es); 55284990Scy 56284990Scy snprintf(msg, 100, "rtol was called with r=%#.8x, es=%s", r, es); 57284990Scy 58284990Scy l = convertRefIDToLFP(htonl(r)); 59284990Scy as = lfptoa(&l, 8); 60293894Sglebius 61284990Scy //printf("refid %#x, smear %s\n", r, as); 62284990Scy 63284990Scy TEST_ASSERT_NOT_NULL_MESSAGE(as, msg); 64284990Scy TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg); 65284990Scy 66284990Scy return; 67284990Scy} 68284990Scy 69284990Scy 70284990Scyvoid 71284990Scyrtoltor(uint32_t er, char *es) 72284990Scy{ 73284990Scy l_fp l; 74284990Scy char *as; 75284990Scy uint32_t ar; 76284990Scy char msg[100]; 77284990Scy 78284990Scy TEST_ASSERT_NOT_NULL(es); 79284990Scy 80284990Scy snprintf(msg, 100, "rtoltor was called with er=%#.8x, es=%s", er, es); 81284990Scy 82284990Scy l = convertRefIDToLFP(htonl(er)); 83284990Scy as = lfptoa(&l, 8); 84284990Scy 85284990Scy ar = convertLFPToRefID(l); 86284990Scy 87284990Scy //printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(ar)); 88284990Scy 89284990Scy TEST_ASSERT_NOT_NULL_MESSAGE(as, msg); 90284990Scy TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg); 91284990Scy TEST_ASSERT_EQUAL_UINT_MESSAGE(er, ntohl(ar), msg); 92284990Scy 93284990Scy return; 94284990Scy} 95284990Scy 96284990Scy 97284990Scyvoid 98284990Scyltor(l_fp l, char *er) 99284990Scy{ 100284990Scy uint32_t r; 101284990Scy 102284990Scy printf("ltor: "); 103284990Scy 104284990Scy r = convertLFPToRefID(l); 105284990Scy printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(r)); 106284990Scy 107284990Scy return; 108284990Scy} 109284990Scy 110284990Scy 111284990Scyvoid test_refidsmear(void) 112284990Scy{ 113284990Scy 114284990Scy rtol(0xfe800000, "-2.00000000"); 115284990Scy rtol(0xfe800001, "-1.99999976"); 116284990Scy rtol(0xfe8ffffe, "-1.75000048"); 117284990Scy rtol(0xfe8fffff, "-1.75000024"); 118284990Scy rtol(0xfef00000, "-0.25000000"); 119284990Scy rtol(0xfef00001, "-0.24999976"); 120284990Scy rtol(0xfefffffe, "-0.00000048"); 121284990Scy rtol(0xfeffffff, "-0.00000024"); 122284990Scy 123284990Scy rtol(0xfe000000, "0.00000000"); 124284990Scy rtol(0xfe000001, "0.00000024"); 125284990Scy rtol(0xfe6ffffe, "1.74999952"); 126284990Scy rtol(0xfe6fffff, "1.74999976"); 127284990Scy rtol(0xfe700000, "1.75000000"); 128284990Scy rtol(0xfe700001, "1.75000024"); 129284990Scy rtol(0xfe7ffffe, "1.99999952"); 130284990Scy rtol(0xfe7fffff, "1.99999976"); 131284990Scy 132284990Scy rtoltor(0xfe800000, "-2.00000000"); 133284990Scy rtoltor(0xfe800001, "-1.99999976"); 134284990Scy rtoltor(0xfe8ffffe, "-1.75000048"); 135284990Scy rtoltor(0xfe8fffff, "-1.75000024"); 136284990Scy rtoltor(0xfef00000, "-0.25000000"); 137284990Scy rtoltor(0xfef00001, "-0.24999976"); 138284990Scy rtoltor(0xfefffffe, "-0.00000048"); 139284990Scy rtoltor(0xfeffffff, "-0.00000024"); 140284990Scy 141284990Scy rtoltor(0xfe000000, "0.00000000"); 142284990Scy rtoltor(0xfe000001, "0.00000024"); 143284990Scy rtoltor(0xfe6ffffe, "1.74999952"); 144284990Scy rtoltor(0xfe6fffff, "1.74999976"); 145284990Scy rtoltor(0xfe700000, "1.75000000"); 146284990Scy rtoltor(0xfe700001, "1.75000024"); 147284990Scy rtoltor(0xfe7ffffe, "1.99999952"); 148284990Scy rtoltor(0xfe7fffff, "1.99999976"); 149284990Scy 150284990Scy return; 151284990Scy} 152