From 12c408c5aa1d234fe9c946078d8a343b4fda7ebb Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 30 May 2014 17:30:08 -0700 Subject: [PATCH] altos: Test APRS altitude encoding MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Verify fixed point version against naïve implementation Signed-off-by: Keith Packard --- src/test/ao_aprs_test.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/test/ao_aprs_test.c b/src/test/ao_aprs_test.c index b1d17d3f..86cf527a 100644 --- a/src/test/ao_aprs_test.c +++ b/src/test/ao_aprs_test.c @@ -97,9 +97,36 @@ audio_gap(int secs) #endif } +#include + +int +ao_aprs_encode_altitude_expensive(int meters) +{ + double feet = meters / 0.3048; + + double encode = log(feet) / log(1.002); + return floor(encode + 0.5); +} + // This is where we go after reset. int main(int argc, char **argv) { + int e, x; + int a; + + for (a = 1; a < 100000; a++) { + e = ao_aprs_encode_altitude(a); + x = ao_aprs_encode_altitude_expensive(a); + + if (e != x) { + double back_feet, back_meters; + back_feet = pow(1.002, e); + back_meters = back_feet * 0.3048; + fprintf (stderr, "APRS altitude encoding failure: altitude %d actual %d expected %d actual meters %f\n", + a, e, x, back_meters); + } + } + audio_gap(1); ao_gps_data.latitude = (45.0 + 28.25 / 60.0) * 10000000; -- 2.30.2