#include "../tdkpin_numeric.h" #include #include static uint8_t g_memory[0x10000]; static uintptr_t g_stack_base; static Win16FarPtr at(uint16_t offset) { return win16_make_far_pointer(0x7777, offset); } static void bind_memory(void) { memset(g_memory, 0, sizeof(g_memory)); win16_reset_segment_bindings(); win16_bind_segment(0x7777, g_memory, sizeof(g_memory), true); win16_bind_segment(0x8888, (void *)g_stack_base, 0x10000, true); } static void set_span(uint16_t offset, const char *text) { memcpy(&g_memory[offset], text, strlen(text)); } static void set_short(uint16_t offset, const char *text) { size_t length = strlen(text); g_memory[offset] = (uint8_t)length; memcpy(&g_memory[offset + 1], text, length); } int main(void) { uint8_t stack_marker; g_stack_base = (uintptr_t)&stack_marker - 0x8000; bind_memory(); BorlandFormattedSlice formatted = borland_format_i32_decimal_backward(at(100), -12345); assert(formatted.start == at(94) && formatted.length == 6); assert(memcmp(&g_memory[94], "-12345", 6) == 0); formatted = borland_format_u32_backward(at(120), 0x2af, 16); assert(formatted.start == at(117) && formatted.length == 3); assert(memcmp(&g_memory[117], "2AF", 3) == 0); borland_format_i32_short_string(255, at(140), 0, -12345); assert(g_memory[140] == 6); assert(memcmp(&g_memory[141], "-12345", 6) == 0); borland_format_i32_short_string(255, at(150), 9, 42); assert(g_memory[150] == 9); assert(memcmp(&g_memory[151], " 42", 9) == 0); borland_format_i32_short_string(5, at(170), 9, -12345); assert(g_memory[170] == 5); assert(memcmp(&g_memory[171], "-1234", 5) == 0); set_span(200, "-2147483648"); BorlandParseI32Result parsed = borland_parse_i32_span(at(200), 11); assert(!parsed.failed && parsed.remaining == 0 && parsed.value == INT32_MIN); set_span(220, "$FFFFFFFF"); parsed = borland_parse_i32_span(at(220), 9); assert(!parsed.failed && parsed.value == -1); set_span(240, "2147483648"); parsed = borland_parse_i32_span(at(240), 10); assert(parsed.failed); set_span(260, "12x"); parsed = borland_parse_i32_span(at(260), 3); assert(!parsed.failed && parsed.value == 12 && parsed.remaining == 1); set_short(300, " -42"); BorlandValI32Result value = borland_val_i32_short_string(at(300)); assert(value.value == -42 && value.error_position == 0); set_short(320, "12x"); value = borland_val_i32_short_string(at(320)); assert(value.value == 0 && value.error_position == 3); return 0; }