#include "ptlisp-test.h" static Pointer STANDARD_OUTPUT_STREAM; static char buffer[255]; START_TEST(print_fn_test) { Pointer list = LIST(number(1), number(2), number(69.420)); Pointer result = print_fn(LIST(list, STANDARD_OUTPUT_STREAM), NIL); ck_assert_str_eq(buffer, "\n(1 2 69.42) "); ck_assert_uint_eq(list, result); rewind(STREAM(STANDARD_OUTPUT_STREAM)); list = LIST(number(1), number(2), LIST(number(3), number(4))); result = print_fn(LIST(list, STANDARD_OUTPUT_STREAM), NIL); ck_assert_str_eq(buffer, "\n(1 2 (3 4)) "); ck_assert_uint_eq(list, result); rewind(STREAM(STANDARD_OUTPUT_STREAM)); Pointer tbl = table(4); Pointer a = symbol("a", sizeof("a")); Pointer b = symbol("b", sizeof("b")); Pointer c = symbol("c", sizeof("c")); Pointer d = symbol("d", sizeof("d")); tbl = table_set(tbl, a, number(1)); tbl = table_set(tbl, b, number(2)); tbl = table_set(tbl, c, number(3)); tbl = table_set(tbl, d, number(4)); result = print_fn(LIST(tbl, STANDARD_OUTPUT_STREAM), NIL); ck_assert_str_eq(buffer, "\n{c: 3, a: 1, d: 4, b: 2} "); rewind(STREAM(STANDARD_OUTPUT_STREAM)); result = print_fn(LIST(character('a'), STANDARD_OUTPUT_STREAM), NIL); fprintf(STREAM(STANDARD_OUTPUT_STREAM), "%c", '\0'); fflush(STREAM(STANDARD_OUTPUT_STREAM)); ck_assert_str_eq(buffer, "\n\\a "); rewind(STREAM(STANDARD_OUTPUT_STREAM)); } END_TEST static void setup(void) { memory_init(16); symbol_init(); reader_init(); environment_init(); STANDARD_OUTPUT_STREAM = stream(fmemopen(buffer, sizeof(buffer), "w+")); environment_set(NIL, STANDARD_OUTPUT, STANDARD_OUTPUT_STREAM); } static void teardown(void) { fclose(STREAM(STANDARD_OUTPUT_STREAM)); memory_free(); } Suite* make_printer_test_suite(void) { Suite *s1 = suite_create("Printer"); TCase *tc1_1 = tcase_create("Printer"); suite_add_tcase(s1, tc1_1); tcase_add_checked_fixture(tc1_1, setup, teardown); tcase_add_test(tc1_1, print_fn_test); return s1; }