--- /dev/null
+// literals
+
+struct s1 {
+ int a;
+};
+
+struct s2 {
+ int a;
+ struct s3 {
+ int a[2];
+ } *b;
+};
+
+
+int a = (int) { 42 };
+int *b = &(int) { 42 };
+struct s1 *c = &(struct s1) { 42 };
+struct s2 *d = &(struct s2) { 42 , &(struct s3) { 42, 42 } };
+
+int main(void) {
+ expecti('a', 97);
+ expecti('A', 65);
+
+ //expecti('\0', 0);
+ expecti('\a', 7);
+ expecti('\b', 8);
+ expecti('\t', 9);
+ expecti('\n', 10);
+ expecti('\v', 11);
+ expecti('\f', 12);
+ expecti('\r', 13);
+
+ expecti('\7', 7);
+ expecti('\17', 15);
+ expecti('\235', -99);
+
+ expecti('\x0', 0);
+ expecti('\xff', -1);
+ expecti('\x012', 18);
+
+
+ expectstr("hello world", "hello world");
+ expecti("hello world"[5], ' ');
+ expecti("hello world"[11], 0); // null terminator
+
+ expectstr(
+ (char []) { 'h', 'e', 'l', 'l', 'o', 0 },
+ "hello"
+ );
+
+ expecti(L'c', 'c');
+ expectstr(L"butt", "butt");
+
+ // lexer could fail for 'L' so we need to ensure that it can be
+ // used as an identifier still.
+ int L = 1337;
+ expecti(L, 1337);
+ int L1 = L;
+ expecti(L1, L);
+
+ expecti(a, 42);
+ expecti(*b, 42);
+ expecti(c->a, 42);
+ expecti(d->a, 42);
+ expecti(d->b->a[0], 42);
+ expecti(d->b->a[1], 42);
+
+ // universal (unicode / host defined)
+ expecti(L'\u0024', '$');
+ expecti(L'\U00000024', '$');
+ expectstr("\u0024", "$");
+ expectstr("\U00000024", "$");
+
+ return 0;
+}