aboutsummaryrefslogtreecommitdiff
path: root/tests/variable
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-04-04 13:06:50 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-04-04 13:06:50 +0200
commit5c369faa461ec4416d2d4b231a5b36963a7315ce (patch)
treefc1b550870a29f0a03e258a76f16496ac69ec35c /tests/variable
parent0e486cd3642da8a442629ffce9a3daf16745c35e (diff)
Implement value typing, null support via value attributes
For example: v = [null] v = [string] abc v += ABC # abcABC
Diffstat (limited to 'tests/variable')
-rw-r--r--tests/variable/null/buildfile22
-rw-r--r--tests/variable/null/test.out7
-rwxr-xr-xtests/variable/null/test.sh3
-rw-r--r--tests/variable/type/buildfile67
-rw-r--r--tests/variable/type/test.out9
5 files changed, 104 insertions, 4 deletions
diff --git a/tests/variable/null/buildfile b/tests/variable/null/buildfile
new file mode 100644
index 0000000..3fa1a9e
--- /dev/null
+++ b/tests/variable/null/buildfile
@@ -0,0 +1,22 @@
+#v = [null=junk] # error: unexpected value for attribute null: junk
+#v = [null] junk # error: empty null value expected instead of 'junk'
+
+print $v0 # Undefined.
+
+v1 = [null]
+print $v1
+
+v2 = x
+v2 = [null]
+print $v2
+
+v3a = [null]
+v3b = $v3a
+print $v3b
+v3b = ($v3a)
+print $v3b
+print ($v3b)
+
+print [null]
+
+./:
diff --git a/tests/variable/null/test.out b/tests/variable/null/test.out
new file mode 100644
index 0000000..5119a71
--- /dev/null
+++ b/tests/variable/null/test.out
@@ -0,0 +1,7 @@
+[null]
+[null]
+[null]
+[null]
+[null]
+[null]
+[null]
diff --git a/tests/variable/null/test.sh b/tests/variable/null/test.sh
new file mode 100755
index 0000000..afcb3bd
--- /dev/null
+++ b/tests/variable/null/test.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+b -q | diff -u test.out -
diff --git a/tests/variable/type/buildfile b/tests/variable/type/buildfile
index 372b0ad..85c18e1 100644
--- a/tests/variable/type/buildfile
+++ b/tests/variable/type/buildfile
@@ -1,5 +1,13 @@
# Variable typing.
#
+
+#[string] str3 = foo
+#[bool] str3 = false # error: changing str3 type from string to bool
+
+#[bool string] str3 = foo # error: multiple variable types: bool, string
+
+#[junk] jnk = foo # error: unknown variable attribute junk
+
[string] str1 = bar
str1 =+ foo
str1 += baz
@@ -10,12 +18,63 @@ str2 = bar
str2 += baz
print $str2
-#[string] str3 = foo
-#[bool] str3 = false # error: changing str3 type from string to bool
+# Value typing.
+#
-#[bool string] str3 = foo # error: multiple variable types: bool, string
+#v = [bool string] true # error: multiple value types: string, bool
+#v = [string=junk] true # error: unexpected value for attribute string: junk
-#[junk] jnk = foo # error: unknown variable attribute junk
+#[string] var =
+#var = [bool] true # error: confliction variable var type string and value type bool
+
+#var = [string] false
+#var += [bool] true # error: confliction original value type string and append/prepend value type bool
+
+v1a = [uint64] 00
+v1b += [uint64] 00
+v1c =+ [uint64] 00
+print $v1a $v1b $v1c # 0 0 0
+
+v2 = [uint64] 00
+v2 = [string] 00
+print $v2 # 00
+
+#v3a = [uint64] 00
+#v3a += [string] 00 # error: confliction original value type uint64 and append/prepend value type string
+
+#v3b = [uint64] 00
+#v3b =+ [string] 00 # error: confliction original value type uint64 and append/prepend value type string
+
+v4a = 01
+v4a += [uint64] 01
+print $v4a # 2
+
+v4b = 01
+v4b =+ [uint64] 01
+print $v4b # 2
+
+v5a = 01
+sub/:
+{
+ v5a += [uint64] 01
+ print $v5a # 2
+}
+
+v5b = 01
+sub/:
+{
+ v5b =+ [uint64] 01
+ print $v5b # 2
+}
+
+v6 = [uint64 null]
+v6 += 00
+print $v6 # 0
+
+v7 = [string null]
+v7 += [uint64] 00
+print $v7 # 0
+print [uint64] 00 # 0
./:
diff --git a/tests/variable/type/test.out b/tests/variable/type/test.out
index f5dfb84..4aea91f 100644
--- a/tests/variable/type/test.out
+++ b/tests/variable/type/test.out
@@ -1,2 +1,11 @@
foobarbaz
foobarbaz
+0 0 0
+00
+2
+2
+2
+2
+0
+0
+0