From 169165ac5abd2275ff5646b1324ac69ef3ddf921 Mon Sep 17 00:00:00 2001 From: timerix Date: Wed, 18 Jan 2023 03:49:44 +0600 Subject: [PATCH] test_kprint --- src/base/std.h | 14 ++++++++--- src/kprint/kprint.c | 9 +++++++ tests/main.cpp | 18 -------------- tests/test_kprint.c | 50 ++++++++++++++++++++++++++++++++++++++ tests/test_kprint_colors.c | 12 ++++----- tests/test_type_system.c | 9 +++++++ tests/tests.h | 20 ++++++++++++++- 7 files changed, 103 insertions(+), 29 deletions(-) create mode 100644 tests/test_kprint.c create mode 100644 tests/test_type_system.c diff --git a/src/base/std.h b/src/base/std.h index 81ebc95..0dc29bc 100644 --- a/src/base/std.h +++ b/src/base/std.h @@ -72,15 +72,23 @@ typedef uint8 bool; #define __count_args(\ - a0, a1, a2, a3, a4, a5, a6, a7,\ + a0, a1, a2, a3, a4, a5, a6, a7 ,\ a8, a9, a10,a11,a12,a13,a14,a15,\ a16,a17,a18,a19,a20,a21,a22,a23,\ a24,a25,a26,a27,a28,a29,a30,a31,\ - a32,...) a32 -// Macro for counting variadic arguments + a32,a33,a34,a35,a36,a37,a38,a39,\ + a40,a41,a42,a43,a44,a45,a46,a47,\ + a48,a49,a50,a51,a52,a53,a54,a55,\ + a56,a57,a58,a59,a60,a61,a62,a63,\ + a64,...) a64 +// Macro for counting variadic arguments (max 64) // (see usage in kprint.h) #define count_args(ARGS...) __count_args(\ ARGS,\ + 64,63,62,61,60,59,58,57,\ + 56,55,54,53,52,51,50,49,\ + 48,47,46,45,44,43,42,41,\ + 40,39,38,37,36,35,34,33,\ 32,31,30,29,28,27,26,25,\ 24,23,22,21,20,19,18,17,\ 16,15,14,13,12,11,10,9,\ diff --git a/src/kprint/kprint.c b/src/kprint/kprint.c index 091fe8a..2fda00f 100644 --- a/src/kprint/kprint.c +++ b/src/kprint/kprint.c @@ -34,7 +34,14 @@ Maybe __next_toString(kp_fmt f, __kp_value_union* object){ return SUCCESS(UniHeapPtr(char, typeDesc.toString(object, f))); } +Maybe check_argsN(uint8 n){ + if(n%2 != 0) safethrow("kprint recieved non-even number of arguments",;); + if(n > 32) safethrow("kprint recieved >32 number of arguments",;); + return MaybeNull; +} + Maybe __ksprint(uint8 n, kp_fmt* formats, __kp_value_union* objects){ + try(check_argsN(n), _,;); n/=2; StringBuilder* strb=StringBuilder_create(); for(uint8 i=0; i