From cc01f10967266efca65fda06d10c20dde60b5eb0 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 30 Aug 2023 23:39:09 -0400 Subject: [PATCH] https://github.com/rusefi/rusefi/commit/13c496b79bebfa5941092ef6b5b5f3a5e97e3332 moving test as well --- util/test/test_wraparound.cpp | 69 +++++++++++++++++++++++++++++++++++ util/util.mk | 1 + 2 files changed, 70 insertions(+) create mode 100644 util/test/test_wraparound.cpp diff --git a/util/test/test_wraparound.cpp b/util/test/test_wraparound.cpp new file mode 100644 index 0000000..ce25a18 --- /dev/null +++ b/util/test/test_wraparound.cpp @@ -0,0 +1,69 @@ +#include +#include +#include + +TEST(util, WrapAround62) { + // Random test + { + WrapAround62 t; + uint32_t source = 0; + uint64_t actual = 0; + + // Test random progression, positive and negative. + uint32_t seed = time(NULL); + printf("Testing with seed 0x%08x\n", seed); + srand(seed); + for (unsigned i = 0; i < 10000; i++) { + int32_t delta = rand(); + if (delta < 0) { + delta = ~delta; + } + delta -= RAND_MAX >> 1; + + // Cap negative test + if (delta < 0 && -delta > actual) { + delta = -actual; + } + + source += delta; + actual += delta; + + uint64_t next = t.update(source); + EXPECT_EQ(actual, next); + } + } + + // More pointed test for expected edge conditions + { + WrapAround62 t; + + EXPECT_EQ(t.update(0x03453455), 0x003453455LL); + EXPECT_EQ(t.update(0x42342323), 0x042342323LL); + EXPECT_EQ(t.update(0x84356345), 0x084356345LL); + EXPECT_EQ(t.update(0x42342323), 0x042342323LL); + EXPECT_EQ(t.update(0x84356345), 0x084356345LL); + EXPECT_EQ(t.update(0xC5656565), 0x0C5656565LL); + EXPECT_EQ(t.update(0x01122112), 0x101122112LL); // Wrap around! + EXPECT_EQ(t.update(0xC5656565), 0x0C5656565LL); + EXPECT_EQ(t.update(0x84356345), 0x084356345LL); + EXPECT_EQ(t.update(0xC5656565), 0x0C5656565LL); + EXPECT_EQ(t.update(0x01122112), 0x101122112LL); // Wrap around! + EXPECT_EQ(t.update(0x42342323), 0x142342323LL); + EXPECT_EQ(t.update(0x84356345), 0x184356345LL); + EXPECT_EQ(t.update(0x42342323), 0x142342323LL); + EXPECT_EQ(t.update(0x84356345), 0x184356345LL); + EXPECT_EQ(t.update(0xC5656565), 0x1C5656565LL); + EXPECT_EQ(t.update(0x01122112), 0x201122112LL); // Wrap around! + EXPECT_EQ(t.update(0xC5656565), 0x1C5656565LL); + EXPECT_EQ(t.update(0x84356345), 0x184356345LL); + EXPECT_EQ(t.update(0xC5656565), 0x1C5656565LL); + EXPECT_EQ(t.update(0x01122112), 0x201122112LL); // Wrap around! + EXPECT_EQ(t.update(0xC5656565), 0x1C5656565LL); + EXPECT_EQ(t.update(0x84356345), 0x184356345LL); + EXPECT_EQ(t.update(0x42342323), 0x142342323LL); + EXPECT_EQ(t.update(0x01122112), 0x101122112LL); + EXPECT_EQ(t.update(0x84356345), 0x084356345LL); + EXPECT_EQ(t.update(0x42342323), 0x042342323LL); + EXPECT_EQ(t.update(0x03453455), 0x003453455LL); + } +} diff --git a/util/util.mk b/util/util.mk index 0ce559a..b94a131 100644 --- a/util/util.mk +++ b/util/util.mk @@ -14,5 +14,6 @@ RUSEFI_LIB_CPP_TEST += \ $(RUSEFI_LIB)/util/test/test_fragments.cpp \ $(RUSEFI_LIB)/util/test/test_interpolation.cpp \ $(RUSEFI_LIB)/util/test/test_scaled.cpp \ + $(RUSEFI_LIB)/util/test/test_wraparound.cpp \ $(RUSEFI_LIB)/util/test/test_math.cpp \