From 58b29adc88343fe0821c008ba0f0bb1e8018574d Mon Sep 17 00:00:00 2001 From: Alexander Harkness Date: Wed, 3 Aug 2016 08:35:42 +0100 Subject: [PATCH] Fixed cFastRandom Test. (#3291) This resolves #3290 --- src/FastRandom.cpp | 72 ----------------------------- tests/CMakeLists.txt | 1 + tests/FastRandom/CMakeLists.txt | 44 ++++++++++++++++++ tests/FastRandom/FastRandomTest.cpp | 71 ++++++++++++++++++++++++++++ 4 files changed, 116 insertions(+), 72 deletions(-) create mode 100644 tests/FastRandom/CMakeLists.txt create mode 100644 tests/FastRandom/FastRandomTest.cpp diff --git a/src/FastRandom.cpp b/src/FastRandom.cpp index 0d9c361af..718092aee 100644 --- a/src/FastRandom.cpp +++ b/src/FastRandom.cpp @@ -37,74 +37,6 @@ static unsigned int GetRandomSeed() //////////////////////////////////////////////////////////////////////////////// // cFastRandom: -#if 0 && defined(_DEBUG) -// Self-test -// Both ints and floats are quick-tested to see if the random is calculated correctly, checking the range in ASSERTs, -// and if it performs well in terms of distribution (checked by avg, expected to be in the range midpoint -class cFastRandomTest -{ -public: - cFastRandomTest(void) - { - TestInts(); - TestFloats(); - } - - - void TestInts(void) - { - printf("Testing ints...\n"); - cFastRandom rnd; - int sum = 0; - const int BUCKETS = 8; - int Counts[BUCKETS]; - memset(Counts, 0, sizeof(Counts)); - const int ITER = 10000; - for (int i = 0; i < ITER; i++) - { - int v = rnd.NextInt(1000); - ASSERT(v >= 0); - ASSERT(v < 1000); - Counts[v % BUCKETS]++; - sum += v; - } - double avg = (double)sum / ITER; - printf("avg: %f\n", avg); - for (int i = 0; i < BUCKETS; i++) - { - printf(" bucket %d: %d\n", i, Counts[i]); - } - } - - - void TestFloats(void) - { - printf("Testing floats...\n"); - cFastRandom rnd; - float sum = 0; - const int BUCKETS = 8; - int Counts[BUCKETS]; - memset(Counts, 0, sizeof(Counts)); - const int ITER = 10000; - for (int i = 0; i < ITER; i++) - { - float v = rnd.NextFloat(1000); - ASSERT(v >= 0); - ASSERT(v <= 1000); - Counts[((int)v) % BUCKETS]++; - sum += v; - } - sum = sum / ITER; - printf("avg: %f\n", sum); - for (int i = 0; i < BUCKETS; i++) - { - printf(" bucket %d: %d\n", i, Counts[i]); - } - } -} g_Test; - -#endif - @@ -187,7 +119,3 @@ double MTRand::rand(double a_Range) std::uniform_real_distribution<> distribution(0, a_Range); return distribution(m_MersenneRand); } - - - - diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 235ebe60d..0e7b51445 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -10,6 +10,7 @@ add_subdirectory(BoundingBox) add_subdirectory(ByteBuffer) add_subdirectory(ChunkData) add_subdirectory(CompositeChat) +add_subdirectory(FastRandom) add_subdirectory(HTTP) add_subdirectory(LoadablePieces) add_subdirectory(Network) diff --git a/tests/FastRandom/CMakeLists.txt b/tests/FastRandom/CMakeLists.txt new file mode 100644 index 000000000..a9d62bf94 --- /dev/null +++ b/tests/FastRandom/CMakeLists.txt @@ -0,0 +1,44 @@ +enable_testing() +add_definitions(-DTEST_GLOBALS=1) + +include_directories(${CMAKE_SOURCE_DIR}/src/) + +add_definitions(-DTEST_GLOBALS=1) + +set (SHARED_SRCS + ${CMAKE_SOURCE_DIR}/src/FastRandom.cpp + ${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.cpp +) + +set (SHARED_HDRS + ${CMAKE_SOURCE_DIR}/src/FastRandom.h + ${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.h +) + +set (SRCS + FastRandomTest.cpp +) + +if (MSVC) + # Add the MSVC-specific LeakFinder / StackTracer sources: + list (APPEND SHARED_SRCS ${CMAKE_SOURCE_DIR}/src/LeakFinder.cpp ${CMAKE_SOURCE_DIR}/src/StackWalker.cpp) + list (APPEND SHARED_HDRS ${CMAKE_SOURCE_DIR}/src/LeakFinder.h ${CMAKE_SOURCE_DIR}/src/StackWalker.h) +endif() + +source_group("Shared" FILES ${SHARED_SRCS} ${SHARED_HDRS}) +source_group("Sources" FILES ${SRCS}) +add_executable(FastRandom-exe ${SRCS} ${SHARED_SRCS} ${SHARED_HDRS}) +if (WIN32) + target_link_libraries(FastRandom-exe ws2_32) +endif() +add_test(NAME FastRandom-test COMMAND FastRandom-exe) + + + + + +# Put the projects into solution folders (MSVC): +set_target_properties( + FastRandom-exe + PROPERTIES FOLDER Tests +) diff --git a/tests/FastRandom/FastRandomTest.cpp b/tests/FastRandom/FastRandomTest.cpp new file mode 100644 index 000000000..e7729382d --- /dev/null +++ b/tests/FastRandom/FastRandomTest.cpp @@ -0,0 +1,71 @@ + +// FastRandomTest.cpp + +// Tests the randomness of cFastRandom + +#include "Globals.h" +#include "FastRandom.h" + + +static void TestInts(void) +{ + cFastRandom rnd; + int sum = 0; + const int BUCKETS = 8; + int Counts[BUCKETS]; + memset(Counts, 0, sizeof(Counts)); + const int ITER = 10000; + for (int i = 0; i < ITER; i++) + { + int v = rnd.NextInt(1000); + assert_test(v >= 0); + assert_test(v < 1000); + Counts[v % BUCKETS]++; + sum += v; + } + double avg = static_cast(sum) / ITER; + printf("avg: %f\n", avg); + for (int i = 0; i < BUCKETS; i++) + { + printf(" bucket %d: %d\n", i, Counts[i]); + } +} + + +static void TestFloats(void) +{ + cFastRandom rnd; + float sum = 0; + const int BUCKETS = 8; + int Counts[BUCKETS]; + memset(Counts, 0, sizeof(Counts)); + const int ITER = 10000; + for (int i = 0; i < ITER; i++) + { + float v = rnd.NextFloat(1000); + assert_test(v >= 0); + assert_test(v <= 1000); + Counts[static_cast(v) % BUCKETS]++; + sum += v; + } + sum = sum / ITER; + printf("avg: %f\n", sum); + for (int i = 0; i < BUCKETS; i++) + { + printf(" bucket %d: %d\n", i, Counts[i]); + } +} + + +int main(void) +{ + LOGD("FastRandom Test started"); + + LOGD("Testing ints"); + TestInts(); + + LOGD("Testing floats"); + TestFloats(); + + LOG("FastRandom test finished"); +}