aboutsummaryrefslogtreecommitdiffhomepage
path: root/libslang/src/test/syntax.sl
diff options
context:
space:
mode:
Diffstat (limited to 'libslang/src/test/syntax.sl')
-rw-r--r--libslang/src/test/syntax.sl142
1 files changed, 142 insertions, 0 deletions
diff --git a/libslang/src/test/syntax.sl b/libslang/src/test/syntax.sl
new file mode 100644
index 0000000..6321eb9
--- /dev/null
+++ b/libslang/src/test/syntax.sl
@@ -0,0 +1,142 @@
+_debug_info = 1; () = evalfile ("inc.sl");
+
+print ("Testing syntax ...");
+
+if (0x12 != test_char_return (0x12)) failed ("test_char_return");
+if (0x1234h != test_short_return (0x1234h)) failed ("test_short_return");
+if (0x1234 != test_int_return (0x1234)) failed ("test_int_return");
+if (0x12345678L != test_long_return (0x12345678L)) failed ("test_long_return");
+% if (1.2e34f != test_float_return (1.2e34f)) failed ("test_float_return");
+#ifexists Double_Type
+if (1.2e34 != test_double_return (1.2e34)) failed ("test_double_return");
+#endif
+
+static define static_xxx ()
+{
+ return "xxx";
+}
+
+private define private_yyy ()
+{
+ return "yyy";
+}
+
+public define public_zzz ()
+{
+ return "zzz";
+}
+
+if (is_defined ("static_xxx") or "xxx" != static_xxx ())
+ failed ("static_xxx");
+if (is_defined ("private_yyy") or "yyy" != private_yyy ())
+ failed ("private_yyy");
+if (not is_defined ("public_zzz") or "zzz" != public_zzz ())
+ failed ("public_xxx");
+
+variable XXX = 1;
+static define xxx ()
+{
+ variable XXX = 2;
+ if (XXX != 2) failed ("local variable XXX");
+}
+
+xxx ();
+if (XXX != 1) failed ("global variable XXX");
+if (1)
+{
+ if (orelse
+ {0}
+ {0}
+ {0}
+ {0}
+ )
+ failed ("orelse");
+}
+
+
+!if (orelse
+ {0}
+ {0}
+ {0}
+ {1}) failed ("not orelse");
+
+_auto_declare = 1;
+XXX_auto_declared = 1;
+
+if (&XXX_auto_declared != __get_reference ("XXX_auto_declared"))
+ failed ("__get_reference");
+
+if (0 == __is_initialized (&XXX_auto_declared))
+ failed ("__is_initialized");
+() = __tmp (XXX_auto_declared);
+if (__is_initialized (&XXX_auto_declared))
+ failed ("__is_initialized __tmp");
+XXX_auto_declared = "xxx";
+__uninitialize (&XXX_auto_declared);
+if (__is_initialized (&XXX_auto_declared))
+ failed ("__is_initialized __uninitialize");
+
+static define test_uninitialize ()
+{
+ variable x;
+ if (__is_initialized (&x))
+ failed ("__is_initialized x");
+ x = 3;
+ !if (__is_initialized (&x))
+ failed ("__is_initialized x=3");
+ if (3 != __tmp (x))
+ failed ("__tmp return value");
+ if (__is_initialized (&x))
+ failed ("__tmp x");
+ x = 4;
+ __uninitialize (&x);
+ if (__is_initialized (&x))
+ failed ("__uninitialize x");
+}
+
+test_uninitialize ();
+
+static define check_args (n)
+{
+ if (n + 1 != _NARGS)
+ failed ("check_args %d", n);
+ _pop_n (_NARGS-1);
+}
+
+static define nitems (n)
+{
+ loop (n) 1;
+}
+
+check_args (1, 1);
+check_args (1,2,2);
+check_args (nitems(3), nitems(5), 8);
+static variable X = [1:10];
+% X[3]++ produces nothing
+check_args (nitems (3), check_args(nitems(4), X[3]++, 4, X[3]+=X[2], 5), 3);
+
+static define check_no_args ()
+{
+ if (_NARGS != 0)
+ failed ("check_no_args");
+}
+
+% This failed in previous versions because abs was not treated as a function
+% call.
+if (abs (1) > 0)
+ check_no_args ();
+
+define check_tmp_optim ()
+{
+ variable a = [1:10:1.0];
+ variable b = a*0.0;
+ if ((a[0] != 1.0) or (__eqs(a,b)))
+ failed ("__tmp optimization: a[0] = %f", a[0]);
+}
+
+check_tmp_optim ();
+
+print ("Ok\n");
+
+exit (0);
+