/* $NetBSD: refidsmear.c,v 1.2 2020/05/25 20:47:36 christos Exp $ */ #include "config.h" #include #include #include //#include "ntp_stdlib.h" //#include "ntp_calendar.h" #include "unity.h" #include /* * we want to test a refid format of: * 254.x.y.x * * where x.y.z are 24 bits containing 2 (signed) integer bits * and 22 fractional bits. * * we want functions to convert to/from this format, with unit tests. * * Interesting test cases include: * 254.0.0.0 * 254.0.0.1 * 254.127.255.255 * 254.128.0.0 * 254.255.255.255 */ void setUp(void); void rtol(uint32_t r, char *es); void rtoltor(uint32_t er, char *es); void ltor(l_fp l, char *er); void test_refidsmear(void); void setUp(void) { init_lib(); return; } void rtol(uint32_t r, char *es) { l_fp l; char *as; char msg[100]; TEST_ASSERT_NOT_NULL(es); snprintf(msg, 100, "rtol was called with r=%#.8x, es=%s", r, es); l = convertRefIDToLFP(htonl(r)); as = lfptoa(&l, 8); //printf("refid %#x, smear %s\n", r, as); TEST_ASSERT_NOT_NULL_MESSAGE(as, msg); TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg); return; } void rtoltor(uint32_t er, char *es) { l_fp l; char *as; uint32_t ar; char msg[100]; TEST_ASSERT_NOT_NULL(es); snprintf(msg, 100, "rtoltor was called with er=%#.8x, es=%s", er, es); l = convertRefIDToLFP(htonl(er)); as = lfptoa(&l, 8); ar = convertLFPToRefID(l); //printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(ar)); TEST_ASSERT_NOT_NULL_MESSAGE(as, msg); TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg); TEST_ASSERT_EQUAL_UINT_MESSAGE(er, ntohl(ar), msg); return; } void ltor(l_fp l, char *er) { uint32_t r; printf("ltor: "); r = convertLFPToRefID(l); printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(r)); return; } void test_refidsmear(void) { rtol(0xfe800000, "-2.00000000"); rtol(0xfe800001, "-1.99999976"); rtol(0xfe8ffffe, "-1.75000048"); rtol(0xfe8fffff, "-1.75000024"); rtol(0xfef00000, "-0.25000000"); rtol(0xfef00001, "-0.24999976"); rtol(0xfefffffe, "-0.00000048"); rtol(0xfeffffff, "-0.00000024"); rtol(0xfe000000, "+0.00000000"); rtol(0xfe000001, "+0.00000024"); rtol(0xfe6ffffe, "+1.74999952"); rtol(0xfe6fffff, "+1.74999976"); rtol(0xfe700000, "+1.75000000"); rtol(0xfe700001, "+1.75000024"); rtol(0xfe7ffffe, "+1.99999952"); rtol(0xfe7fffff, "+1.99999976"); rtoltor(0xfe800000, "-2.00000000"); rtoltor(0xfe800001, "-1.99999976"); rtoltor(0xfe8ffffe, "-1.75000048"); rtoltor(0xfe8fffff, "-1.75000024"); rtoltor(0xfef00000, "-0.25000000"); rtoltor(0xfef00001, "-0.24999976"); rtoltor(0xfefffffe, "-0.00000048"); rtoltor(0xfeffffff, "-0.00000024"); rtoltor(0xfe000000, "+0.00000000"); rtoltor(0xfe000001, "+0.00000024"); rtoltor(0xfe6ffffe, "+1.74999952"); rtoltor(0xfe6fffff, "+1.74999976"); rtoltor(0xfe700000, "+1.75000000"); rtoltor(0xfe700001, "+1.75000024"); rtoltor(0xfe7ffffe, "+1.99999952"); rtoltor(0xfe7fffff, "+1.99999976"); return; }