parent
38368f361d
commit
58b29adc88
|
@ -37,74 +37,6 @@ static unsigned int GetRandomSeed()
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// cFastRandom:
|
// 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);
|
std::uniform_real_distribution<> distribution(0, a_Range);
|
||||||
return distribution(m_MersenneRand);
|
return distribution(m_MersenneRand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ add_subdirectory(BoundingBox)
|
||||||
add_subdirectory(ByteBuffer)
|
add_subdirectory(ByteBuffer)
|
||||||
add_subdirectory(ChunkData)
|
add_subdirectory(ChunkData)
|
||||||
add_subdirectory(CompositeChat)
|
add_subdirectory(CompositeChat)
|
||||||
|
add_subdirectory(FastRandom)
|
||||||
add_subdirectory(HTTP)
|
add_subdirectory(HTTP)
|
||||||
add_subdirectory(LoadablePieces)
|
add_subdirectory(LoadablePieces)
|
||||||
add_subdirectory(Network)
|
add_subdirectory(Network)
|
||||||
|
|
|
@ -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
|
||||||
|
)
|
|
@ -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");
|
||||||
|
}
|
Loading…
Reference in New Issue