static char * test_mmap_file(void) { FILE * fp; int errno_save; char str1[80]; char str2[80]; memset(str1, '\0', sizeof(str1)); memset(str2, '\0', sizeof(str2)); fp = fopen("/root/README.markdown", "r"); pu_assert("fp not NULL", fp != NULL); errno = 0; data = mmap(NULL, 2 * sizeof(str1), PROT_READ, MAP_PRIVATE, fileno(fp), 0); errno_save = errno; pu_assert("a new memory region returned", data != MAP_FAILED); pu_assert_equal("No errno was set", errno_save, 0); memcpy(str1, data, sizeof(str1) - 1); fread(str2, sizeof(char), sizeof(str2) - 1, fp); pu_assert("Strings are equal", strcmp(str1, str2) == 0); return NULL; }
static char * test_arrinit() { int err = 0; int code_size; struct vm_state state; char input[] = "3\n"; /* Write input values to stdin */ uu_open_stdin_writer(); uu_write_stdin(input); uu_close_stdin_writer(); b91_loader_read_file(mem, memsize, &code_size, "asm/arrinit.b91"); pu_assert("Error while loading a b91 binary file.", err == 0); vm_init_state(&state, code_size, memsize); vm_run(&state, mem); pu_assert_equal("Correct r1 value", state.regs[1], 3); pu_assert_equal("Correct r2 value", state.regs[2], 2716); pu_assert_equal("Correct r3 value", state.regs[3], 2716); pu_assert_equal("Correct mem value at", mem[20], -875); pu_assert_equal("Correct mem value at", mem[25], 860); pu_assert_equal("Correct mem value at", mem[27], 1554); return 0; }
static char * test_mmap_anon(void) { errno = 0; data = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0); pu_assert("a new memory region returned", data != MAP_FAILED); pu_assert_equal("No errno was set", errno, 0); memset(data, 0xff, 200); pu_assert("memory is accessible", data[50] == 0xff); return NULL; }
static char * test_mmap_anon_huge(void) { const size_t size = 2097152; errno = 0; data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0); pu_assert("a new memory region returned", data != MAP_FAILED); pu_assert_equal("No errno was set", errno, 0); memset(data, 0xff, size); pu_assert("memory is accessible", data[50] == 0xff); return NULL; }
static char * test_mmap_anon_fixed(void) { #define ADDR ((void *)0xA0000000) static char msg[80]; int errno_save; errno = 0; data = mmap(ADDR, 4096, PROT_READ | PROT_WRITE, MAP_ANON | MAP_FIXED, -1, 0); errno_save = errno; pu_assert("a new memory region returned", data != MAP_FAILED); pu_assert_equal("No errno was set", errno_save, 0); sprintf(msg, "returned address equals %p", ADDR); pu_assert(msg, data == ADDR); memset(data, 0xff, 200); pu_assert("memory is accessible", data[50] == 0xff); return NULL; #undef ADDR }
static char * test_pow() { int err = 0; int code_size; struct vm_state state; char * input[] = {"2\n", "4\n"}; /* Write input values to stdin */ uu_open_stdin_writer(); uu_write_stdin(input[0]); uu_write_stdin(input[1]); uu_close_stdin_writer(); b91_loader_read_file(mem, memsize, &code_size, "asm/pow.b91"); pu_assert("Error while loading a b91 binary file.", err == 0); vm_init_state(&state, code_size, memsize); vm_run(&state, mem); pu_assert_equal("Result of 2^4 == 16", state.regs[1], 16); return 0; }