Leopold Toetsch <[EMAIL PROTECTED]> writes:
> All these (non-trivial) source tests, that create some resources should
> use the scheme of t/src/basic_3.

I've rewritten list.t and hash.t to use this scheme, generalizing the
layout a bit in the process.  I'm not sure about the reasoning for one
of the interpreter setups in the old hash.t (marked with XXX), and
whether it's needed now - seems to work fine without, but that may not
be the point.

I'll do the rest of them later, but I really should work on other
stuff now :-)

Cheers,
-- 
Lars Balker Rasmussen                                      Consult::Perl

Index: t/src/exit.t
===================================================================
RCS file: /cvs/public/parrot/t/src/exit.t,v
retrieving revision 1.5
diff -u -a -r1.5 exit.t
--- t/src/exit.t	13 Dec 2003 15:01:19 -0000	1.5
+++ t/src/exit.t	5 Jan 2004 18:16:30 -0000
@@ -10,6 +10,7 @@
             printf("pre-exit\n");
             Parrot_exit(0);
             printf("post-exit\n");
+            return 0;
         }
 CODE
 pre-exit
Index: t/src/hash.t
===================================================================
RCS file: /cvs/public/parrot/t/src/hash.t,v
retrieving revision 1.10
diff -u -a -r1.10 hash.t
--- t/src/hash.t	13 Dec 2003 15:01:19 -0000	1.10
+++ t/src/hash.t	5 Jan 2004 18:16:30 -0000
@@ -3,63 +3,79 @@
 
 use Parrot::Test tests => 10;
 
-c_output_is(<<'CODE', <<'OUTPUT', "new_hash");
+my $main = <<'CODE';
+#include <parrot/parrot.h>
+#include <parrot/embed.h>
 
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
+static opcode_t *the_test(Parrot_Interp, opcode_t *, opcode_t *);
 
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
+int exit_value = 0;
+
+int main(int argc, char* argv[])
+{
+    Parrot_Interp interpreter = Parrot_new(NULL);
+    if (!interpreter) {
+        return 1;
+    }
+    Parrot_init(interpreter);
+
+    Parrot_run_native(interpreter, the_test);
+
+    Parrot_exit(exit_value);
+    return exit_value;
+}
+
+CODE
+
+c_output_is($main . <<'CODE', <<'OUTPUT', "new_hash");
+
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
+{
     Hash *hash;
     STRING *key;
     HashEntry value;
 
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
-    printf("ok\n");
+    PIO_eprintf(interpreter, "ok\n");
 
-    return 0;
+    return NULL;
 }
 
 CODE
 ok
 OUTPUT
 
-c_output_is(<<'CODE', <<'OUTPUT', "hash_put");
-
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
+c_output_is($main . <<'CODE', <<'OUTPUT', "hash_put");
 
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
+{
     Hash *hash;
     STRING *key;
     HashEntry value;
 
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     key = string_from_cstring(interpreter, "fortytwo", 0);
@@ -67,39 +83,35 @@
     value.val.int_val = 42;
     hash_put(interpreter, hash, key, &value);
 
-    printf("ok\n");
+    PIO_eprintf(interpreter, "ok\n");
 
-    return 0;
+    return NULL;
 }
 
 CODE
 ok
 OUTPUT
 
-c_output_is(<<'CODE', <<'OUTPUT', "hash_get");
+c_output_is($main . <<'CODE', <<'OUTPUT', "hash_get");
 
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
-
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
+{
     Hash *hash;
     STRING *key;
     HashEntry _value;
     HashEntry *value = &_value;
 
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     key = string_from_cstring(interpreter, "fortytwo", 0);
@@ -108,39 +120,35 @@
     hash_put(interpreter, hash, key, value);
     value = hash_get(interpreter, hash, key);
 
-    printf("%i\n", (int)value->val.int_val);
+    PIO_eprintf(interpreter, "%i\n", (int)value->val.int_val);
 
-    return 0;
+    return NULL;
 }
 
 CODE
 42
 OUTPUT
 
-c_output_is(<<'CODE', <<'OUTPUT', "hash_get with NULL key");
-
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
+c_output_is($main . <<'CODE', <<'OUTPUT', "hash_get with NULL key");
 
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
+{
     Hash *hash;
     STRING *key;
     HashEntry _value;
     HashEntry *value = &_value;
 
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     /*
@@ -157,39 +165,35 @@
     hash_put(interpreter, hash, key, value);
     value = hash_get(interpreter, hash, key);
 
-    printf("%i\n", (int)value->val.int_val);
+    PIO_eprintf(interpreter, "%i\n", (int)value->val.int_val);
 
-    return 0;
+    return NULL;
 }
 
 CODE
 42
 OUTPUT
 
-c_output_is(<<'CODE', <<'OUTPUT', "hash_get with empty string key");
+c_output_is($main . <<'CODE', <<'OUTPUT', "hash_get with empty string key");
 
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
-
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
+{
     Hash *hash;
     STRING *key;
     HashEntry _value;
     HashEntry *value = &_value;
 
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     key = string_from_cstring(interpreter, "", 0);
@@ -198,36 +202,22 @@
     hash_put(interpreter, hash, key, value);
     value = hash_get(interpreter, hash, key);
 
-    printf("%i\n", value->val.int_val);
+    PIO_eprintf(interpreter, "%i\n", value->val.int_val);
 
-    return 0;
+    return NULL;
 }
 
 CODE
 42
 OUTPUT
 
-c_output_is(<<'CODE', <<'OUTPUT', "hash_get with big key");
+c_output_is($main . <<'CODE', <<'OUTPUT', "hash_get with big key");
 
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
 #define BIGLEN 999999
 
-int do_test(Interp *interpreter);
-
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-    interpreter->lo_var_ptr = &interpreter;
-
-    Parrot_init(interpreter);
-    return do_test(interpreter);
-}
-
-int do_test(Interp *interpreter)
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
 {
     Hash *hash;
     STRING *key;
@@ -235,11 +225,19 @@
     HashEntry *value = &_value;
     char *big;
 
+    UNUSED(cur_op);
+    UNUSED(start);
+
+    /* XXX - Is this needed for this test when we run in Parrot_run_native?
+     * interpreter->lo_var_ptr = &interpreter; 
+     */
+
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     big = calloc(BIGLEN, sizeof(char));
@@ -252,38 +250,34 @@
     hash_put(interpreter, hash, key, value);
     value = hash_get(interpreter, hash, key);
 
-    printf("%i\n", value->val.int_val);
+    PIO_eprintf(interpreter, "%i\n", value->val.int_val);
 
-    return 0;
+    return NULL;
 }
 
 CODE
 42
 OUTPUT
 
-c_output_is(<<'CODE', <<'OUTPUT', "hash_size");
+c_output_is($main . <<'CODE', <<'OUTPUT', "hash_size");
 
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
-
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
+{
     Hash *hash;
     STRING *key;
     HashEntry value;
 
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     key = string_from_cstring(interpreter, "fortytwo", 0);
@@ -301,38 +295,34 @@
     value.val.string_val = key;
     hash_put(interpreter, hash, key, &value);
 
-    printf("%i\n", hash_size(interpreter, hash));
+    PIO_eprintf(interpreter, "%i\n", hash_size(interpreter, hash));
 
-    return 0;
+    return NULL;
 }
 
 CODE
 3
 OUTPUT
 
-c_output_is(<<'CODE', <<'OUTPUT', "hash_delete");
-
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
+c_output_is($main . <<'CODE', <<'OUTPUT', "hash_delete");
 
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
+{
     Hash *hash;
     STRING *key;
     PMC *value;
 
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     key = string_from_cstring(interpreter, "fortytwo", 0);
@@ -350,13 +340,13 @@
     VTABLE_set_string_native(interpreter, value, key);
     hash_put(interpreter, hash, key, value);
 
-    printf("%i\n", hash_size(interpreter, hash));
+    PIO_eprintf(interpreter, "%i\n", hash_size(interpreter, hash));
 
     hash_delete(interpreter, hash, key);
 
-    printf("%i\n", hash_size(interpreter, hash));
+    PIO_eprintf(interpreter, "%i\n", hash_size(interpreter, hash));
 
-    return 0;
+    return NULL;
 }
 
 CODE
@@ -364,30 +354,26 @@
 2
 OUTPUT
 
-c_output_is(<<'CODE', <<'OUTPUT', "hash_clone");
+c_output_is($main . <<'CODE', <<'OUTPUT', "hash_clone");
 
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
-
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
+{
     Hash *hash;
     Hash *hash2;
     STRING *key;
     PMC *value;
 
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     key = string_from_cstring(interpreter, "fortytwo", 0);
@@ -397,15 +383,15 @@
 
     value = hash_get(interpreter, hash, key);
 
-    printf("%i\n", (int)VTABLE_get_integer(interpreter, value));
+    PIO_eprintf(interpreter, "%i\n", (int)VTABLE_get_integer(interpreter, value));
 
     hash_clone(interpreter, hash, &hash2);
 
     value = hash_get(interpreter, hash2, key);
 
-    printf("%i\n", (int)VTABLE_get_integer(interpreter, value));
+    PIO_eprintf(interpreter, "%i\n", (int)VTABLE_get_integer(interpreter, value));
 
-    return 0;
+    return NULL;
 }
 
 CODE
@@ -413,29 +399,25 @@
 42
 OUTPUT
 
-c_output_like(<<'CODE', <<'OUTPUT', "dump_hash");
-
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
+c_output_like($main . <<'CODE', <<'OUTPUT', "dump_hash");
 
-int main(int argc, char* argv[]) {
-    Interp* interpreter;
+static opcode_t*
+the_test(struct Parrot_Interp *interpreter,
+	opcode_t *cur_op, opcode_t *start)
+{
     Hash *hash;
     STRING *key;
     HashEntry value;
 
-    interpreter = Parrot_new(NULL);
-
-    if ( interpreter == NULL ) return 1;
-
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     new_hash(interpreter, &hash);
 
     if ( hash == NULL ) {
-	printf("hash creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "hash creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     key = string_from_cstring(interpreter, "fortytwo", 0);
@@ -455,7 +437,7 @@
 
     dump_hash(interpreter, hash);
 
-    return 0;
+    return NULL;
 }
 
 CODE
Index: t/src/list.t
===================================================================
RCS file: /cvs/public/parrot/t/src/list.t,v
retrieving revision 1.11
diff -u -a -r1.11 list.t
--- t/src/list.t	13 Dec 2003 15:01:19 -0000	1.11
+++ t/src/list.t	5 Jan 2004 18:16:30 -0000
@@ -2,13 +2,36 @@
 
 use Parrot::Test tests => 2;
 
-c_output_is(<<'CODE', <<'OUTPUT', "data types");
+my $main = <<'CODE';
 
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
+#include <parrot/parrot.h>
+#include <parrot/embed.h>
 
-int main(int argc, char* argv[]) {
+static opcode_t *the_test(Parrot_Interp, opcode_t *, opcode_t *);
+
+int exit_value = 0;
+
+int main(int argc, char* argv[])
+{
+    Parrot_Interp interpreter = Parrot_new(NULL);
+    if (!interpreter) {
+        return 1;
+    }
+    Parrot_init(interpreter);
+
+    Parrot_run_native(interpreter, the_test);
+
+    Parrot_exit(exit_value);
+    return exit_value;
+}
+
+CODE
+
+c_output_is($main . <<'CODE', <<'OUTPUT', "data types");
+
+static opcode_t*
+the_test(Parrot_Interp interpreter, opcode_t *cur_op, opcode_t *start)
+{
     int x, i, j;
     char c;
     short t;
@@ -17,14 +40,14 @@
     List* list, *list2;
     PMC *p1, *p2;
 
-    Interp* interpreter = Parrot_new(NULL);
-    if (interpreter == NULL) return 1;
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     list = list_new(interpreter, enum_type_int);
     if (list == NULL) {
-	printf("list creation failed\n");
-	return 1;
+	PIO_eprintf(interpreter, "list creation failed\n");
+	exit_value = 1;
+	return NULL;
     }
 
     for (i = 0, x = 32; x < 43; x++, i++) {
@@ -33,7 +56,7 @@
 	if (i < 10)
 	    ;
 	else
-	    printf("The answer is %d.\n", j);
+	    PIO_eprintf(interpreter, "The answer is %d.\n", j);
     }
 
     /* test various data types */
@@ -44,7 +67,7 @@
     list_assign(interpreter, list, 2 ,(void*) 'c', enum_type_char);
     list_assign(interpreter, list, 3 ,(void*) 'd', enum_type_char);
     c = *(char*) list_get(interpreter, list, 1, enum_type_char);
-    printf("char %c\n",  c);
+    PIO_eprintf(interpreter, "char %c\n",  c);
 
     list = list_new(interpreter, enum_type_short);
 
@@ -52,14 +75,14 @@
     list_assign(interpreter, list, 21 ,(void*) -15, enum_type_short);
     list_assign(interpreter, list, 22 ,(void*) 99, enum_type_short);
     t = *(short*) list_get(interpreter, list, 21, enum_type_short);
-    printf("short %d\n",  t);
+    PIO_eprintf(interpreter, "short %d\n",  t);
 
     list = list_new(interpreter, enum_type_FLOATVAL);
 
     f = 1234.56;
     list_assign(interpreter, list, 20 ,(void*) &f, enum_type_FLOATVAL);
     f = *(FLOATVAL*) list_get(interpreter, list, 20, enum_type_FLOATVAL);
-    printf("num " FLOATVAL_FMT "\n",  f);
+    PIO_eprintf(interpreter, "num " FLOATVAL_FMT "\n",  f);
 
     s = string_make(interpreter, "Seems ok\n", 9, 0, 0,0);
 
@@ -72,10 +95,10 @@
 
     p2 = *(PMC**)list_shift(interpreter, list, enum_type_PMC);
     s = VTABLE_get_string(interpreter, p2);
-    printf("string %s", string_to_cstring(interpreter, s));
+    PIO_eprintf(interpreter, "string %s", string_to_cstring(interpreter, s));
 
     i = list_length(interpreter, list);
-    printf("len now %d\n", i);
+    PIO_eprintf(interpreter, "len now %d\n", i);
 
     s = string_make(interpreter, "list\n", 5, 0, 0,0);
     p1 = pmc_new(interpreter, enum_class_PerlString);
@@ -92,11 +115,11 @@
 
     p1 = *(PMC**) list_shift(interpreter, list, enum_type_PMC);
     s = VTABLE_get_string(interpreter, p1);
-    printf("string %s", string_to_cstring(interpreter, s));
+    PIO_eprintf(interpreter, "string %s", string_to_cstring(interpreter, s));
 
     p2 = *(PMC**) list_shift(interpreter, list2, enum_type_PMC);
     s = VTABLE_get_string(interpreter, p2);
-    printf("string %s", string_to_cstring(interpreter, s));
+    PIO_eprintf(interpreter, "string %s", string_to_cstring(interpreter, s));
 
     list = list_new(interpreter, enum_type_STRING);
     s = string_make(interpreter, "list\n", 5, 0, 0,0);
@@ -107,9 +130,9 @@
     s = string_make(interpreter, "list 2\n", 7, 0, 0,0);
     list_assign(interpreter, list2, 0, s, enum_type_STRING);
     s = *(STRING**) list_shift(interpreter, list, enum_type_STRING);
-    printf("string %s", string_to_cstring(interpreter, s));
+    PIO_eprintf(interpreter, "string %s", string_to_cstring(interpreter, s));
     s = *(STRING**) list_shift(interpreter, list2, enum_type_STRING);
-    printf("string %s", string_to_cstring(interpreter, s));
+    PIO_eprintf(interpreter, "string %s", string_to_cstring(interpreter, s));
 
     /* delete test */
     list = list_new(interpreter, enum_type_char);
@@ -120,7 +143,7 @@
     list_delete(interpreter, list, 1, 1);
     list_delete(interpreter, list, 1, 4);
     j = *(char*) list_get(interpreter, list, 1, enum_type_char);
-    printf("delete 1 %s\n", (j == 6+'a') ? "ok" : "nok");
+    PIO_eprintf(interpreter, "delete 1 %s\n", (j == 6+'a') ? "ok" : "nok");
 
     list = list_new(interpreter, enum_type_char);
     for (i = 0; i < 26; i++) {
@@ -129,7 +152,7 @@
     }
     list_delete(interpreter, list, 1, 20);
     j = *(char*) list_get(interpreter, list, 1, enum_type_char);
-    printf("delete 2 %s\n", (j == 21+'a') ? "ok" : "nok");
+    PIO_eprintf(interpreter, "delete 2 %s\n", (j == 21+'a') ? "ok" : "nok");
 
     list = list_new(interpreter, enum_type_char);
     for (i = 0; i < 26; i++) {
@@ -142,7 +165,7 @@
 	list_push(interpreter, list, (void*) c, enum_type_char);
     }
     j = *(char*) list_get(interpreter, list, 6, enum_type_char);
-    printf("delete 3 %s\n", (j == 'E' && list_length(interpreter, list) == 28)
+    PIO_eprintf(interpreter, "delete 3 %s\n", (j == 'E' && list_length(interpreter, list) == 28)
 	? "ok" : "nok");
 
     list = list_new(interpreter, enum_type_char);
@@ -155,27 +178,27 @@
     list_delete(interpreter, list, 5, 3000);
     list_delete(interpreter, list, 2, 996);
     j = *(char*) list_get(interpreter, list, -1, enum_type_char);
-    printf("delete 4 %s\n", (j == 'Z' && list_length(interpreter, list) == 5)
+    PIO_eprintf(interpreter, "delete 4 %s\n", (j == 'Z' && list_length(interpreter, list) == 5)
 	? "ok" : "nok");
 #if 0
     /* insert */
-    printf("\nnew list(0..5), shift\n");
+    PIO_eprintf(interpreter, "\nnew list(0..5), shift\n");
     list = list_new(interpreter, enum_type_char);
     for (i = 0; i < 6; i++)
 	list_push(interpreter, list, (void*) 'a'+i, enum_type_char);
     list_shift(interpreter, list, enum_type_char);
     list_dump(0, list, 0);
-    printf("insert(2, 5)\n");
+    PIO_eprintf(interpreter, "insert(2, 5)\n");
     list_insert(interpreter, list, 2, 5);
     list_dump(0, list, 0);
-    printf("insert(1, 1)\n");
+    PIO_eprintf(interpreter, "insert(1, 1)\n");
     list_insert(interpreter, list, 1, 1);
     list_dump(0, list, 0);
-    printf("list(1..) = 'A'..'F'\n");
+    PIO_eprintf(interpreter, "list(1..) = 'A'..'F'\n");
     for (i = 0; i < 6; i++)
         list_assign(interpreter, list, 1+i ,(void*)'A'+i, enum_type_char);
     list_dump(0, list, 0);
-    printf("4 x pop\n");
+    PIO_eprintf(interpreter, "4 x pop\n");
     for (i = 0; i < 4; i++)
         list_pop(interpreter, list, enum_type_char);
     list_dump(0, list, 0);
@@ -193,57 +216,58 @@
 	list_assign(interpreter, list, i, (void*) c, enum_type_char);
     }
     j = *(char*) list_get(interpreter, list, 0, enum_type_char);
-    printf("insert 2 %s\n", (j == 'A') ? "ok" : "nok");
+    PIO_eprintf(interpreter, "insert 2 %s\n", (j == 'A') ? "ok" : "nok");
 
 #if 0
-    printf("\nnew list(0..5)\n");
+    PIO_eprintf(interpreter, "\nnew list(0..5)\n");
     list = list_new(interpreter, enum_type_char);
     for (i = 0; i < 6; i++)
 	list_push(interpreter, list, (void*) 'a'+i, enum_type_char);
     list_dump(0, list, 0);
-    printf("insert(5, 3)\n");
+    PIO_eprintf(interpreter, "insert(5, 3)\n");
     list_insert(interpreter, list, 5, 3);
     list_dump(0, list, 0);
-    printf("list(5..9) = 'A'..'E'\n");
+    PIO_eprintf(interpreter, "list(5..9) = 'A'..'E'\n");
     for (i = 0; i < 5; i++)
         list_assign(interpreter, list, 5+i ,(void*)'A'+i, enum_type_char);
     list_dump(0, list, 0);
 
-    printf("\nnew list(0..5)\n");
+    PIO_eprintf(interpreter, "\nnew list(0..5)\n");
     list = list_new(interpreter, enum_type_char);
     for (i = 0; i < 6; i++)
 	list_push(interpreter, list, (void*) 'a'+i, enum_type_char);
     list_dump(0, list, 0);
-    printf("insert(6, 3)\n");
+    PIO_eprintf(interpreter, "insert(6, 3)\n");
     list_insert(interpreter, list, 6, 3);
     list_dump(0, list, 0);
-    printf("list(5..9) = 'A'..'E'\n");
+    PIO_eprintf(interpreter, "list(5..9) = 'A'..'E'\n");
     for (i = 0; i < 5; i++)
         list_assign(interpreter, list, 5+i ,(void*)'A'+i, enum_type_char);
     list_dump(0, list, 0);
-    printf("delete(0,1)\n");
+    PIO_eprintf(interpreter, "delete(0,1)\n");
     list_delete(interpreter, list, 0, 1);
     list_dump(0, list, 0);
 
-    printf("\nnew list(0..5)\n");
+    PIO_eprintf(interpreter, "\nnew list(0..5)\n");
     list = list_new(interpreter, enum_type_char);
-    printf("insert(0, 3)\n");
+    PIO_eprintf(interpreter, "insert(0, 3)\n");
     list_insert(interpreter, list, 0, 3);
     list_dump(0, list, 0);
 
-    printf("\nnew list(0..25)\n");
+    PIO_eprintf(interpreter, "\nnew list(0..25)\n");
     list = list_new(interpreter, enum_type_char);
     for (i = 0; i < 26; i++)
 	list_push(interpreter, list, (void*) 'a'+i, enum_type_char);
-    printf("set_length(4)\n");
+    PIO_eprintf(interpreter, "set_length(4)\n");
     list_set_length(interpreter, list, 4);
     list_dump(0, list, 0);
-    printf("set_length(-1)\n");
+    PIO_eprintf(interpreter, "set_length(-1)\n");
     list_set_length(interpreter, list, -1);
     list_dump(0, list, 0);
 #endif
-    printf("Done.\n");
-    return 0;
+    PIO_eprintf(interpreter, "Done.\n");
+
+    return NULL;
 }
 
 CODE
@@ -265,13 +289,11 @@
 Done.
 OUTPUT
 
-c_output_is(<<'CODE', <<'OUTPUT', "arbitrary sized");
-
-#include <stdio.h>
-#include "parrot/parrot.h"
-#include "parrot/embed.h"
+c_output_is($main . <<'CODE', <<'OUTPUT', "arbitrary sized");
 
-int main(int argc, char* argv[]) {
+static opcode_t*
+the_test(Parrot_Interp interpreter, opcode_t *cur_op, opcode_t *start)
+{
     int x;
     List* list;
     PMC *p;
@@ -279,9 +301,8 @@
     char buf[100];
     int i, j, ok;
 
-    Interp* interpreter = Parrot_new(NULL);
-    if (interpreter == NULL) return 1;
-    Parrot_init(interpreter);
+    UNUSED(cur_op);
+    UNUSED(start);
 
     p = pmc_new(interpreter, enum_class_Array);
 
@@ -303,7 +324,7 @@
     VTABLE_set_integer_keyed_int(interpreter, p, key, 3);
 
     list = list_new_init(interpreter, enum_type_sized, p);
-    printf("ok 1\n");
+    PIO_eprintf(interpreter, "ok 1\n");
 
     for (j = 0; j < 5; j++) {
 	for (i = 0; i < 100; i++)
@@ -320,11 +341,11 @@
 	    }
     }
     if (ok)
-	printf("ok 2\n");
+	PIO_eprintf(interpreter, "ok 2\n");
     else
-	printf("failed 2: i=%d j=%d\n", i, j);
-    Parrot_exit(0);
-    return 0;
+	PIO_eprintf(interpreter, "failed 2: i=%d j=%d\n", i, j);
+
+    return NULL;
 }
 CODE
 ok 1

Reply via email to