diff --git a/test/System39.ain b/test/System39.ain index 0fbf145..0965872 100644 Binary files a/test/System39.ain and b/test/System39.ain differ diff --git a/test/stack.adv b/test/stack.adv new file mode 100644 index 0000000..286111d --- /dev/null +++ b/test/stack.adv @@ -0,0 +1,58 @@ + MS FILE,"stack.adv": + +const word STACK_TOP_ATTR = 0: +const word NUM_PAGE_CALLS = 1: +const word NUM_LABEL_CALLS = 2: +const word NUM_VAR_PUSHES = 3: +const word NUM_LABEL_CALLS_AFTER_PAGE_CALL = 4: +const word NUM_VAR_PUSHES_AFTER_CALL = 5: + + UR D01: + ~AssertEquals D01[STACK_TOP_ATTR], 0, __LINE__: + ~AssertEquals D01[NUM_PAGE_CALLS], 1, __LINE__: + ~AssertEquals D01[NUM_LABEL_CALLS], 0, __LINE__: + ~AssertEquals D01[NUM_VAR_PUSHES], 0, __LINE__: + ~TestGlobalReturnFromLocalFunc: + %0: + +**TestGlobalReturnFromLocalFunc: + UR D01: + ~AssertEquals D01[STACK_TOP_ATTR], 0, __LINE__: + ~AssertEquals D01[NUM_PAGE_CALLS], 2, __LINE__: + ~AssertEquals D01[NUM_LABEL_CALLS], 0, __LINE__: + ~AssertEquals D01[NUM_LABEL_CALLS_AFTER_PAGE_CALL], 0, __LINE__: + \LocalFunc: + ; Unreachable + ~Fail __LINE__: + %0: + +*LocalFunc: + UR D01: + ~AssertEquals D01[STACK_TOP_ATTR], 0, __LINE__: + ~AssertEquals D01[NUM_PAGE_CALLS], 2, __LINE__: + ~AssertEquals D01[NUM_LABEL_CALLS], 1, __LINE__: + ~AssertEquals D01[NUM_LABEL_CALLS_AFTER_PAGE_CALL], 1, __LINE__: + ~NestedGlobalFunc: + %0: ; This returns from TestGlobalReturnFromLocalFunc! + +**NestedGlobalFunc: + US D01, 20: + UR D01: + ~AssertEquals D01[STACK_TOP_ATTR], 0, __LINE__: + ~AssertEquals D01[NUM_PAGE_CALLS], 3, __LINE__: + ~AssertEquals D01[NUM_LABEL_CALLS], 1, __LINE__: + ~AssertEquals D01[NUM_LABEL_CALLS_AFTER_PAGE_CALL], 0, __LINE__: + ~AssertEquals D01[NUM_VAR_PUSHES], 20, __LINE__: + ~AssertEquals D01[NUM_VAR_PUSHES_AFTER_CALL], 20, __LINE__: + \NestedLocalFunc: + %0: + +*NestedLocalFunc: + UR D01: + ~AssertEquals D01[STACK_TOP_ATTR], 0, __LINE__: + ~AssertEquals D01[NUM_PAGE_CALLS], 3, __LINE__: + ~AssertEquals D01[NUM_LABEL_CALLS], 2, __LINE__: + ~AssertEquals D01[NUM_LABEL_CALLS_AFTER_PAGE_CALL], 1, __LINE__: + ~AssertEquals D01[NUM_VAR_PUSHES], 20, __LINE__: + ~AssertEquals D01[NUM_VAR_PUSHES_AFTER_CALL], 0, __LINE__: + \0: diff --git a/test/test.adv b/test/test.adv index 8157556..08e7ff5 100644 --- a/test/test.adv +++ b/test/test.adv @@ -11,6 +11,7 @@ %#array.adv: %#strvar.adv: + %#stack.adv: HH0,tests_passed: ' tests passed' R HH0,tests_failed: ' tests failed' R diff --git a/test/test.hed b/test/test.hed index 5797f33..296e8ed 100644 --- a/test/test.hed +++ b/test/test.hed @@ -3,6 +3,7 @@ test.adv util.adv array.adv strvar.adv +stack.adv #DLLHeader ShString.HEL diff --git a/test/testSA.ALD b/test/testSA.ALD index 7033bb5..920c03f 100644 Binary files a/test/testSA.ALD and b/test/testSA.ALD differ diff --git a/test/util.adv b/test/util.adv index 0798cc3..04e490d 100644 --- a/test/util.adv +++ b/test/util.adv @@ -27,3 +27,9 @@ const word FILE = 1: ' actual: "' X actual: '"' R %0: + +**Fail line: + inc tests_failed: + '[FAIL] ' X FILE: ':' HH0,line: + R + %0: