mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-25 06:42:27 +00:00
Add chibicc
This program popped up on Hacker News recently. It's the only modern compiler I've ever seen that doesn't have dependencies and is easily modified. So I added all of the missing GNU extensions I like to use which means it might be possible soon to build on non-Linux and have third party not vendor gcc binaries.
This commit is contained in:
parent
e44a0cf6f8
commit
8da931a7f6
298 changed files with 19493 additions and 11950 deletions
138
third_party/chibicc/test/unicode_test.c
vendored
Normal file
138
third_party/chibicc/test/unicode_test.c
vendored
Normal file
|
@ -0,0 +1,138 @@
|
|||
#include "third_party/chibicc/test/test.h"
|
||||
|
||||
/* TODO(jart): shl overflow in read_escaped_char */
|
||||
|
||||
#define STR(x) #x
|
||||
|
||||
typedef unsigned short char16_t;
|
||||
typedef unsigned int char32_t;
|
||||
typedef int wchar_t;
|
||||
|
||||
int π = 3;
|
||||
|
||||
int main() {
|
||||
ASSERT(4, sizeof(L'\0'));
|
||||
ASSERT(97, L'a');
|
||||
|
||||
ASSERT(0, strcmp("αβγ", "\u03B1\u03B2\u03B3"));
|
||||
ASSERT(0, strcmp("日本語", "\u65E5\u672C\u8A9E"));
|
||||
ASSERT(0, strcmp("日本語", "\U000065E5\U0000672C\U00008A9E"));
|
||||
ASSERT(0, strcmp("🌮", "\U0001F32E"));
|
||||
|
||||
ASSERT(-1, L'\xffffffff' >> 31);
|
||||
ASSERT(946, L'β');
|
||||
ASSERT(12354, L'あ');
|
||||
ASSERT(127843, L'🍣');
|
||||
|
||||
ASSERT(2, sizeof(u'\0'));
|
||||
ASSERT(1, u'\xffff' >> 15);
|
||||
ASSERT(97, u'a');
|
||||
ASSERT(946, u'β');
|
||||
ASSERT(12354, u'あ');
|
||||
ASSERT(62307, u'🍣');
|
||||
|
||||
ASSERT(0, strcmp(STR(u'a'), "u'a'"));
|
||||
|
||||
ASSERT(4, sizeof(U'\0'));
|
||||
ASSERT(1, U'\xffffffff' >> 31);
|
||||
ASSERT(97, U'a');
|
||||
ASSERT(946, U'β');
|
||||
ASSERT(12354, U'あ');
|
||||
ASSERT(127843, U'🍣');
|
||||
|
||||
ASSERT(0, strcmp(STR(U'a'), "U'a'"));
|
||||
|
||||
ASSERT(4, sizeof(u8"abc"));
|
||||
ASSERT(0, strcmp(u8"abc", "abc"));
|
||||
|
||||
ASSERT(0, strcmp(STR(u8"a"), "u8\"a\""));
|
||||
|
||||
ASSERT(2, sizeof(u""));
|
||||
ASSERT(10, sizeof(u"\xffzzz"));
|
||||
ASSERT(0, memcmp(u"", "\0\0", 2));
|
||||
ASSERT(0, memcmp(u"abc", "a\0b\0c\0\0\0", 8));
|
||||
ASSERT(0, memcmp(u"日本語", "\345e,g\236\212\0\0", 8));
|
||||
ASSERT(0, memcmp(u"🍣", "<\330c\337\0\0", 6));
|
||||
ASSERT(u'β', u"βb"[0]);
|
||||
ASSERT(u'b', u"βb"[1]);
|
||||
ASSERT(0, u"βb"[2]);
|
||||
|
||||
ASSERT(0, strcmp(STR(u"a"), "u\"a\""));
|
||||
|
||||
ASSERT(4, sizeof(U""));
|
||||
ASSERT(20, sizeof(U"\xffzzz"));
|
||||
ASSERT(0, memcmp(U"", "\0\0\0\0", 4));
|
||||
ASSERT(0, memcmp(U"abc", "a\0\0\0b\0\0\0c\0\0\0\0\0\0\0", 16));
|
||||
ASSERT(0, memcmp(U"日本語", "\345e\0\0,g\0\0\236\212\0\0\0\0\0\0", 16));
|
||||
ASSERT(0, memcmp(U"🍣", "c\363\001\0\0\0\0\0", 8));
|
||||
ASSERT(u'β', U"βb"[0]);
|
||||
ASSERT(u'b', U"βb"[1]);
|
||||
ASSERT(0, U"βb"[2]);
|
||||
ASSERT(1, U"\xffffffff"[0] >> 31);
|
||||
|
||||
ASSERT(0, strcmp(STR(U"a"), "U\"a\""));
|
||||
|
||||
ASSERT(4, sizeof(L""));
|
||||
ASSERT(20, sizeof(L"\xffzzz"));
|
||||
ASSERT(0, memcmp(L"", "\0\0\0\0", 4));
|
||||
ASSERT(0, memcmp(L"abc", "a\0\0\0b\0\0\0c\0\0\0\0\0\0\0", 16));
|
||||
ASSERT(0, memcmp(L"日本語", "\345e\0\0,g\0\0\236\212\0\0\0\0\0\0", 16));
|
||||
ASSERT(0, memcmp(L"🍣", "c\363\001\0\0\0\0\0", 8));
|
||||
ASSERT(u'β', L"βb"[0]);
|
||||
ASSERT(u'b', L"βb"[1]);
|
||||
ASSERT(0, L"βb"[2]);
|
||||
ASSERT(-1, L"\xffffffff"[0] >> 31);
|
||||
|
||||
ASSERT(0, strcmp(STR(L"a"), "L\"a\""));
|
||||
|
||||
ASSERT(u'α', ({
|
||||
char16_t x[] = u"αβ";
|
||||
x[0];
|
||||
}));
|
||||
ASSERT(u'β', ({
|
||||
char16_t x[] = u"αβ";
|
||||
x[1];
|
||||
}));
|
||||
ASSERT(6, ({
|
||||
char16_t x[] = u"αβ";
|
||||
sizeof(x);
|
||||
}));
|
||||
|
||||
ASSERT(U'🤔', ({
|
||||
char32_t x[] = U"🤔x";
|
||||
x[0];
|
||||
}));
|
||||
ASSERT(U'x', ({
|
||||
char32_t x[] = U"🤔x";
|
||||
x[1];
|
||||
}));
|
||||
ASSERT(12, ({
|
||||
char32_t x[] = U"🤔x";
|
||||
sizeof(x);
|
||||
}));
|
||||
|
||||
ASSERT(L'🤔', ({
|
||||
wchar_t x[] = L"🤔x";
|
||||
x[0];
|
||||
}));
|
||||
ASSERT(L'x', ({
|
||||
wchar_t x[] = L"🤔x";
|
||||
x[1];
|
||||
}));
|
||||
ASSERT(12, ({
|
||||
wchar_t x[] = L"🤔x";
|
||||
sizeof(x);
|
||||
}));
|
||||
|
||||
ASSERT(3, π);
|
||||
ASSERT(3, ({
|
||||
int あβ0¾ = 3;
|
||||
あβ0¾;
|
||||
}));
|
||||
ASSERT(5, ({
|
||||
int $$$ = 5;
|
||||
$$$;
|
||||
}));
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue