From 58b29adc88343fe0821c008ba0f0bb1e8018574d Mon Sep 17 00:00:00 2001 From: Alexander Harkness Date: Wed, 3 Aug 2016 08:35:42 +0100 Subject: Fixed cFastRandom Test. (#3291) This resolves #3290 --- tests/CMakeLists.txt | 1 + tests/FastRandom/CMakeLists.txt | 44 +++++++++++++++++++++++ tests/FastRandom/FastRandomTest.cpp | 71 +++++++++++++++++++++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 tests/FastRandom/CMakeLists.txt create mode 100644 tests/FastRandom/FastRandomTest.cpp (limited to 'tests') 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"); +} -- cgit v1.2.3