diff options
Diffstat (limited to 'tests/FastRandom')
-rw-r--r-- | tests/FastRandom/CMakeLists.txt | 44 | ||||
-rw-r--r-- | tests/FastRandom/FastRandomTest.cpp | 71 |
2 files changed, 115 insertions, 0 deletions
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<double>(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<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]); + } +} + + +int main(void) +{ + LOGD("FastRandom Test started"); + + LOGD("Testing ints"); + TestInts(); + + LOGD("Testing floats"); + TestFloats(); + + LOG("FastRandom test finished"); +} |