1290001Sglebius#include "config.h" 2290001Sglebius 3290001Sglebius#include <ntp.h> 4290001Sglebius#include <ntp_fp.h> 5290001Sglebius#include <refidsmear.h> 6290001Sglebius 7290001Sglebius//#include "ntp_stdlib.h" 8290001Sglebius//#include "ntp_calendar.h" 9290001Sglebius 10290001Sglebius#include "unity.h" 11290001Sglebius 12290001Sglebius#include <stdio.h> 13290001Sglebius 14290001Sglebius/* 15290001Sglebius * we want to test a refid format of: 16290001Sglebius * 254.x.y.x 17290001Sglebius * 18290001Sglebius * where x.y.z are 24 bits containing 2 (signed) integer bits 19290001Sglebius * and 22 fractional bits. 20290001Sglebius * 21290001Sglebius * we want functions to convert to/from this format, with unit tests. 22290001Sglebius * 23290001Sglebius * Interesting test cases include: 24290001Sglebius * 254.0.0.0 25290001Sglebius * 254.0.0.1 26290001Sglebius * 254.127.255.255 27290001Sglebius * 254.128.0.0 28290001Sglebius * 254.255.255.255 29290001Sglebius */ 30290001Sglebius 31290001Sglebius 32293896Sglebiusvoid setUp(void); 33290001Sglebiusvoid rtol(uint32_t r, char *es); 34290001Sglebiusvoid rtoltor(uint32_t er, char *es); 35290001Sglebiusvoid ltor(l_fp l, char *er); 36290001Sglebiusvoid test_refidsmear(void); 37290001Sglebius 38293896Sglebius 39290001Sglebiusvoid 40293896SglebiussetUp(void) 41293896Sglebius{ 42293896Sglebius init_lib(); 43293896Sglebius 44293896Sglebius return; 45293896Sglebius} 46293896Sglebius 47293896Sglebiusvoid 48290001Sglebiusrtol(uint32_t r, char *es) 49290001Sglebius{ 50290001Sglebius l_fp l; 51290001Sglebius char *as; 52290001Sglebius char msg[100]; 53290001Sglebius 54290001Sglebius TEST_ASSERT_NOT_NULL(es); 55290001Sglebius 56290001Sglebius snprintf(msg, 100, "rtol was called with r=%#.8x, es=%s", r, es); 57290001Sglebius 58290001Sglebius l = convertRefIDToLFP(htonl(r)); 59290001Sglebius as = lfptoa(&l, 8); 60293896Sglebius 61290001Sglebius //printf("refid %#x, smear %s\n", r, as); 62290001Sglebius 63290001Sglebius TEST_ASSERT_NOT_NULL_MESSAGE(as, msg); 64290001Sglebius TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg); 65290001Sglebius 66290001Sglebius return; 67290001Sglebius} 68290001Sglebius 69290001Sglebius 70290001Sglebiusvoid 71290001Sglebiusrtoltor(uint32_t er, char *es) 72290001Sglebius{ 73290001Sglebius l_fp l; 74290001Sglebius char *as; 75290001Sglebius uint32_t ar; 76290001Sglebius char msg[100]; 77290001Sglebius 78290001Sglebius TEST_ASSERT_NOT_NULL(es); 79290001Sglebius 80290001Sglebius snprintf(msg, 100, "rtoltor was called with er=%#.8x, es=%s", er, es); 81290001Sglebius 82290001Sglebius l = convertRefIDToLFP(htonl(er)); 83290001Sglebius as = lfptoa(&l, 8); 84290001Sglebius 85290001Sglebius ar = convertLFPToRefID(l); 86290001Sglebius 87290001Sglebius //printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(ar)); 88290001Sglebius 89290001Sglebius TEST_ASSERT_NOT_NULL_MESSAGE(as, msg); 90290001Sglebius TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg); 91290001Sglebius TEST_ASSERT_EQUAL_UINT_MESSAGE(er, ntohl(ar), msg); 92290001Sglebius 93290001Sglebius return; 94290001Sglebius} 95290001Sglebius 96290001Sglebius 97290001Sglebiusvoid 98290001Sglebiusltor(l_fp l, char *er) 99290001Sglebius{ 100290001Sglebius uint32_t r; 101290001Sglebius 102290001Sglebius printf("ltor: "); 103290001Sglebius 104290001Sglebius r = convertLFPToRefID(l); 105290001Sglebius printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(r)); 106290001Sglebius 107290001Sglebius return; 108290001Sglebius} 109290001Sglebius 110290001Sglebius 111290001Sglebiusvoid test_refidsmear(void) 112290001Sglebius{ 113290001Sglebius 114290001Sglebius rtol(0xfe800000, "-2.00000000"); 115290001Sglebius rtol(0xfe800001, "-1.99999976"); 116290001Sglebius rtol(0xfe8ffffe, "-1.75000048"); 117290001Sglebius rtol(0xfe8fffff, "-1.75000024"); 118290001Sglebius rtol(0xfef00000, "-0.25000000"); 119290001Sglebius rtol(0xfef00001, "-0.24999976"); 120290001Sglebius rtol(0xfefffffe, "-0.00000048"); 121290001Sglebius rtol(0xfeffffff, "-0.00000024"); 122290001Sglebius 123290001Sglebius rtol(0xfe000000, "0.00000000"); 124290001Sglebius rtol(0xfe000001, "0.00000024"); 125290001Sglebius rtol(0xfe6ffffe, "1.74999952"); 126290001Sglebius rtol(0xfe6fffff, "1.74999976"); 127290001Sglebius rtol(0xfe700000, "1.75000000"); 128290001Sglebius rtol(0xfe700001, "1.75000024"); 129290001Sglebius rtol(0xfe7ffffe, "1.99999952"); 130290001Sglebius rtol(0xfe7fffff, "1.99999976"); 131290001Sglebius 132290001Sglebius rtoltor(0xfe800000, "-2.00000000"); 133290001Sglebius rtoltor(0xfe800001, "-1.99999976"); 134290001Sglebius rtoltor(0xfe8ffffe, "-1.75000048"); 135290001Sglebius rtoltor(0xfe8fffff, "-1.75000024"); 136290001Sglebius rtoltor(0xfef00000, "-0.25000000"); 137290001Sglebius rtoltor(0xfef00001, "-0.24999976"); 138290001Sglebius rtoltor(0xfefffffe, "-0.00000048"); 139290001Sglebius rtoltor(0xfeffffff, "-0.00000024"); 140290001Sglebius 141290001Sglebius rtoltor(0xfe000000, "0.00000000"); 142290001Sglebius rtoltor(0xfe000001, "0.00000024"); 143290001Sglebius rtoltor(0xfe6ffffe, "1.74999952"); 144290001Sglebius rtoltor(0xfe6fffff, "1.74999976"); 145290001Sglebius rtoltor(0xfe700000, "1.75000000"); 146290001Sglebius rtoltor(0xfe700001, "1.75000024"); 147290001Sglebius rtoltor(0xfe7ffffe, "1.99999952"); 148290001Sglebius rtoltor(0xfe7fffff, "1.99999976"); 149290001Sglebius 150290001Sglebius return; 151290001Sglebius} 152