From 0dbe225049f6bb63b772759935306c088bdc7921 Mon Sep 17 00:00:00 2001 From: Joshua Warner Date: Sat, 25 Jan 2014 10:11:19 -0700 Subject: [PATCH 1/2] add sublimetext files to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8800bb0b0c..84786ef46a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ bin /distrib *.pdb *.swp +/*.sublime-* From 68bb65cb91f971c2415b753dc1443ab7f6b86667 Mon Sep 17 00:00:00 2001 From: Joshua Warner Date: Thu, 30 Jan 2014 17:34:59 -0700 Subject: [PATCH 2/2] improve c++ test harness --- unittest/codegen/assembler-test.cpp | 44 +++++---------- unittest/codegen/registers-test.cpp | 37 +++++------- unittest/test-harness.h | 65 +++++++++++++-------- unittest/util/arg-parser-test.cpp | 87 +++++++++++++---------------- 4 files changed, 113 insertions(+), 120 deletions(-) diff --git a/unittest/codegen/assembler-test.cpp b/unittest/codegen/assembler-test.cpp index 2109e30a63..deab7695c8 100644 --- a/unittest/codegen/assembler-test.cpp +++ b/unittest/codegen/assembler-test.cpp @@ -62,35 +62,21 @@ public: }; -class BasicAssemblerTest : public Test { -public: - BasicAssemblerTest(): - Test("BasicAssembler") - {} +TEST(BasicAssembler) { + BasicEnv env; + Asm a(env); +} - virtual void run() { - BasicEnv env; - Asm a(env); +TEST(ArchitecturePlan) { + BasicEnv env; + + for(int op = (int)lir::Call; op < (int)lir::AlignedJump; op++) { + bool thunk; + OperandMask mask; + env.arch->plan((lir::UnaryOperation)op, vm::TargetBytesPerWord, mask, &thunk); + assertFalse(thunk); + assertNotEqual(static_cast(0), mask.typeMask); + assertNotEqual(static_cast(0), mask.registerMask); } -} basicAssemblerTest; -class ArchitecturePlanTest : public Test { -public: - ArchitecturePlanTest(): - Test("ArchitecturePlan") - {} - - virtual void run() { - BasicEnv env; - - for(int op = (int)lir::Call; op < (int)lir::AlignedJump; op++) { - bool thunk; - OperandMask mask; - env.arch->plan((lir::UnaryOperation)op, vm::TargetBytesPerWord, mask, &thunk); - assertFalse(thunk); - assertNotEqual(static_cast(0), mask.typeMask); - assertNotEqual(static_cast(0), mask.registerMask); - } - - } -} architecturePlanTest; +} diff --git a/unittest/codegen/registers-test.cpp b/unittest/codegen/registers-test.cpp index f9d253c4c4..8502ee973a 100644 --- a/unittest/codegen/registers-test.cpp +++ b/unittest/codegen/registers-test.cpp @@ -19,26 +19,19 @@ using namespace avian::codegen; using namespace vm; -class RegisterIteratorTest : public Test { -public: - RegisterIteratorTest(): - Test("RegisterIterator") - {} +TEST(RegisterIterator) { + RegisterMask regs(0x55); + assertEqual(0, regs.start); + assertEqual(7, regs.limit); - virtual void run() { - RegisterMask regs(0x55); - assertEqual(0, regs.start); - assertEqual(7, regs.limit); - - RegisterIterator it(regs); - assertTrue(it.hasNext()); - assertEqual(0, it.next()); - assertTrue(it.hasNext()); - assertEqual(2, it.next()); - assertTrue(it.hasNext()); - assertEqual(4, it.next()); - assertTrue(it.hasNext()); - assertEqual(6, it.next()); - assertFalse(it.hasNext()); - } -} registerIteratorTest; + RegisterIterator it(regs); + assertTrue(it.hasNext()); + assertEqual(0, it.next()); + assertTrue(it.hasNext()); + assertEqual(2, it.next()); + assertTrue(it.hasNext()); + assertEqual(4, it.next()); + assertTrue(it.hasNext()); + assertEqual(6, it.next()); + assertFalse(it.hasNext()); +} diff --git a/unittest/test-harness.h b/unittest/test-harness.h index 29f86c236d..be50ff4233 100644 --- a/unittest/test-harness.h +++ b/unittest/test-harness.h @@ -15,38 +15,41 @@ #include class Test { -private: + private: Test* next; static Test* first; static Test** last; friend int main(int argc, char** argv); - - void print(uint64_t value) { + void print(uint64_t value) + { fprintf(stderr, "%p", reinterpret_cast(value)); } - void print(uint32_t value) { + void print(uint32_t value) + { fprintf(stderr, "%p", reinterpret_cast(value)); } - - void print(uint8_t value) { + void print(uint8_t value) + { print(static_cast(value)); } - void print(bool value) { + void print(bool value) + { fprintf(stderr, "%s", value ? "true" : "false"); } int failures; int runs; -protected: - template - void assertEqual(T expected, T actual) { - if(expected != actual) { + protected: + template + void assertEqual(T expected, T actual) + { + if (expected != actual) { fprintf(stderr, "assertion failure, expected: "); print(expected); fprintf(stderr, ", actual: "); @@ -57,17 +60,23 @@ protected: runs++; } - void assertEqual(const char* expected, const char* actual) { - if((expected == 0 && actual != 0) || (expected != 0 && actual == 0) || strcmp(expected, actual) != 0) { - fprintf(stderr, "assertion failure, expected: \"%s\", actual: \"%s\"\n", expected, actual); + void assertEqual(const char* expected, const char* actual) + { + if ((expected == 0 && actual != 0) || (expected != 0 && actual == 0) + || strcmp(expected, actual) != 0) { + fprintf(stderr, + "assertion failure, expected: \"%s\", actual: \"%s\"\n", + expected, + actual); failures++; } runs++; } - - template - void assertNotEqual(T expected, T actual) { - if(expected == actual) { + + template + void assertNotEqual(T expected, T actual) + { + if (expected == actual) { fprintf(stderr, "assertion failure, expected: not "); print(expected); fprintf(stderr, ", actual: "); @@ -78,15 +87,17 @@ protected: runs++; } - void assertTrue(bool value) { + void assertTrue(bool value) + { assertEqual(true, value); } - void assertFalse(bool value) { + void assertFalse(bool value) + { assertEqual(false, value); } -public: + public: const char* const name; Test(const char* name); @@ -95,4 +106,14 @@ public: static bool runAll(); }; -#endif // TEST_HARNESS_H +#define TEST(name) \ + class name##TestClass : public Test { \ + public: \ + name##TestClass() : Test(#name) \ + { \ + } \ + virtual void run(); \ + } name##TestInstance; \ + void name##TestClass::run() + +#endif // TEST_HARNESS_H diff --git a/unittest/util/arg-parser-test.cpp b/unittest/util/arg-parser-test.cpp index 631d481b2f..d5b195a989 100644 --- a/unittest/util/arg-parser-test.cpp +++ b/unittest/util/arg-parser-test.cpp @@ -19,51 +19,44 @@ using namespace avian::util; -class ArgParserTest : public Test { -public: - ArgParserTest(): - Test("ArgParser") - {} - - virtual void run() { - { - ArgParser parser; - Arg arg1(parser, false, "arg1", ""); - Arg required2(parser, true, "required2", ""); - const char* args[] = { - "myExecutable", - "-arg1", "myValue1", - "-required2", "myRequired2", - 0 - }; - assertTrue(parser.parse(sizeof(args) / sizeof(char*) - 1, args)); - assertEqual("myValue1", arg1.value); - assertEqual("myRequired2", required2.value); - } - - { - ArgParser parser; - Arg arg1(parser, false, "arg1", ""); - Arg required2(parser, true, "required2", ""); - const char* args[] = { - "myExecutable", - "-arg1", "myValue1", - "-required2", - 0 - }; - assertFalse(parser.parse(sizeof(args) / sizeof(char*) - 1, args)); - } - - { - ArgParser parser; - Arg arg1(parser, false, "arg1", ""); - Arg required2(parser, true, "required2", ""); - const char* args[] = { - "myExecutable", - "-arg1", "myValue1", - 0 - }; - assertFalse(parser.parse(sizeof(args) / sizeof(char*) - 1, args)); - } +TEST(ArgParser) { + { + ArgParser parser; + Arg arg1(parser, false, "arg1", ""); + Arg required2(parser, true, "required2", ""); + const char* args[] = { + "myExecutable", + "-arg1", "myValue1", + "-required2", "myRequired2", + 0 + }; + assertTrue(parser.parse(sizeof(args) / sizeof(char*) - 1, args)); + assertEqual("myValue1", arg1.value); + assertEqual("myRequired2", required2.value); } -} argParserTest; \ No newline at end of file + + { + ArgParser parser; + Arg arg1(parser, false, "arg1", ""); + Arg required2(parser, true, "required2", ""); + const char* args[] = { + "myExecutable", + "-arg1", "myValue1", + "-required2", + 0 + }; + assertFalse(parser.parse(sizeof(args) / sizeof(char*) - 1, args)); + } + + { + ArgParser parser; + Arg arg1(parser, false, "arg1", ""); + Arg required2(parser, true, "required2", ""); + const char* args[] = { + "myExecutable", + "-arg1", "myValue1", + 0 + }; + assertFalse(parser.parse(sizeof(args) / sizeof(char*) - 1, args)); + } +}