#include "head.c" const char test_strings[] = "\0" "abc\0" "def\0" "abc\0"; static pr_int_t string_globals_init[] = { 0, 1, 5, 9, // string pointers 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, }; static pr_int_t string_globals_expect[] = { 0, 1, 5, 9, // string pointers 0, 0, 8, 0, // "\0" "abc" "def" "abc" -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, -1, 0, -1, // eq 0, -1, -1, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, // lt 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, 0, -1, -1, 0, 0, 0, // gt 0, -1, -1, -1, 1, 0, -1, 0, 1, 1, 0, 1, 1, 0, -1, 0, // cmp -1, 0, 0, 0, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, 0, -1, // ge -1, -1, -1, -1, 0, -1, -1, -1, 0, 0, -1, 0, 0, -1, -1, -1, // le -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // not }; static dstatement_t string_statements[] = { { OP(0, 0, 0, OP_LEA_A), 24, 0, 6 }, // init k // for (i = 4; i-- > 0; ) { { OP(0, 0, 0, OP_LEA_A), 4, 0, 4 }, { OP(0, 0, 0, OP_IFA), 2, 0, 4 }, { OP(0, 0, 0, OP_BREAK), 0, 0, 0 }, { OP(0, 0, 0, OP_LEA_C), 4, -1, 4 }, // dec i { OP(0, 0, 0, OP_WITH), 4, 4, 1 }, // load i // for (j = 4; j-- > 0; ) { { OP(0, 0, 0, OP_LEA_A), 4, 0, 5 }, // init j { OP(0, 0, 0, OP_IFA), 2, 0, 5 }, { OP(0, 0, 0, OP_JUMP_A), -6, 0, 0 }, { OP(0, 0, 0, OP_LEA_C), 5, -1, 5 }, // dec j { OP(0, 0, 0, OP_WITH), 4, 5, 2 }, // load j { OP(0, 0, 0, OP_LEA_C), 6, -1, 6 }, // dec k { OP(0, 0, 0, OP_WITH), 4, 6, 3 }, // load k // i j k { OP(1, 2, 3, OP_EQ_S), 0, 0, 0 }, { OP(1, 2, 3, OP_LT_S), 0, 0, 16 }, { OP(1, 2, 3, OP_GT_S), 0, 0, 32 }, { OP(1, 2, 3, OP_CMP_S), 0, 0, 48 }, { OP(3, 0, 0, OP_LT_I_1), 48, 0, 7 }, // convert < 0, 0, > 0 to -1, 0, 1 { OP(3, 0, 3, OP_GT_I_1), 48, 0, 48 }, // ... { OP(0, 3, 3, OP_SUB_I_1), 7, 48, 48 }, // ... { OP(1, 2, 3, OP_GE_S), 0, 0, 64 }, { OP(1, 2, 3, OP_LE_S), 0, 0, 80 }, { OP(1, 2, 3, OP_NOT_S), 0, 0, 96 }, // } { OP(0, 0, 0, OP_JUMP_A), -16, 0, 0 }, // } }; test_t tests[] = { { .desc = "string", .extra_globals = 4 * 1, .num_globals = num_globals (string_globals_init, string_globals_expect), .num_statements = num_statements (string_statements), .statements = string_statements, .init_globals = string_globals_init, .expect_globals = string_globals_expect, .strings = test_strings, .string_size = sizeof (test_strings), }, }; #include "main.c"