summaryrefslogtreecommitdiff
path: root/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test.c')
-rw-r--r--test.c505
1 files changed, 280 insertions, 225 deletions
diff --git a/test.c b/test.c
index 3f65afc..b638ded 100644
--- a/test.c
+++ b/test.c
@@ -1,5 +1,4 @@
# include <inttypes.h>
-# include <setjmp.h>
# include <stdarg.h>
# include <stdint.h>
# include <stdio.h>
@@ -11,6 +10,280 @@
# include <u8c/main.h>
# include <u8c/u32.h>
# include <u8c/u8.h>
+static void errhandl(enum u8c_errtyp errtyp);
+static void test( int n);
+static void testmsg( char const * fmt,...);
+static void testmsgdone( void);
+static void errhandl(enum u8c_errtyp errtyp) {
+ printf(":: Error handler called with type %d.\n",(int)errtyp);
+}
+static void test(int n) {
+ switch(n) {
+ case 0x0:
+ testmsg("(0) Error messages");
+ {
+ char32_t const * err = NULL;
+ u8c_geterr(NULL,&err);
+ printf("default error message: ");
+ u8c_println(stdout,err);
+ u8c_seterr(U"Gluchwein!",u8c_errtyp_deferr);
+ u8c_geterr(NULL,&err);
+ printf("set error message: ");
+ u8c_println(stdout,err);
+ u8c_u32free(&err);
+ }
+ testmsgdone();
+ break;
+ case 0x1:
+ testmsg("(1) UTF-8 encoding/decoding");
+ {
+ char32_t const * msg0 = U"¢,ह,𐍈,€,↊,👋";
+ unsigned char const * msg1 = NULL;
+ u8c_u8enc(NULL,&msg1,msg0);
+ msg0 = NULL;
+ printf("Encoded: %s\n",msg1);
+ u8c_u8dec(NULL,&msg0,msg1);
+ u8c_u8enc(NULL,&msg1,msg0);
+ printf("Encoded -> Decoded -> Encoded: %s\n",msg1);
+ u8c_u32free(&msg0);
+ u8c_u8free(&msg1);
+ }
+ testmsgdone();
+ break;
+ case 0x2:
+ testmsg("Printing (u8c_print)");
+ {
+ u8c_print(stdout,U"Hello");
+ u8c_print(stdout,U" ðere!");
+ }
+ testmsgdone();
+ break;
+ case 0x3:
+ testmsg("(3) Printing (u8c_println)");
+ {
+ u8c_println(stdout,U"Hello");
+ u8c_println(stdout,U" ðere!");
+ }
+ testmsgdone();
+ break;
+ case 0x4:
+ testmsg("(4) Text formatting");
+ {
+ u8c_println(stdout,U"The \uFFFCnumber\uFFFC is \uFFFC.",u8c_fmttyp_fgcol,u8c_col_mint,u8c_fmttyp_fgcol0,u8c_fmttyp_int,(int_least64_t){-0x10});
+ }
+ testmsgdone();
+ break;
+ case 0x5:
+ testmsg("(5) Colour text");
+ {
+ u8c_println(stdout,U"\uFFFCred\uFFFCorange\uFFFCyellow\uFFFCchartreuse\uFFFCgreen\uFFFCmint\uFFFCcyan\uFFFCazure\uFFFCblue\uFFFCviolet\uFFFCmagenta\uFFFCrose\uFFFC",u8c_fmttyp_fgcol,u8c_col_red,u8c_fmttyp_fgcol,u8c_col_orange,u8c_fmttyp_fgcol,u8c_col_yellow,u8c_fmttyp_fgcol,u8c_col_chartreuse,u8c_fmttyp_fgcol,u8c_col_green,u8c_fmttyp_fgcol,u8c_col_mint,u8c_fmttyp_fgcol,u8c_col_cyan,u8c_fmttyp_fgcol,u8c_col_azure,u8c_fmttyp_fgcol,u8c_col_blue,u8c_fmttyp_fgcol,u8c_col_violet,u8c_fmttyp_fgcol,u8c_col_magenta,u8c_fmttyp_fgcol,u8c_col_rose,u8c_fmttyp_fgcol0);
+ }
+ testmsgdone();
+ break;
+ case 0x6:
+ testmsg("(6) Combining characters");
+ {
+ for(register uint_least32_t n = UINT32_C(0x300);n <= UINT32_C(0x36F);n += UINT32_C(0x1)) {
+ u8c_print(stdout,(uint_least32_t[]){UINT32_C(0x61),n,UINT32_C(0x20),UINT32_C(0x0),});
+ fflush(stdout);
+ }
+ u8c_print(stdout,U"\n");
+ }
+ testmsgdone();
+ break;
+ case 0x7:
+ testmsg("(7) String comparison");
+ {
+ char32_t const * str0 = U"Hello";
+ char32_t const * str1 = U"Hello";
+ char32_t const * str2 = U"Goodbye";
+ printf("str0: ");
+ u8c_println(stdout,str0);
+ printf("str1: ");
+ u8c_println(stdout,str1);
+ printf("str2: ");
+ u8c_println(stdout,str2);
+ uint_least8_t res = UINT8_C(0x0);
+ u8c_u32cmp(&res,str0,str1);
+ printf("str0,str1: %" PRIXLEAST8 ".\n",res);
+ u8c_u32cmp(&res,str1,str2);
+ printf("str0,str2: %" PRIXLEAST8 ".\n",res);
+ u8c_u32cmp(&res,str2,str1);
+ printf("str2,str1: %" PRIXLEAST8 ".\n",res);
+ }
+ testmsgdone();
+ break;
+ case 0x8:
+ testmsg("(8) u8c_isalnum");
+ {
+ for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
+ uint_least8_t res = UINT8_C(0x0);
+ u8c_isalnum(&res,n);
+ if(res) {
+ u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
+ }
+ }
+ u8c_println(stdout,U"");
+ }
+ testmsgdone();
+ break;
+ case 0x9:
+ testmsg("(9) u8c_isalpha");
+ {
+ for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
+ uint_least8_t res = UINT8_C(0x0);
+ u8c_isalpha(&res,n);
+ if(res) {
+ u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
+ }
+ }
+ u8c_println(stdout,U"");
+ }
+ testmsgdone();
+ break;
+ case 0xA:
+ testmsg("(10) u8c_isdigit");
+ {
+ for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
+ uint_least8_t res = UINT8_C(0x0);
+ u8c_isdigit(&res,n);
+ if(res) {
+ u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
+ }
+ }
+ u8c_println(stdout,U"");
+ }
+ testmsgdone();
+ break;
+ case 0xB:
+ testmsg("(11) u8c_ispunct"); /* This test appears broken on some incomplete fonts, altough it is not. */
+ {
+ for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
+ uint_least8_t res = UINT8_C(0x0);
+ u8c_ispunct(&res,n);
+ if(res) {
+ u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
+ }
+ }
+ u8c_println(stdout,U"");
+ }
+ testmsgdone();
+ break;
+ case 0xC:
+ testmsg("(12) UTF-32 string literals");
+ {
+ u8c_println(stdout,U"Can you see ðis?");
+ }
+ testmsgdone();
+ break;
+ case 0xD:
+ testmsg("(13) string concatenation");
+ {
+ char32_t const * str0 = U"Free_as_in";
+ char32_t const * str1 = U"_freedom!";
+ char32_t const * str2 = NULL;
+ u8c_u32cat(NULL,&str2,str0,str1);
+ printf("string #0: ");
+ u8c_println(stdout,str0);
+ printf("string #1: ");
+ u8c_println(stdout,str1);
+ printf("string #2: ");
+ u8c_println(stdout,str2);
+ u8c_u32free(&str2);
+
+ }
+ testmsgdone();
+ break;
+ case 0xE:
+ testmsg("(14) sub-strings");
+ {
+ char32_t const * str0 = U"I_wish_to_suck_big_duck.";
+ char32_t const * str1 = NULL;
+ u8c_u32substr(&str1,SIZE_C(0x0),SIZE_C(0xE),str0);
+ char32_t const * str2 = NULL;
+ u8c_u32substr(&str2,SIZE_C(0xF),SIZE_C(0x0),str0);
+ printf("string #0: ");
+ u8c_println(stdout,str0);
+ printf("string #1: ");
+ u8c_println(stdout,str1);
+ printf("string #2: ");
+ u8c_println(stdout,str2);
+ u8c_u32free(&str1);
+ u8c_u32free(&str2);
+ }
+ testmsgdone();
+ break;
+ case 0xF:
+ testmsg("(15) u8c_isxdigit");
+ {
+ for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
+ uint_least8_t res = UINT8_C(0x0);
+ u8c_isxdigit(&res,n);
+ if(res) {
+ u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
+ }
+ }
+ u8c_println(stdout,(uint_least32_t[]){UINT32_C(0x0),});
+ }
+ testmsgdone();
+ break;
+ case 0x10:
+ testmsg("(16) Printing (u8c_dbgprint)");
+ {
+ u8c_dbgprint(U"Hello");
+ u8c_dbgprint(U" ðere!");
+ }
+ testmsgdone();
+ break;
+ case 0x11:
+ testmsg("(17) u8c_u32fndchr");
+ {
+ char32_t const * str = U"Proprietary as in Micro$oft.";
+ size_t pos0 = SIZE_C(0x0);
+ size_t pos1 = SIZE_C(0x0);
+ u8c_u32fndchr(&pos0,str,U'M');
+ u8c_u32fndchr(&pos1,str,U'ŋ');
+ printf("string: ");
+ u8c_println(stdout,str);
+ printf("Position of 'M': %zu\n",pos0);
+ printf("Position of 'ŋ': %zu\n",pos1);
+ }
+ testmsgdone();
+ break;
+ case 0x12:
+ testmsg("(18) u8c_u32fndpat");
+ {
+ char32_t const * str = U"Proprietary as in Micro$oft.";
+ size_t pos0 = SIZE_C(0x0);
+ size_t pos1 = SIZE_C(0x0);
+ u8c_u32fndpat(&pos0,str,U"as in");
+ u8c_u32fndpat(&pos1,str,U"forever");
+ printf("string: ");
+ u8c_println(stdout,str);
+ printf("Position of \"as in\": %zu\n",pos0);
+ printf("Position of \"forever\": %zu\n",pos1);
+ }
+ testmsgdone();
+ break;
+ case 0x13:
+ testmsg("(19) string insertion");
+ {
+ char32_t const * str0 = U"There_is_I_love.";
+ char32_t const * str1 = U"just_somebody_that_";
+ char32_t const * str2 = NULL;
+ u8c_u32ins(NULL,&str2,SIZE_C(0x9),str0,str1);
+ printf("String #0: ");
+ u8c_println(stdout,str0);
+ printf("String #1: ");
+ u8c_println(stdout,str1);
+ printf("String #2: ");
+ u8c_println(stdout,str2);
+ u8c_u32free(&str2);
+ }
+ testmsgdone();
+ break;
+ }
+}
static void testmsg(char const * fmt,...) {
va_list args;
va_start(args,fmt);
@@ -24,10 +297,7 @@ static void testmsgdone() {
/* printf("\n+->\n| \x1b[38:2::61:225:169mDone\x1b[0m!\n+->\n"); */
printf("\n+->\n| \x1b[38;2;61;225;169mDone\x1b[0m!\n+->\n");
}
-static void errhandl(enum u8c_errtyp errtyp) {
- printf(":: Error handler called with type %d.\n",(int)errtyp);
-}
-int main(void) {
+int main(int const argc,char const * * argv) {
if(u8c_init()) {
printf("Unable to initialise u8c!\n");
exit(EXIT_FAILURE);
@@ -37,229 +307,14 @@ int main(void) {
printf("u8c version: %" PRIXLEAST64 ".\n",u8c_ver);
printf("Debug build: %" PRIXLEAST8 ".\n",u8c_dbg);
printf("Thread safe: %" PRIXLEAST8 ".\n",u8c_thrdsafe);
- testmsg("Error messages");
- {
- char32_t const * err = NULL;
- u8c_geterr(NULL,&err);
- printf("default error message: ");
- u8c_println(stdout,err);
- u8c_seterr(U"Gluchwein!",u8c_errtyp_deferr);
- u8c_geterr(NULL,&err);
- printf("set error message: ");
- u8c_println(stdout,err);
- u8c_u32free(&err);
- }
- testmsgdone();
- testmsg("UTF-8 encoding/decoding");
- {
- char32_t const * msg0 = U"¢,ह,𐍈,€,↊,👋";
- unsigned char const * msg1 = NULL;
- u8c_u8enc(NULL,&msg1,msg0);
- msg0 = NULL;
- printf("Encoded: %s\n",msg1);
- u8c_u8dec(NULL,&msg0,msg1);
- u8c_u8enc(NULL,&msg1,msg0);
- printf("Encoded -> Decoded -> Encoded: %s\n",msg1);
- u8c_u32free(&msg0);
- u8c_u8free(&msg1);
- }
- testmsgdone();
- testmsg("Printing (u8c_print)");
- {
- u8c_print(stdout,U"Hello");
- u8c_print(stdout,U" ðere!");
- }
- testmsgdone();
- testmsg("Printing (u8c_println)");
- {
- u8c_println(stdout,U"Hello");
- u8c_println(stdout,U" ðere!");
- }
- testmsgdone();
- testmsg("Text formatting");
- {
- u8c_println(stdout,U"The \uFFFCnumber\uFFFC is \uFFFC.",u8c_fmttyp_fgcol,u8c_col_mint,u8c_fmttyp_fgcol0,u8c_fmttyp_int,(int_least64_t){-0x10});
- }
- testmsgdone();
- testmsg("Colour text");
- {
- u8c_println(stdout,U"\uFFFCred\uFFFCorange\uFFFCyellow\uFFFCchartreuse\uFFFCgreen\uFFFCmint\uFFFCcyan\uFFFCazure\uFFFCblue\uFFFCviolet\uFFFCmagenta\uFFFCrose\uFFFC",u8c_fmttyp_fgcol,u8c_col_red,u8c_fmttyp_fgcol,u8c_col_orange,u8c_fmttyp_fgcol,u8c_col_yellow,u8c_fmttyp_fgcol,u8c_col_chartreuse,u8c_fmttyp_fgcol,u8c_col_green,u8c_fmttyp_fgcol,u8c_col_mint,u8c_fmttyp_fgcol,u8c_col_cyan,u8c_fmttyp_fgcol,u8c_col_azure,u8c_fmttyp_fgcol,u8c_col_blue,u8c_fmttyp_fgcol,u8c_col_violet,u8c_fmttyp_fgcol,u8c_col_magenta,u8c_fmttyp_fgcol,u8c_col_rose,u8c_fmttyp_fgcol0);
- }
- testmsgdone();
- testmsg("Combining characters");
- {
- for(register uint_least32_t n = UINT32_C(0x300);n <= UINT32_C(0x36F);n += UINT32_C(0x1)) {
- u8c_print(stdout,(uint_least32_t[]){UINT32_C(0x61),n,UINT32_C(0x20),UINT32_C(0x0),});
- fflush(stdout);
- }
- u8c_print(stdout,U"\n");
- }
- testmsgdone();
- testmsg("String comparison");
- {
- char32_t const * str0 = U"Hello";
- char32_t const * str1 = U"Hello";
- char32_t const * str2 = U"Goodbye";
- printf("str0: ");
- u8c_println(stdout,str0);
- printf("str1: ");
- u8c_println(stdout,str1);
- printf("str2: ");
- u8c_println(stdout,str2);
- uint_least8_t res = UINT8_C(0x0);
- u8c_u32cmp(&res,str0,str1);
- printf("str0,str1: %" PRIXLEAST8 ".\n",res);
- u8c_u32cmp(&res,str1,str2);
- printf("str0,str2: %" PRIXLEAST8 ".\n",res);
- u8c_u32cmp(&res,str2,str1);
- printf("str2,str1: %" PRIXLEAST8 ".\n",res);
+ if(argc == 0x2) {
+ test(atoi(argv[SIZE_C(0x1)]));
}
- testmsgdone();
- testmsg("u8c_isalnum");
- {
- for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
- uint_least8_t res = UINT8_C(0x0);
- u8c_isalnum(&res,n);
- if(res) {
- u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
- }
+ else {
+ for(int n = 0x0;n <= 0x13;n += 0x1) {
+ test(n);
}
- u8c_println(stdout,U"");
- }
- testmsgdone();
- testmsg("u8c_isalpha");
- {
- for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
- uint_least8_t res = UINT8_C(0x0);
- u8c_isalpha(&res,n);
- if(res) {
- u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
- }
- }
- u8c_println(stdout,U"");
- }
- testmsgdone();
- testmsg("u8c_isdigit");
- {
- for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
- uint_least8_t res = UINT8_C(0x0);
- u8c_isdigit(&res,n);
- if(res) {
- u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
- }
- }
- u8c_println(stdout,U"");
- }
- testmsgdone();
- testmsg("u8c_ispunct"); /* This test appears broken on some incomplete fonts, altough it is not. */
- {
- for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
- uint_least8_t res = UINT8_C(0x0);
- u8c_ispunct(&res,n);
- if(res) {
- u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
- }
- }
- u8c_println(stdout,U"");
- }
- testmsgdone();
- testmsg("UTF-32 string literals");
- {
- u8c_println(stdout,U"Can you see ðis?");
- }
- testmsgdone();
- testmsg("string concatenation");
- {
- char32_t const * str0 = U"Free_as_in";
- char32_t const * str1 = U"_freedom!";
- char32_t const * str2 = NULL;
- u8c_u32cat(NULL,&str2,str0,str1);
- printf("string #0: ");
- u8c_println(stdout,str0);
- printf("string #1: ");
- u8c_println(stdout,str1);
- printf("string #2: ");
- u8c_println(stdout,str2);
- u8c_u32free(&str2);
-
- }
- testmsgdone();
- testmsg("sub-strings");
- {
- char32_t const * str0 = U"I_wish_to_suck_big_duck.";
- char32_t const * str1 = NULL;
- u8c_u32substr(&str1,SIZE_C(0x0),SIZE_C(0xE),str0);
- char32_t const * str2 = NULL;
- u8c_u32substr(&str2,SIZE_C(0xF),SIZE_C(0x0),str0);
- printf("string #0: ");
- u8c_println(stdout,str0);
- printf("string #1: ");
- u8c_println(stdout,str1);
- printf("string #2: ");
- u8c_println(stdout,str2);
- u8c_u32free(&str1);
- u8c_u32free(&str2);
- }
- testmsgdone();
- testmsg("u8c_isxdigit");
- {
- for(register uint_least32_t n = UINT32_C(0x1);n <= UINT32_C(0x10FFFF);n += UINT32_C(0x1)) {
- uint_least8_t res = UINT8_C(0x0);
- u8c_isxdigit(&res,n);
- if(res) {
- u8c_print(stdout,(uint_least32_t[]){n,UINT32_C(0x20),UINT32_C(0x0),});
- }
- }
- u8c_println(stdout,(uint_least32_t[]){UINT32_C(0x0),});
- }
- testmsgdone();
- testmsg("Printing (u8c_dbgprint)");
- {
- u8c_dbgprint(U"Hello");
- u8c_dbgprint(U" ðere!");
- }
- testmsgdone();
- testmsg("u8c_u32fndchr");
- {
- char32_t const * str = U"Proprietary as in Micro$oft.";
- size_t pos0 = SIZE_C(0x0);
- size_t pos1 = SIZE_C(0x0);
- u8c_u32fndchr(&pos0,str,U'M');
- u8c_u32fndchr(&pos1,str,U'ŋ');
- printf("string: ");
- u8c_println(stdout,str);
- printf("Position of 'M': %zu\n",pos0);
- printf("Position of 'ŋ': %zu\n",pos1);
- }
- testmsgdone();
- testmsg("u8c_u32fndpat");
- {
- char32_t const * str = U"Proprietary as in Micro$oft.";
- size_t pos0 = SIZE_C(0x0);
- size_t pos1 = SIZE_C(0x0);
- u8c_u32fndpat(&pos0,str,U"as in");
- u8c_u32fndpat(&pos1,str,U"forever");
- printf("string: ");
- u8c_println(stdout,str);
- printf("Position of \"as in\": %zu\n",pos0);
- printf("Position of \"forever\": %zu\n",pos1);
- }
- testmsgdone();
- testmsg("string insertion");
- {
- char32_t const * str0 = U"There_is_I_love.";
- char32_t const * str1 = U"just_somebody_that_";
- char32_t const * str2 = NULL;
- u8c_u32ins(NULL,&str2,SIZE_C(0x9),str0,str1);
- printf("String #0: ");
- u8c_println(stdout,str0);
- printf("String #1: ");
- u8c_println(stdout,str1);
- printf("String #2: ");
- u8c_println(stdout,str2);
- u8c_u32free(&str2);
}
- testmsgdone();
u8c_end();
exit(EXIT_SUCCESS);
}