summaryrefslogtreecommitdiff
path: root/tnslc/tests/complex
diff options
context:
space:
mode:
Diffstat (limited to 'tnslc/tests/complex')
-rw-r--r--tnslc/tests/complex/enums.tnsl84
-rw-r--r--tnslc/tests/complex/generics.tnsl35
-rw-r--r--tnslc/tests/complex/if_else.tnsl46
-rw-r--r--tnslc/tests/complex/interfaces.tnsl0
-rw-r--r--tnslc/tests/complex/loops.tnsl0
-rw-r--r--tnslc/tests/complex/switch.tnsl0
6 files changed, 165 insertions, 0 deletions
diff --git a/tnslc/tests/complex/enums.tnsl b/tnslc/tests/complex/enums.tnsl
new file mode 100644
index 0000000..80776f0
--- /dev/null
+++ b/tnslc/tests/complex/enums.tnsl
@@ -0,0 +1,84 @@
+# Enums should be able to store structs as well
+struct EnumTester {
+ int i, j
+ ~EnumTester ptr
+}
+
+# Simple integer enum
+enum IntEnum [int] {
+ A = 0,
+ B = 1,
+ C = -2
+}
+
+# Simple float enum
+enum FloatEnum[float] {
+ A = 0.1,
+ B = 0.2,
+ C = 3.1415
+}
+
+# More complex struct enum
+enum TestEnum [EnumTester] {
+ A = {1, 2, null},
+ B = {2, 3, ~TestEnum.A},
+ C = {3, 3, null}
+}
+
+# Type enum
+enum TypeEnum [type] {
+ A = int,
+ B = float,
+ C = EnumTester
+}
+
+enum SurfaceType [int] {
+ LAND = 0,
+ WATER = 1,
+ AIR = 2,
+
+ SPACE = -1
+}
+
+/; interface Vehicle
+ /; fuel [float] ;/
+ /; max_speed [float] ;/
+ /; min_speed [float] ;/
+ /; can_travel (SurfaceType surface) [bool] ;/
+;/
+
+struct Car extends Vehicle {
+ int wheels
+}
+
+struct Boat extends Vehicle {
+ int propellers
+}
+
+struct Plane extends Vehicle {
+ bool biplane, passenger
+ int engines,
+}
+
+struct Rocket extends Vehicle {
+ int
+ engines,
+ stages
+}
+
+struct HoverCraft extends Vehicle {
+ {3}float
+ max_antigrav,
+ bool
+ space_ready
+}
+
+# Enums can also handle interfaces (and extended types)
+# but only if the given standard library has support for those things
+enum CommonVehicles [Vehicle] {
+ A = {4}[Car],
+ B = {1}[Boat],
+ C = {false, true, 2}[Plane],
+ D = {4, 5}[Rocket],
+ E = {{5, 14.8, 5}, false}[HoverCraft]
+}
diff --git a/tnslc/tests/complex/generics.tnsl b/tnslc/tests/complex/generics.tnsl
new file mode 100644
index 0000000..3f62474
--- /dev/null
+++ b/tnslc/tests/complex/generics.tnsl
@@ -0,0 +1,35 @@
+struct ListNode (type T) {
+ T element,
+ ~ListNode(T) next
+}
+
+/; method ListNode
+ /; get_el [T]
+ return self.element
+ ;/
+
+ /; get_next [ListNode(T)]
+ return self.next`
+ ;/
+;/
+
+struct ReferenceNode (type T) extends ListNode(T`) {
+ super
+}
+
+/; method ReferenceNode
+ /; change_ref (~T new_ref)
+ ~self.element = new_ref
+ ;/
+;/
+
+struct List(type T) {
+
+}
+
+# Generic (type T)
+# Unknown generic (?)
+# Ref to a type (type T) -> T`
+# Ref types can be used interchangably with their referenced type while pointer types can not
+# Variables typed by reference have the additional trait that you can
+# set the address of that variable \ No newline at end of file
diff --git a/tnslc/tests/complex/if_else.tnsl b/tnslc/tests/complex/if_else.tnsl
new file mode 100644
index 0000000..d965e6b
--- /dev/null
+++ b/tnslc/tests/complex/if_else.tnsl
@@ -0,0 +1,46 @@
+/; main [int]
+ /; if ()
+
+ ;/
+
+ /; if ()
+
+ ;; else
+
+ ;/
+
+ /; if ()
+
+ ;//; else
+
+ ;/
+
+ /; if ()
+
+ ;; else if ()
+
+ ;/
+
+ /; if () []
+ ;; else if () []
+ ;; else []
+ ;/
+
+ /; if () []
+ ;; if () []
+ ;; else []
+ ;/
+
+ /; if () []
+ ;; if () []
+ ;; else if () []
+ ;; else []
+ ;/
+
+ int i = 0
+
+ # Short if syntax for variable declaration
+ i = if (i < 1) [7] else [9]
+
+ ;return 0
+;/ \ No newline at end of file
diff --git a/tnslc/tests/complex/interfaces.tnsl b/tnslc/tests/complex/interfaces.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tnslc/tests/complex/interfaces.tnsl
diff --git a/tnslc/tests/complex/loops.tnsl b/tnslc/tests/complex/loops.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tnslc/tests/complex/loops.tnsl
diff --git a/tnslc/tests/complex/switch.tnsl b/tnslc/tests/complex/switch.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tnslc/tests/complex/switch.tnsl