diff options
Diffstat (limited to 'yapf/unittest/unittest.cpp')
-rw-r--r-- | yapf/unittest/unittest.cpp | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/yapf/unittest/unittest.cpp b/yapf/unittest/unittest.cpp new file mode 100644 index 000000000..acd8d0820 --- /dev/null +++ b/yapf/unittest/unittest.cpp @@ -0,0 +1,166 @@ +/* $Id$ */ + +#define UNITTEST + +#include "../../stdafx.h" + +EXTERN_C_BEGIN +#include "../../macros.h" +#include "../../tile.h" +#include "../../openttd.h" +#include "../../map.h" +#include "../../rail.h" +EXTERN_C_END + +//#include "../track_dir.hpp" + +#include "../yapf.hpp" + +#include "../autocopyptr.hpp" + +#include "unittest.h" + +#include "test_autocopyptr.h" +#include "test_binaryheap.h" +#include "test_fixedsizearray.h" +#include "test_blob.h" +#include "test_hashtable.h" +#include "test_yapf.h" + +int _total_pf_time_us = 0; + +int num_tests_failed = 0; +int num_tests_total = 0; +bool _dbg = false; + +int do_test(const char* name, TESTPROC test_proc, bool silent) +{ + printf("%s ", name); + if (!silent) {printf("[enter]:"); getc(stdin);} + _dbg = !silent; + fflush(stdout); + int res = test_proc(silent); + if (res == 0) + { + printf("%s OK\n", silent ? "..." : "\n"); + } + else { + printf("\n ERROR! (0x%X)\n", res); + printf("\nFailed cases:"); + int num_failed = 0; + for(int i = 0; i < 32; i++) { + if (((1 << i) & res) != 0) { + printf(" %d", i); + num_failed++; + } + } + printf("\n\nTotal: %d cases failed\n\n", num_failed); + } + + num_tests_total++; + if (res != 0) num_tests_failed++; + + return (res == 0) ? 0 : 1; +} + +struct TEST_RECORD { + const char* name; + TESTPROC testproc; +}; + +TEST_RECORD tests[] = { + {"AutoCopyPtr test" , &TestAutoCopyPtr }, + {"BinaryHeap test 1" , &TestBinaryHeap1 }, + {"BinaryHeap test 2" , &TestBinaryHeap2 }, + {"FixedSizeArray test", &TestFixedSizeArray }, + {"Array test" , &TestArray }, + {"Blob test 1" , &TestBlob1 }, + {"Blob test 2" , &TestBlob2 }, + {"HashTable test 1" , &TestHashTable1 }, + {"Yapf test 1" , &CTestYapf1::stTestAstar }, + {"Yapf test 2" , &CTestYapf2::stTestAstar }, + + {NULL , NULL }, +}; + +int main(int argc, char** argv) +{ + bool silent = (argc == 1); + + for (TEST_RECORD* tr = tests; tr->name != NULL; tr++) + do_test(tr->name, tr->testproc, silent); + + if (num_tests_failed == 0) + printf("\nALL %d TESTS PASSED OK!\n\n", num_tests_total); + else + printf("\n****** %d (from %d of total) TEST(S) FAILED! ******\n", num_tests_failed, num_tests_total); + return 0; +} + + + +extern "C" +const TileIndexDiffC _tileoffs_by_dir[] = { + {-1, 0}, + { 0, 1}, + { 1, 0}, + { 0, -1} +}; + +extern "C" +const byte _ffb_64[128] = { + 0,0,1,0,2,0,1,0, + 3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0, + 3,0,1,0,2,0,1,0, + 5,0,1,0,2,0,1,0, + 3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0, + 3,0,1,0,2,0,1,0, + + 0,0,0,2,0,4,4,6, + 0,8,8,10,8,12,12,14, + 0,16,16,18,16,20,20,22, + 16,24,24,26,24,28,28,30, + 0,32,32,34,32,36,36,38, + 32,40,40,42,40,44,44,46, + 32,48,48,50,48,52,52,54, + 48,56,56,58,56,60,60,62, +}; + +/* Maps a trackdir to the (4-way) direction the tile is exited when following +* that trackdir */ +extern "C" +const DiagDirection _trackdir_to_exitdir[] = { + DIAGDIR_NE,DIAGDIR_SE,DIAGDIR_NE,DIAGDIR_SE,DIAGDIR_SW,DIAGDIR_SE, DIAGDIR_NE,DIAGDIR_NE, + DIAGDIR_SW,DIAGDIR_NW,DIAGDIR_NW,DIAGDIR_SW,DIAGDIR_NW,DIAGDIR_NE, +}; + +/* Maps a diagonal direction to the all trackdirs that are connected to any +* track entering in this direction (including those making 90 degree turns) +*/ +extern "C" +const TrackdirBits _exitdir_reaches_trackdirs[] = { + TRACKDIR_BIT_X_NE | TRACKDIR_BIT_LOWER_E | TRACKDIR_BIT_LEFT_N, /* DIAGDIR_NE */ + TRACKDIR_BIT_Y_SE | TRACKDIR_BIT_LEFT_S | TRACKDIR_BIT_UPPER_E, /* DIAGDIR_SE */ + TRACKDIR_BIT_X_SW | TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_RIGHT_S, /* DIAGDIR_SW */ + TRACKDIR_BIT_Y_NW | TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_LOWER_W /* DIAGDIR_NW */ +}; + +/* Maps a trackdir to all trackdirs that make 90 deg turns with it. */ +extern "C" +const TrackdirBits _track_crosses_trackdirs[] = { + TRACKDIR_BIT_Y_SE | TRACKDIR_BIT_Y_NW, /* TRACK_X */ + TRACKDIR_BIT_X_NE | TRACKDIR_BIT_X_SW, /* TRACK_Y */ + TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_RIGHT_S | TRACKDIR_BIT_LEFT_N | TRACKDIR_BIT_LEFT_S, /* TRACK_UPPER */ + TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_RIGHT_S | TRACKDIR_BIT_LEFT_N | TRACKDIR_BIT_LEFT_S, /* TRACK_LOWER */ + TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_UPPER_E | TRACKDIR_BIT_LOWER_W | TRACKDIR_BIT_LOWER_E, /* TRACK_LEFT */ + TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_UPPER_E | TRACKDIR_BIT_LOWER_W | TRACKDIR_BIT_LOWER_E /* TRACK_RIGHT */ +}; + + + + + + + |