diff options
author | Akira TAGOH <akira@tagoh.org> | 2008-01-04 03:05:52 +0000 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2008-01-04 03:05:52 +0000 |
commit | 090125e4d1dde5c6f443a4f0d7a8257d456cb36b (patch) | |
tree | e46b7f130dab7318f70934c626a0141d81e67595 | |
parent | 0ff362ceb2747c960b415e9dd07a0a011214b472 (diff) |
2007-12-31 Akira TAGOH <akira@tagoh.org>
* tests/Makefile.am (test_hgstack_SOURCES): use check library.
* tests/hgstack.c: Add more testcases.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | hieroglyph/version.h.in | 2 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/hgstack.c | 370 |
4 files changed, 316 insertions, 63 deletions
@@ -1,3 +1,9 @@ +2007-12-31 Akira TAGOH <akira@tagoh.org> + + * tests/Makefile.am (test_hgstack_SOURCES): use check library. + + * tests/hgstack.c: Add more testcases. + 2007-12-22 Akira TAGOH <akira@tagoh.org> * tests/hgstring.c: Add more testcases. diff --git a/hieroglyph/version.h.in b/hieroglyph/version.h.in index 7a0e4dd..b2ed5f8 100644 --- a/hieroglyph/version.h.in +++ b/hieroglyph/version.h.in @@ -30,7 +30,7 @@ G_BEGIN_DECLS #define HIEROGLYPH_VERSION "@VERSION@" -#define HIEROGLYPH_UUID "886e7224-54f7-419a-beff-43834dc46659" +#define HIEROGLYPH_UUID "d46cd34f-aa6d-4cb4-9cf3-42d70b229e5c" const char *__hg_rcsid G_GNUC_UNUSED = "$Rev$"; diff --git a/tests/Makefile.am b/tests/Makefile.am index ffb54fc..3a742ad 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -44,6 +44,7 @@ test_hgfile_SOURCES = \ $(NULL) test_hgfile_LDADD = $(LDADDS) test_hgstack_SOURCES = \ + main.c \ hgstack.c \ $(NULL) test_hgstack_LDADD = $(LDADDS) diff --git a/tests/hgstack.c b/tests/hgstack.c index d1d8b86..c5c3027 100644 --- a/tests/hgstack.c +++ b/tests/hgstack.c @@ -24,74 +24,320 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif - -#include <hieroglyph/hgobject.h> #include <hieroglyph/hgstack.h> +#include <hieroglyph/hgobject.h> #include <hieroglyph/vm.h> +#include "main.h" -int -main(int argc, - char **argv) -{ - hg_vm_t *vm; - hg_stack_t *stack; - hg_object_t *obj; - gint i = 1; +hg_vm_t *vm; +hg_stack_t *obj; +void +setup(void) +{ vm = hg_vm_new(); - stack = hg_stack_new(vm, 10); - hg_stack_dump(vm, stack); - obj = hg_object_integer_new(vm, i++); - hg_stack_push(stack, obj); - hg_stack_dump(vm, stack); - obj = hg_object_integer_new(vm, i++); - hg_stack_push(stack, obj); - hg_stack_dump(vm, stack); - obj = hg_object_integer_new(vm, i++); - hg_stack_push(stack, obj); - obj = hg_object_integer_new(vm, i++); - hg_stack_push(stack, obj); - obj = hg_object_integer_new(vm, i++); - hg_stack_push(stack, obj); - hg_stack_dump(vm, stack); - hg_stack_pop(stack); - hg_stack_dump(vm, stack); - obj = hg_object_integer_new(vm, i++); - hg_stack_push(stack, obj); - hg_stack_dump(vm, stack); - hg_stack_roll(stack, 3, 2); - hg_stack_dump(vm, stack); - obj = hg_object_integer_new(vm, i++); - hg_stack_push(stack, obj); - hg_stack_dump(vm, stack); - hg_stack_roll(stack, 3, -2); - hg_stack_dump(vm, stack); - hg_stack_roll(stack, 6, 2); - hg_stack_dump(vm, stack); - hg_stack_pop(stack); - hg_stack_pop(stack); - hg_stack_pop(stack); - hg_stack_pop(stack); - hg_stack_pop(stack); - hg_stack_pop(stack); - hg_stack_dump(vm, stack); - - i = 1; - do { - obj = hg_object_integer_new(vm, i++); - } while (hg_stack_push(stack, obj)); - printf("%d\n", i); - hg_stack_dump(vm, stack); - hg_stack_roll(stack, 3, 2); - hg_stack_dump(vm, stack); - hg_stack_roll(stack, 3, -2); - hg_stack_dump(vm, stack); - hg_stack_roll(stack, 10, -2); - hg_stack_dump(vm, stack); - - hg_stack_free(vm, stack); +} + +void +teardown(void) +{ hg_vm_destroy(vm); +} + +/* stack */ +TDEF (hg_stack_new) +{ + gboolean flag; + + obj = hg_stack_new(vm, 10); + + fail_unless(obj != NULL, "Failed to create a stack object"); + fail_unless(obj->stack_depth == 10, "the stack depth isn't expected depth."); + + hg_stack_free(vm, obj); + + /* disable stacktrace */ + if (hg_is_stacktrace_enabled) + flag = hg_is_stacktrace_enabled(); + hg_use_stacktrace(FALSE); + /* disable warnings */ + hg_quiet_warning_messages(TRUE); + + obj = hg_stack_new(vm, 0); + + if (hg_is_stacktrace_enabled) + hg_use_stacktrace(flag); + hg_quiet_warning_messages(FALSE); + + fail_unless(obj == NULL, "depth must be more than 0"); +} +TEND + +TDEF (hg_stack_free) +{ + /* nothing to check here particularly */ +} +TEND + +TDEF (hg_stack_push) +{ + hg_object_t *obj2; + gboolean flag, retval; + + obj = hg_stack_new(vm, 1); + + fail_unless(obj != NULL, "Failed to create a stack object"); + + obj2 = hg_object_boolean_new(vm, TRUE); + fail_unless(obj2 != NULL, "Failed to create a boolean object"); + + fail_unless(hg_stack_push(obj, obj2), "Failed to push an object to stack"); + + /* disable stacktrace */ + if (hg_is_stacktrace_enabled) + flag = hg_is_stacktrace_enabled(); + hg_use_stacktrace(FALSE); + /* disable warnings */ + hg_quiet_warning_messages(TRUE); + + retval = hg_stack_push(obj, obj2); + + if (hg_is_stacktrace_enabled) + hg_use_stacktrace(flag); + hg_quiet_warning_messages(FALSE); + + fail_unless(!retval, "Object has to be unable to be pushed."); + + hg_stack_free(vm, obj); + hg_object_free(vm, obj2); +} +TEND + +TDEF (hg_stack_pop) +{ + hg_object_t *obj2, *obj3; + gboolean flag; + + obj = hg_stack_new(vm, 10); + + fail_unless(obj != NULL, "Failed to create a stack object"); + + obj2 = hg_object_boolean_new(vm, TRUE); + fail_unless(obj2 != NULL, "Failed to create a boolean object"); + + fail_unless(hg_stack_push(obj, obj2), "Failed to push an object to stack"); + + fail_unless((obj3 = hg_stack_pop(obj)) != NULL, "Failed to pop an object from stack"); + fail_unless(obj2 == obj3, "Failed to pop an object from stack (verifying)"); + + /* disable stacktrace */ + if (hg_is_stacktrace_enabled) + flag = hg_is_stacktrace_enabled(); + hg_use_stacktrace(FALSE); + /* disable warnings */ + hg_quiet_warning_messages(TRUE); + + obj3 = hg_stack_pop(obj); + + if (hg_is_stacktrace_enabled) + hg_use_stacktrace(flag); + hg_quiet_warning_messages(FALSE); + + fail_unless(obj3 == NULL, "stack has to be empty."); + + hg_stack_free(vm, obj); + hg_object_free(vm, obj2); +} +TEND + +TDEF (hg_stack_length) +{ + hg_object_t *obj2; + + obj = hg_stack_new(vm, 10); + + fail_unless(obj != NULL, "Failed to create a stack object"); + fail_unless(hg_stack_length(obj) == 0, "stack has to be empty."); + + obj2 = hg_object_boolean_new(vm, TRUE); + fail_unless(obj2 != NULL, "Failed to create a boolean object"); + + fail_unless(hg_stack_push(obj, obj2), "Failed to push an object to stack"); + fail_unless(hg_stack_length(obj) == 1, "Failed to get current depth"); + + hg_stack_free(vm, obj); + hg_object_free(vm, obj2); +} +TEND + +TDEF (hg_stack_clear) +{ + hg_object_t *obj2; + + obj = hg_stack_new(vm, 10); + + fail_unless(obj != NULL, "Failed to create a stack object"); + + obj2 = hg_object_boolean_new(vm, TRUE); + fail_unless(obj2 != NULL, "Failed to create a boolean object"); + + fail_unless(hg_stack_push(obj, obj2), "Failed to push an object to stack"); + fail_unless(hg_stack_length(obj) == 1, "Failed to get current depth"); + + hg_stack_clear(obj); + + fail_unless(hg_stack_length(obj) == 0, "Failed to clear the stack"); + + hg_stack_free(vm, obj); + hg_object_free(vm, obj2); +} +TEND + +TDEF (hg_stack_index) +{ + hg_object_t *obj2, *obj3, *obj4; + gboolean flag; + + obj = hg_stack_new(vm, 10); + + fail_unless(obj != NULL, "Failed to create a stack object"); + + /* disable stacktrace */ + if (hg_is_stacktrace_enabled) + flag = hg_is_stacktrace_enabled(); + hg_use_stacktrace(FALSE); + /* disable warnings */ + hg_quiet_warning_messages(TRUE); + + obj2 = hg_stack_index(obj, 0); + + if (hg_is_stacktrace_enabled) + hg_use_stacktrace(flag); + hg_quiet_warning_messages(FALSE); + + fail_unless(obj2 == NULL, "index has to be less than the amount of the objects in the stack."); + + obj2 = hg_object_boolean_new(vm, TRUE); + fail_unless(obj2 != NULL, "Failed to create a boolean object"); + + hg_stack_push(obj, obj2); + obj3 = hg_stack_index(obj, 0); + fail_unless(obj2 == obj3, "gotten object isn't an expected object"); + + obj3 = hg_object_integer_new(vm, 10); + fail_unless(obj3 != NULL, "Failed to create an integer object"); + + hg_stack_push(obj, obj3); + obj4 = hg_stack_index(obj, 0); + fail_unless(obj3 == obj4, "gotten object isn't an expected object (integer)"); + obj4 = hg_stack_index(obj, 1); + fail_unless(obj4 == obj2, "gotten object isn't an expected object (boolean)"); + + hg_stack_free(vm, obj); + hg_object_free(vm, obj2); + hg_object_free(vm, obj3); +} +TEND + +TDEF (hg_stack_roll) +{ + hg_object_t *obj2, *obj3, *obj4, *obj5; + gboolean flag, retval; + + obj = hg_stack_new(vm, 1); + fail_unless(obj != NULL, "Failed to create a stack object"); + + /* disable stacktrace */ + if (hg_is_stacktrace_enabled) + flag = hg_is_stacktrace_enabled(); + hg_use_stacktrace(FALSE); + /* disable warnings */ + hg_quiet_warning_messages(TRUE); + + retval = hg_stack_roll(obj, 2, 1); + + if (hg_is_stacktrace_enabled) + hg_use_stacktrace(flag); + hg_quiet_warning_messages(FALSE); + + fail_unless(!retval, "block has to be less than the stack size"); + + hg_stack_free(vm, obj); + + obj = hg_stack_new(vm, 10); + fail_unless(obj != NULL, "Failed to create a stack object"); + + obj2 = hg_object_boolean_new(vm, TRUE); + obj3 = hg_object_integer_new(vm, 1); + obj4 = hg_object_mark_new(vm); + obj5 = hg_object_boolean_new(vm, FALSE); + fail_unless(obj2 != NULL, "Failed to create a boolean object"); + fail_unless(obj3 != NULL, "Failed to create an integer object"); + fail_unless(obj4 != NULL, "Failed to create a mark object"); + fail_unless(obj5 != NULL, "Failed to create a boolean object"); + + hg_stack_push(obj, obj2); + hg_stack_push(obj, obj3); + fail_unless(hg_stack_roll(obj, 0, 1), "Failed to roll the objects"); + fail_unless(hg_stack_index(obj, 0) == obj3, "Failed to verify after rolling (integer) n_blocks == 0"); + fail_unless(hg_stack_index(obj, 1) == obj2, "Failed to verify after rolling (boolean) n_blocks == 0"); + + fail_unless(hg_stack_roll(obj, 2, 0), "Failed to roll the objects"); + fail_unless(hg_stack_index(obj, 0) == obj3, "Failed to verify after rolling (integer) n_times == 0"); + fail_unless(hg_stack_index(obj, 1) == obj2, "Failed to verify after rolling (boolean) n_times == 0"); + + hg_stack_push(obj, obj4); + fail_unless(hg_stack_roll(obj, 3, 2), "Failed to roll the objects"); + fail_unless(hg_stack_index(obj, 0) == obj2, "Failed to verify after rolling (boolean)"); + fail_unless(hg_stack_index(obj, 1) == obj4, "Failed to verify after rolling (mark)"); + fail_unless(hg_stack_index(obj, 2) == obj3, "Failed to verify after rolling (integer)"); + + hg_stack_push(obj, obj5); + fail_unless(hg_stack_roll(obj, 3, -2), "Failed to roll the objects"); + fail_unless(hg_stack_index(obj, 0) == obj2, "Failed to verify after rolling (boolean)"); + fail_unless(hg_stack_index(obj, 1) == obj4, "Failed to verify after rolling (mark)"); + fail_unless(hg_stack_index(obj, 2) == obj5, "Failed to verify after rolling (boolean)"); + fail_unless(hg_stack_index(obj, 3) == obj3, "Failed to verify after rolling (integer)"); + + fail_unless(hg_stack_roll(obj, 4, 3), "Failed to roll the objects"); + fail_unless(hg_stack_index(obj, 0) == obj3, "Failed to verify after rolling (integer)"); + fail_unless(hg_stack_index(obj, 1) == obj2, "Failed to verify after rolling (boolean)"); + fail_unless(hg_stack_index(obj, 2) == obj4, "Failed to verify after rolling (mark)"); + fail_unless(hg_stack_index(obj, 3) == obj5, "Failed to verify after rolling (boolean)"); + + hg_stack_free(vm, obj); + hg_object_free(vm, obj2); + hg_object_free(vm, obj3); + hg_object_free(vm, obj4); +} +TEND + +TDEF (hg_stack_dump) +{ + g_print("FIXME: %s\n", __FUNCTION__); +} +TEND + +/************************************************************/ +Suite * +hieroglyph_suite(void) +{ + Suite *s = suite_create("hg_stack_t"); + TCase *tc = tcase_create("Generic Functionalities"); + + tcase_add_checked_fixture(tc, setup, teardown); + T (hg_stack_new); + T (hg_stack_free); + T (hg_stack_push); + T (hg_stack_pop); + T (hg_stack_clear); + T (hg_stack_length); + T (hg_stack_index); + T (hg_stack_roll); + T (hg_stack_dump); + + suite_add_tcase(s, tc); - return 0; + return s; } |