OILS / cpp / unicode_test.cc View on Github | oilshell.org

71 lines, 27 significant
1#include "mycpp/common.h"
2#include "vendor/greatest.h"
3
4TEST libc_demo() {
5 int x = strcmp("a", "b");
6 log("strcmp = %d", x);
7 x = strcmp("a", "a");
8 log("strcmp = %d", x);
9
10 // Functions to test with:
11 // - different LANG settings
12 // - musl libc vs. GNU libc, etc.
13 //
14 // glob() and fnmatch()
15 // regexec()
16 // strcoll()
17 // int toupper(), tolower(), toupper_l() can be passed locale
18 //
19 // See doc/unicode.md
20
21 // We could have pyext/libc.c wrappers for this, rather than using Python
22 // str.upper(). Maybe remove Str::{upper,lower}() from the Yaks language,
23 // since it depends on Unicode.
24
25 int c;
26 c = toupper((unsigned char)'a');
27 log("toupper %c", c);
28
29 c = tolower((unsigned char)c);
30 log("tolower %c", c);
31}
32
33TEST isspace_demo() {
34 int x;
35
36 // 0xa0 from
37 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#white_space
38 //
39 // Somehow it's false
40 //
41 // In Python we have
42 // >>> '\u00a0'.isspace()
43 // True
44
45 // U+00A0 is non-breaking space
46 // U+FEFF is zero-width no break space - this is true
47 int cases[] = {'\0', '\t', '\v', '\f', ' ', 'a', 0xa0, 0xfeff};
48 int n = sizeof(cases) / sizeof(cases[0]);
49
50 for (int i = 0; i < n; ++i) {
51 int x = isspace(cases[i]);
52 log("isspace %x %d", cases[i], x);
53 }
54 PASS();
55}
56
57GREATEST_MAIN_DEFS();
58
59int main(int argc, char **argv) {
60 // gHeap.Init();
61
62 GREATEST_MAIN_BEGIN();
63
64 RUN_TEST(libc_demo);
65 RUN_TEST(isspace_demo);
66
67 // gHeap.CleanProcessExit();
68
69 GREATEST_MAIN_END();
70 return 0;
71}