summaryrefslogtreecommitdiffstats
path: root/tests/preprocessor
diff options
context:
space:
mode:
Diffstat (limited to 'tests/preprocessor')
-rw-r--r--tests/preprocessor/define-function-like.spire19
-rw-r--r--tests/preprocessor/define-function-like.spire.expected7
-rw-r--r--tests/preprocessor/define-simple.spire14
-rw-r--r--tests/preprocessor/if.spire15
-rw-r--r--tests/preprocessor/ifdef.spire16
-rw-r--r--tests/preprocessor/include-a.spireh3
-rw-r--r--tests/preprocessor/include.spire8
7 files changed, 82 insertions, 0 deletions
diff --git a/tests/preprocessor/define-function-like.spire b/tests/preprocessor/define-function-like.spire
new file mode 100644
index 000000000..f1dd9caa4
--- /dev/null
+++ b/tests/preprocessor/define-function-like.spire
@@ -0,0 +1,19 @@
+//TEST:SIMPLE:
+// support for function-like macros
+
+#define FOO(x) 1.0 + x
+
+float foo(float y) { return FOO(y) * 2.0; }
+
+// simple token pasting
+
+#define PASTE(a,b) a##b
+
+PASTE(flo,at) bar() { return 0.0; }
+
+// no space before parens? not a function-like macro
+
+#define M (x) - (x)
+
+// Error: undefined identifier `x`
+float bar(float a) { return M(a); }
diff --git a/tests/preprocessor/define-function-like.spire.expected b/tests/preprocessor/define-function-like.spire.expected
new file mode 100644
index 000000000..e7b2a582a
--- /dev/null
+++ b/tests/preprocessor/define-function-like.spire.expected
@@ -0,0 +1,7 @@
+result code = -1
+standard error = {
+Tests/Preprocessor/define-function-like.spire(16): error 30015: undefined identifier 'x'.
+Tests/Preprocessor/define-function-like.spire(16): error 30015: undefined identifier 'x'.
+}
+standard output = {
+}
diff --git a/tests/preprocessor/define-simple.spire b/tests/preprocessor/define-simple.spire
new file mode 100644
index 000000000..26436b258
--- /dev/null
+++ b/tests/preprocessor/define-simple.spire
@@ -0,0 +1,14 @@
+//TEST:SIMPLE:
+// #define support
+
+#define FOO 1.0f
+
+float foo() { return FOO + 2.0; }
+
+#define BAR 99
+
+#if BAR > 10
+int bar() { return 0; }
+#else
+BadThing shouldntCompile;
+#endif
diff --git a/tests/preprocessor/if.spire b/tests/preprocessor/if.spire
new file mode 100644
index 000000000..fe5948c33
--- /dev/null
+++ b/tests/preprocessor/if.spire
@@ -0,0 +1,15 @@
+//TEST:SIMPLE:
+// #ifdef support
+
+
+#if (1 - 1*2) < 0
+int foo() { return 0; }
+#else
+BadThing thatWontCompile;
+#endif
+
+#if (1 >> 1) && ~999
+AnotherError onThisLine;
+#else
+int bar() { return foo(); }
+#endif \ No newline at end of file
diff --git a/tests/preprocessor/ifdef.spire b/tests/preprocessor/ifdef.spire
new file mode 100644
index 000000000..a3ca82838
--- /dev/null
+++ b/tests/preprocessor/ifdef.spire
@@ -0,0 +1,16 @@
+//TEST:SIMPLE:
+// #ifdef support
+
+#define A
+
+#ifdef A
+int foo() { return 0; }
+#else
+BadThing thatWontCompile;
+#endif
+
+#ifdef BadThing
+AnotherError onThisLine;
+#else
+int bar() { return foo(); }
+#endif \ No newline at end of file
diff --git a/tests/preprocessor/include-a.spireh b/tests/preprocessor/include-a.spireh
new file mode 100644
index 000000000..8fecc6a98
--- /dev/null
+++ b/tests/preprocessor/include-a.spireh
@@ -0,0 +1,3 @@
+// #include support
+
+int bar() { return foo(); } \ No newline at end of file
diff --git a/tests/preprocessor/include.spire b/tests/preprocessor/include.spire
new file mode 100644
index 000000000..8feca21cc
--- /dev/null
+++ b/tests/preprocessor/include.spire
@@ -0,0 +1,8 @@
+//TEST:SIMPLE:
+// #include support
+
+int foo() { return 0; }
+
+#include "include-a.spireh"
+
+int baz() { return bar(); } \ No newline at end of file