@ -1,6 +1,16 @@ | |||||
#ifndef PSXC_UTIL_H_ | #ifndef PSXC_UTIL_H_ | ||||
#define PSXC_UTIL_H_ | #define PSXC_UTIL_H_ | ||||
#include <stddef.h> | |||||
#include <stdint.h> | |||||
typedef struct { | |||||
size_t size; | |||||
uint8_t data[]; | |||||
} byte_arr_t; | |||||
void fatal(const char *fmt, ...); | void fatal(const char *fmt, ...); | ||||
byte_arr_t *read_file(const char *filepath); | |||||
#endif | #endif |
@ -0,0 +1,3 @@ | |||||
!runner.c | |||||
test_* | |||||
!test_*.c |
@ -0,0 +1,13 @@ | |||||
#include "test.h" | |||||
#include <stdio.h> | |||||
int main(int argc, char *argv[]) { | |||||
printf("%s:\n", argv[0]); | |||||
for (size_t i = 0; i < NUM_TEST_CASES; ++i) { | |||||
printf(" * %s: ", TEST_CASES[i].name); | |||||
TEST_CASES[i].test(); | |||||
printf("OK!\n"); | |||||
} | |||||
return 0; | |||||
} |
@ -0,0 +1,15 @@ | |||||
#ifndef PSXC_TEST_H_ | |||||
#define PSXC_TEST_H_ | |||||
#include <stddef.h> | |||||
typedef struct { | |||||
const char *name; | |||||
void (*test)(void); | |||||
} test_case_t; | |||||
extern const test_case_t TEST_CASES[]; | |||||
extern const size_t NUM_TEST_CASES; | |||||
#endif |
@ -0,0 +1,36 @@ | |||||
#include "test.h" | |||||
#include "util.h" | |||||
#include <assert.h> | |||||
#include <stdio.h> | |||||
#include <stdlib.h> | |||||
#include <string.h> | |||||
#define ARR_SIZE 50 | |||||
void test_read_file(void) { | |||||
const char *filepath = tmpnam(NULL); | |||||
uint8_t arr[ARR_SIZE] = {0}; | |||||
for (size_t i = 0; i < sizeof arr; ++i) { | |||||
arr[i] = rand() % 256; | |||||
} | |||||
FILE *fp = fopen(filepath, "wb"); | |||||
assert(fp != NULL); | |||||
fwrite(&arr[0], 1, ARR_SIZE, fp); | |||||
fclose(fp); | |||||
byte_arr_t *barr = read_file(filepath); | |||||
assert(barr != NULL); | |||||
assert(barr->size == ARR_SIZE); | |||||
assert(memcmp(&arr[0], barr->data, ARR_SIZE) == 0); | |||||
} | |||||
const test_case_t TEST_CASES[] = { | |||||
{"can read simple file", test_read_file}, | |||||
}; | |||||
const size_t NUM_TEST_CASES = sizeof TEST_CASES / sizeof TEST_CASES[0]; |