fn test(val) { print(jsonStringify(val)) } print('-- test the most common expressions --') test(1 + 2) -- 3 test(1 - 2) -- -1 test(3 * 2) -- 6 test(3 / 2) -- 1.5 test(3 % 2) -- 1 test(1 and 2) -- true test(1 or 0) -- true test(1 and 0) -- false test(1 or (0 and 1) or 2) -- true test((1 and 0) and 1) -- false test((1 or 2) and (1 or 2)) -- true test(true) -- true test(not true) -- false test(false) -- false test(null) -- null test(3.14) -- 3.14 test(1 = 2) -- false test(1 == 2) -- false test(1 != 2) -- true test(1 < 2) -- true test(1 <= 2) -- true test(1 > 2) -- false test(1 >= 2) -- false test('a' like 'b') -- false test('baa' like '%a%') -- true test('baa' like '%x%') -- false test('baa' ilike '%A%') -- true test('baa' ilike '%C%') -- false test('a' ilike 'b') -- false test('a' not like 'b') -- true test('a' not ilike 'b') -- true test('a' in 'car') -- true test('a' in 'foo') -- false test('a' not in 'car') -- false test(properties.bla) -- null test(properties.foo) -- "bar" test(ifNull(properties.foo, false)) -- "bar" test(ifNull(properties.nullValue, false)) -- false test(concat('arg', 'another')) -- 'arganother' test(concat(1, NULL)) -- '1' test(concat(true, false)) -- 'truefalse' test(match('test', 'e.*')) -- true test(match('test', '^e.*')) -- false test(match('test', 'x.*')) -- false test('test' =~ 'e.*') -- true test('test' !~ 'e.*') -- false test('test' =~ '^e.*') -- false test('test' !~ '^e.*') -- true test('test' =~ 'x.*') -- false test('test' !~ 'x.*') -- true test('test' ~* 'EST') -- true test('test' =~* 'EST') -- true test('test' !~* 'EST') -- false test(toString(1)) -- '1' test(toString(1.5)) -- '1.5' test(toString(true)) -- 'true' test(toString(null)) -- 'null' test(toString('string')) -- 'string' test(toInt('1')) -- 1 test(toInt('bla')) -- null test(toFloat('1.2')) -- 1.2 test(toFloat('bla')) -- null test(toUUID('asd')) -- 'asd' test(1 == null) -- false test(1 != null) -- true