diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2024-02-20 15:40:02 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2024-02-20 16:08:14 +0200 |
commit | 0efae7db7b5870246f1e294a5fedaa69e9c90331 (patch) | |
tree | fd53e7b4b416a63c8e082dead3ef1d6496fa872a /tests | |
parent | 6ff1cf35f78a24d52603d84eac9349b3d4670c6c (diff) |
Add json_map and json_set buildfile value types
These expose the std::map<json_value,json_value> and std::set<json_value>
types to buildfiles.
New functions:
$size(<json-set>)
$size(<json-map>)
$keys(<json-map>)
Note that the $keys() function returns the list of map key as a json array.
For example:
m = [json_map] 2@([json] a@1 b@2) 1@([json] 1 2)
s = [json_set] ([json] x@1 y@2) ([json] a@1 b@2)
print ($m[2][b]) # 2
print ($s[([json] y@2 x@1)]) # true
Diffstat (limited to 'tests')
-rw-r--r-- | tests/function/json/testscript | 13 | ||||
-rw-r--r-- | tests/type/json/testscript | 44 | ||||
-rw-r--r-- | tests/type/map/testscript | 2 | ||||
-rw-r--r-- | tests/type/set/testscript | 2 |
4 files changed, 58 insertions, 3 deletions
diff --git a/tests/function/json/testscript b/tests/function/json/testscript index b7134a8..54e524f 100644 --- a/tests/function/json/testscript +++ b/tests/function/json/testscript @@ -37,7 +37,7 @@ object object EOO -: size +: value-size : $* <<EOI >>EOO print $value_size([json] null) @@ -244,3 +244,14 @@ EOO <stdin>:1:6: info: while calling json.load(<untyped>) EOE } + +: size +: +{ + $* <'print $size([json_set] a b b)' >'2' : json-set + $* <'print $size([json_map] a@1 b@2 b@3)' >'2' : json-map +} + +: keys +: +$* <'print $keys([json_map] 2@([json] a@1 b@2 c@3) 1@([json] 1 2 3))' >'[1,2]' diff --git a/tests/type/json/testscript b/tests/type/json/testscript index 0e9af95..6dd6316 100644 --- a/tests/type/json/testscript +++ b/tests/type/json/testscript @@ -451,3 +451,47 @@ abc EOO } + +: json-map +: +{ + : basics + : + $* <<EOI >>EOO + m = [json_map] 2@([json] a@1 b@2) 1@([json] 1 2) 0@([json] null) -1@null + print $m + for p: $m + print $first($p) $second($p) + print ($m[1]) + print $type($m[1]) + print ($m[2][b]) + EOI + -1@"" 0@"" 1@[1,2] 2@{"a":1,"b":2} + -1 "" + 0 "" + 1 [1,2] + 2 {"a":1,"b":2} + [1,2] + json + 2 + EOO +} + +: json-set +: +{ + : basics + : + $* <<EOI >>EOO + s = [json_set] ([json] x@1 y@2) ([json] a@1 b@2) + print $s + for v: $s + print $type($v) $v + print ($s[([json] y@2 x@1)]) + EOI + {"a":1,"b":2} {"x":1,"y":2} + json {"a":1,"b":2} + json {"x":1,"y":2} + true + EOO +} diff --git a/tests/type/map/testscript b/tests/type/map/testscript index 1c6224a..29f5ed4 100644 --- a/tests/type/map/testscript +++ b/tests/type/map/testscript @@ -1,7 +1,7 @@ # file : tests/type/map/testscript # license : MIT; see accompanying LICENSE file -# See also tests in function/*/ (size(), keys()). +# See also tests in function/*/ (size(), keys()), type/json/ (json_map). .include ../../common.testscript diff --git a/tests/type/set/testscript b/tests/type/set/testscript index da5e181..aca4c2d 100644 --- a/tests/type/set/testscript +++ b/tests/type/set/testscript @@ -1,7 +1,7 @@ # file : tests/type/set/testscript # license : MIT; see accompanying LICENSE file -# See also tests in function/*/ (size()). +# See also tests in function/*/ (size()), type/json/ (json_set). .include ../../common.testscript |