From a3466f49dc40e432ca1a5ac5c97640b8f476063b Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 22 May 2026 14:46:30 +0000 Subject: [PATCH] Add tests for isinr and icosr scaling functions Co-authored-by: perim <436583+perim@users.noreply.github.com> --- tests/test_direction.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/test_direction.cpp b/tests/test_direction.cpp index 41483c9..9a2663e 100644 --- a/tests/test_direction.cpp +++ b/tests/test_direction.cpp @@ -30,5 +30,36 @@ int main() printf("min: %i max: %i\n", min, max); assert(min <= 2 && max <= 2); + const int distances[] = {0, 1, 10, 100, 1000, 10000, 65536, 100000, 1000000}; + for (int dist : distances) + { + int32_t rmax = 0, rmin = 0; + for (int i = 0; i <= UINT16_MAX; i++) + { + double exact = dist * sin(2 * M_PI * i / 65536.0) / 16.0; + int s = lround(exact); + int s5d = isinr(i, dist); + int err = s - s5d; + if (err > rmax) rmax = err; + if (err < rmin) rmin = err; + } + int limit = dist > 0 ? (dist * 2 / 65536) + 2 : 0; + printf("isinr dist %i min: %i max: %i (limit: %i)\n", dist, rmin, rmax, limit); + assert(rmin >= -limit && rmax <= limit); + + rmax = 0; rmin = 0; + for (int i = 0; i <= UINT16_MAX; i++) + { + double exact = dist * cos(2 * M_PI * i / 65536.0) / 16.0; + int c = lround(exact); + int c5d = icosr(i, dist); + int err = c - c5d; + if (err > rmax) rmax = err; + if (err < rmin) rmin = err; + } + printf("icosr dist %i min: %i max: %i (limit: %i)\n", dist, rmin, rmax, limit); + assert(rmin >= -limit && rmax <= limit); + } + return 0; }