diff --git a/test/ic3/def.in b/test/ic3/def.in
new file mode 100644
index 0000000..1319e8f
--- /dev/null
+++ b/test/ic3/def.in
@@ -0,0 +1,30 @@
+quote def zero = 0
+def zero = 0
+quote zero
+zero
+quote def one_two_three = [1, 2, 3]
+def one_two_three = [1, 2, 3]
+quote one_two_three
+one_two_three
+quote def double = fn (x) { x * 2 }
+def double = fn (x) { x * 2 }
+quote double
+double
+quote double(200)
+double(200)
+quote double(zero)
+double(zero)
+quote def double_tuple = macro (x) do
+ {x, x}
+end
+def double_tuple = macro (x) do
+ {x, x}
+end
+quote double_tuple
+double_tuple
+quote double_tuple(200)
+double_tuple(200)
+quote double_tuple(zero)
+double_tuple(zero)
+quote double_tuple(one_two_three)
+double_tuple(one_two_three)
diff --git a/test/ic3/def.out.expected b/test/ic3/def.out.expected
new file mode 100644
index 0000000..03a8d8a
--- /dev/null
+++ b/test/ic3/def.out.expected
@@ -0,0 +1,30 @@
+def zero = 0
+C3.zero
+zero
+0
+def one_two_three = [1, 2, 3]
+C3.one_two_three
+one_two_three
+[1, 2, 3]
+def double = fn (x) { x * 2 }
+C3.double
+double
+fn (x) { x * 2 }
+double(200)
+400
+double(zero)
+0
+def double_tuple = macro (x) do
+ {x, x}
+end
+C3.double_tuple
+double_tuple
+macro (x) do
+ {x, x}
+end
+double_tuple(200)
+{200, 200}
+double_tuple(zero)
+{0, 0}
+double_tuple(one_two_three)
+{[1, 2, 3], [1, 2, 3]}
diff --git a/test/ic3/def.ret.expected b/test/ic3/def.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/def.ret.expected
@@ -0,0 +1 @@
+0