summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2008-01-04 03:05:52 +0000
committerAkira TAGOH <akira@tagoh.org>2008-01-04 03:05:52 +0000
commit090125e4d1dde5c6f443a4f0d7a8257d456cb36b (patch)
treee46b7f130dab7318f70934c626a0141d81e67595
parent0ff362ceb2747c960b415e9dd07a0a011214b472 (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--ChangeLog6
-rw-r--r--hieroglyph/version.h.in2
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/hgstack.c370
4 files changed, 316 insertions, 63 deletions
diff --git a/ChangeLog b/ChangeLog
index 87aa1df..6381f5a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
}