#include <demi/types.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#ifdef _WIN32
#define KASSERT_SIZE(a, b) static_assert((a) == (b), "Size mismatch.")
#else
#define KASSERT_SIZE(a, b) ((void)sizeof(char[(((a) == (b)) ? 1 : -1)]))
#endif
#define SGASEG_BUF_SIZE 8
#define SGASEG_LEN_SIZE 4
#define DEMI_SGASEG_T_SIZE (SGASEG_BUF_SIZE + SGASEG_LEN_SIZE)
#define SGA_BUF_SIZE 8
#define SGA_NUMSEGS_SIZE 4
#define SGA_SEGS_SIZE (DEMI_SGASEG_T_SIZE * DEMI_SGARRAY_MAXSIZE)
#define SGA_ADDR_SIZE 16
#define DEMI_SGARRAY_T_SIZE (SGA_BUF_SIZE + SGA_NUMSEGS_SIZE + SGA_SEGS_SIZE + SGA_ADDR_SIZE)
#define QD_SIZE 4
#define SADDR_SIZE 16
#define DEMI_ACCEPT_RESULT_T_SIZE (QD_SIZE + SADDR_SIZE)
#define QR_OPCODE_SIZE 4
#define QR_QD_SIZE 4
#define QR_QT_SIZE 8
#define QR_RET_SIZE 8
#define QR_VALUE_SIZE (MAX(DEMI_ACCEPT_RESULT_T_SIZE, DEMI_SGARRAY_T_SIZE))
#define DEMI_QRESULT_T_SIZE (QR_OPCODE_SIZE + QR_QD_SIZE + QR_QT_SIZE + QR_RET_SIZE + QR_VALUE_SIZE)
#define DEMI_ARGS_ARGC_SIZE 4
#define DEMI_ARGS_ARGV_SIZE 8
#define DEMI_ARGS_CALLBACK_SIZE 8
#define DEMI_ARGS_SIZE (DEMI_ARGS_ARGC_SIZE + DEMI_ARGS_ARGV_SIZE + DEMI_ARGS_CALLBACK_SIZE)
static void test_size_sgaseg_t(void)
{
KASSERT_SIZE(sizeof(demi_sgaseg_t), DEMI_SGASEG_T_SIZE);
printf("sizeof(demi_sgaseg_t) = %zu\n", sizeof(demi_sgaseg_t));
}
static void test_size_sga_t(void)
{
KASSERT_SIZE(sizeof(demi_sgarray_t), DEMI_SGARRAY_T_SIZE);
printf("sizeof(demi_sgarray_t) = %zu\n", sizeof(demi_sgarray_t));
}
static void test_size_demi_accept_result_t(void)
{
KASSERT_SIZE(sizeof(demi_accept_result_t), DEMI_ACCEPT_RESULT_T_SIZE);
printf("sizeof(demi_accept_result_t) = %zu\n", sizeof(demi_accept_result_t));
}
static void test_size_demi_qresult_t(void)
{
KASSERT_SIZE(sizeof(demi_qresult_t), DEMI_QRESULT_T_SIZE);
printf("sizeof(demi_qresult_t) = %zu\n", sizeof(demi_qresult_t));
}
static void test_size_demi_args_t(void)
{
KASSERT_SIZE(sizeof(struct demi_args), DEMI_ARGS_SIZE);
printf("sizeof(demi_args_t) = %zu\n", sizeof(struct demi_args));
}
int main(int argc, char *const argv[])
{
((void)argc);
((void)argv);
test_size_sgaseg_t();
test_size_sga_t();
test_size_demi_accept_result_t();
test_size_demi_qresult_t();
test_size_demi_args_t();
return (EXIT_SUCCESS);
}