Files @ r4549:76b9213799ac
Branch filter:

Location: cpp/openttd-patchpack/source/yapf/unittest/unittest.cpp

rubidium
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
-Cleanup: whitespace alignment of a few tables.
/* $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 */
};