forked from M-Labs/nac3
88 lines
2.3 KiB
C++
88 lines
2.3 KiB
C++
|
#pragma once
|
||
|
|
||
|
// Include this header for every test_*.cpp
|
||
|
|
||
|
#include <cstdint>
|
||
|
#include <cstdio>
|
||
|
#include <cstdlib>
|
||
|
|
||
|
#include "print.hpp"
|
||
|
|
||
|
// Some utils can be used here
|
||
|
#include "../irrt/utils.hpp"
|
||
|
|
||
|
void __begin_test(const char* function_name, const char* file, int line) {
|
||
|
printf("######### Running %s @ %s:%d\n", function_name, file, line);
|
||
|
}
|
||
|
|
||
|
#define BEGIN_TEST() __begin_test(__FUNCTION__, __FILE__, __LINE__)
|
||
|
|
||
|
void test_fail() {
|
||
|
printf("[!] Test failed. Exiting with status code 1.\n");
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
void debug_print_array(int len, const T* as) {
|
||
|
printf("[");
|
||
|
for (int i = 0; i < len; i++) {
|
||
|
if (i != 0) printf(", ");
|
||
|
print_value(as[i]);
|
||
|
}
|
||
|
printf("]");
|
||
|
}
|
||
|
|
||
|
void print_assertion_passed(const char* file, int line) {
|
||
|
printf("[*] Assertion passed on %s:%d\n", file, line);
|
||
|
}
|
||
|
|
||
|
void print_assertion_failed(const char* file, int line) {
|
||
|
printf("[!] Assertion failed on %s:%d\n", file, line);
|
||
|
}
|
||
|
|
||
|
void __assert_true(const char* file, int line, bool cond) {
|
||
|
if (cond) {
|
||
|
print_assertion_passed(file, line);
|
||
|
} else {
|
||
|
print_assertion_failed(file, line);
|
||
|
test_fail();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#define assert_true(cond) __assert_true(__FILE__, __LINE__, cond)
|
||
|
|
||
|
template <typename T>
|
||
|
void __assert_arrays_match(const char* file, int line, int len, const T* expected, const T* got) {
|
||
|
if (arrays_match(len, expected, got)) {
|
||
|
print_assertion_passed(file, line);
|
||
|
} else {
|
||
|
print_assertion_failed(file, line);
|
||
|
printf("Expect = ");
|
||
|
debug_print_array(len, expected);
|
||
|
printf("\n");
|
||
|
printf(" Got = ");
|
||
|
debug_print_array(len, got);
|
||
|
printf("\n");
|
||
|
test_fail();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#define assert_arrays_match(len, expected, got) __assert_arrays_match(__FILE__, __LINE__, len, expected, got)
|
||
|
|
||
|
template <typename T>
|
||
|
void __assert_values_match(const char* file, int line, T expected, T got) {
|
||
|
if (expected == got) {
|
||
|
print_assertion_passed(file, line);
|
||
|
} else {
|
||
|
print_assertion_failed(file, line);
|
||
|
printf("Expect = ");
|
||
|
print_value(expected);
|
||
|
printf("\n");
|
||
|
printf(" Got = ");
|
||
|
print_value(got);
|
||
|
printf("\n");
|
||
|
test_fail();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#define assert_values_match(expected, got) __assert_values_match(__FILE__, __LINE__, expected, got)
|