#pragma once

/*
 * Header file with infrastructure needed for kernel unit tests:
 *  - Assertion functions.
 *  - Test structures.
 */

#include <stdio.h>
#include <kmalloc.h>

/* Macros for assertions.
 * They depend on <stdbool.h> and printk() to be included in the source file.
 */
#define KT_ASSERT_M(message, test)                                               \
	do {                                                                         \
		if (!(test)) {                                                           \
			extern char *kern_test_msg;                                          \
			char prefix[] = "Assertion failed: ";                                \
			int msg_size = sizeof(prefix) + sizeof(message) - 1;                 \
			kern_test_msg = (char*) kmalloc(msg_size, 0);                        \
			snprintf(kern_test_msg, msg_size, "%s%s", prefix, message);          \
			return false;                                                        \
		}                                                                        \
	} while (0)

#define KT_ASSERT(test)                                                          \
	do {                                                                         \
		if (!(test)) {                                                           \
			return false;                                                        \
		}                                                                        \
	} while (0)


/* Postboot kernel tests: tests ran after boot in kernel mode. */

struct pb_kernel_test {
	char name[256]; // Name of the test function.
	bool (*func)(void); // Name of the test function, should be equal to 'name'.
	bool enabled; // Whether to run or not the test.
};

/* A macro for testing if another macro has been #defined or not.  Can be used
 * wherever you need a boolean defined.  Returns 0 or 1. */
#define is_defined(macro) is_defined_(macro)
#define is_defined_test_1 ,
#define is_defined_(value) is_defined__(is_defined_test_##value, value)
#define is_defined__(comma, value) is_defined___(comma value, 0)
#define is_defined___(_, v, ...) v

/* Macro for registering a postboot kernel test. */
#define PB_K_TEST_REG(name, config) \
	{"test_" #name, test_##name, is_defined(config)}

extern struct pb_kernel_test pb_kernel_tests[];
extern int num_pb_kernel_tests;
