feat: add cJSON and SQLite amalgamation source files under deps/

Add the cJSON library (cJSON.c, cJSON.h) and SQLite amalgamation
(sqlite3.c, sqlite3.h, sqlite3ext.h, shell.c) as vendored dependencies
in the deps/ directory for use by the project build system.
This commit is contained in:
2026-01-24 18:35:43 +00:00
parent 8f1d13a86b
commit fdd61cc90c
118 changed files with 315687 additions and 6 deletions
+18
View File
@@ -0,0 +1,18 @@
import "base64" for Base64
System.print(Base64.encode("Hello")) // expect: SGVsbG8=
System.print(Base64.encode("Hello, World!")) // expect: SGVsbG8sIFdvcmxkIQ==
System.print(Base64.encode("")) // expect:
System.print(Base64.encode("a")) // expect: YQ==
System.print(Base64.encode("ab")) // expect: YWI=
System.print(Base64.encode("abc")) // expect: YWJj
System.print(Base64.decode("SGVsbG8=")) // expect: Hello
System.print(Base64.decode("SGVsbG8sIFdvcmxkIQ==")) // expect: Hello, World!
System.print(Base64.decode("")) // expect:
System.print(Base64.decode("YQ==")) // expect: a
System.print(Base64.decode("YWI=")) // expect: ab
System.print(Base64.decode("YWJj")) // expect: abc
System.print(Base64.encodeUrl("Hello+World/Test")) // expect: SGVsbG8rV29ybGQvVGVzdA
System.print(Base64.decode(Base64.encode("Test roundtrip"))) // expect: Test roundtrip
+19
View File
@@ -0,0 +1,19 @@
// retoor <retoor@molodetz.nl>
import "crypto" for Crypto, Hash
var bytes = Crypto.randomBytes(16)
System.print(bytes is List) // expect: true
System.print(bytes.count) // expect: 16
var md5 = Hash.md5("hello")
System.print(Hash.toHex(md5)) // expect: 5d41402abc4b2a76b9719d911017c592
var sha1 = Hash.sha1("hello")
System.print(Hash.toHex(sha1)) // expect: aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
var sha256 = Hash.sha256("hello")
System.print(Hash.toHex(sha256)) // expect: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
var emptyMd5 = Hash.md5("")
System.print(Hash.toHex(emptyMd5)) // expect: d41d8cd98f00b204e9800998ecf8427e
+28
View File
@@ -0,0 +1,28 @@
import "datetime" for DateTime, Duration
var now = DateTime.now()
System.print(now.year >= 2024) // expect: true
System.print(now.month >= 1 && now.month <= 12) // expect: true
System.print(now.day >= 1 && now.day <= 31) // expect: true
System.print(now.hour >= 0 && now.hour <= 23) // expect: true
System.print(now.minute >= 0 && now.minute <= 59) // expect: true
System.print(now.second >= 0 && now.second <= 59) // expect: true
var ts = DateTime.fromTimestamp(0)
System.print(ts.year) // expect: 1970
var d1 = Duration.fromSeconds(60)
System.print(d1.seconds) // expect: 60
System.print(d1.minutes) // expect: 1
var d2 = Duration.fromMinutes(2)
System.print(d2.seconds) // expect: 120
var d3 = Duration.fromHours(1)
System.print(d3.minutes) // expect: 60
var d4 = Duration.fromDays(1)
System.print(d4.hours) // expect: 24
var sum = d1 + d2
System.print(sum.seconds) // expect: 180
+8
View File
@@ -0,0 +1,8 @@
import "dns" for Dns
var addresses = Dns.lookup("localhost")
System.print(addresses is List) // expect: true
System.print(addresses.count > 0) // expect: true
var first = addresses[0]
System.print(first == "127.0.0.1" || first == "::1") // expect: true
+19
View File
@@ -0,0 +1,19 @@
import "env" for Environment
Environment.set("WREN_TEST_VAR", "hello")
System.print(Environment.get("WREN_TEST_VAR")) // expect: hello
Environment.set("WREN_TEST_VAR", "world")
System.print(Environment.get("WREN_TEST_VAR")) // expect: world
Environment.delete("WREN_TEST_VAR")
System.print(Environment.get("WREN_TEST_VAR") == null) // expect: true
System.print(Environment.get("THIS_VAR_DOES_NOT_EXIST") == null) // expect: true
var home = Environment.get("HOME")
System.print(home != null) // expect: true
var all = Environment.all
System.print(all is Map) // expect: true
System.print(all.count > 0) // expect: true
+19
View File
@@ -0,0 +1,19 @@
// retoor <retoor@molodetz.nl>
import "http" for Url, Http, HttpResponse
var url1 = Url.parse("http://example.com/path")
System.print(url1.scheme) // expect: http
System.print(url1.host) // expect: example.com
System.print(url1.port) // expect: 80
System.print(url1.path) // expect: /path
var url2 = Url.parse("http://example.com:8080/test?foo=bar")
System.print(url2.port) // expect: 8080
System.print(url2.path) // expect: /test
System.print(url2.query) // expect: foo=bar
System.print(url2.fullPath) // expect: /test?foo=bar
var url3 = Url.parse("http://localhost/")
System.print(url3.host) // expect: localhost
System.print(url3.path) // expect: /
+13
View File
@@ -0,0 +1,13 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"simple": "before{# comment #}after",
"multiword": "a{# this is a comment #}b",
"with_tags": "x{# {{ ignored }} #}y"
}))
System.print(env.getTemplate("simple").render({})) // expect: beforeafter
System.print(env.getTemplate("multiword").render({})) // expect: ab
System.print(env.getTemplate("with_tags").render({})) // expect: xy
+32
View File
@@ -0,0 +1,32 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"if_true": "{\% if show \%}visible{\% endif \%}",
"if_false": "{\% if hide \%}visible{\% endif \%}",
"if_else": "{\% if show \%}yes{\% else \%}no{\% endif \%}",
"if_elif": "{\% if x == 1 \%}one{\% elif x == 2 \%}two{\% else \%}other{\% endif \%}",
"compare": "{\% if a > b \%}greater{\% elif a < b \%}less{\% else \%}equal{\% endif \%}",
"and_or": "{\% if a and b \%}both{\% elif a or b \%}one{\% else \%}none{\% endif \%}",
"not": "{\% if not hidden \%}shown{\% endif \%}",
"in_list": "{\% if item in items \%}found{\% else \%}missing{\% endif \%}",
"is_even": "{\% if num is even \%}even{\% else \%}odd{\% endif \%}",
"is_defined": "{\% if var is defined \%}defined{\% else \%}undefined{\% endif \%}",
"is_not": "{\% if num is not odd \%}not odd{\% endif \%}",
"ternary": "{{ \"yes\" if show else \"no\" }}"
}))
System.print(env.getTemplate("if_true").render({"show": true})) // expect: visible
System.print(env.getTemplate("if_false").render({"hide": false})) // expect:
System.print(env.getTemplate("if_else").render({"show": false})) // expect: no
System.print(env.getTemplate("if_elif").render({"x": 2})) // expect: two
System.print(env.getTemplate("compare").render({"a": 5, "b": 3})) // expect: greater
System.print(env.getTemplate("and_or").render({"a": true, "b": false})) // expect: one
System.print(env.getTemplate("not").render({"hidden": false})) // expect: shown
System.print(env.getTemplate("in_list").render({"item": "b", "items": ["a", "b", "c"]})) // expect: found
System.print(env.getTemplate("is_even").render({"num": 4})) // expect: even
System.print(env.getTemplate("is_defined").render({"var": "something"})) // expect: defined
System.print(env.getTemplate("is_defined").render({})) // expect: undefined
System.print(env.getTemplate("is_not").render({"num": 4})) // expect: not odd
System.print(env.getTemplate("ternary").render({"show": true})) // expect: yes
+35
View File
@@ -0,0 +1,35 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"math": "{{ 2 + 3 * 4 }}",
"paren": "{{ (2 + 3) * 4 }}",
"mod": "{{ 10 \% 3 }}",
"div": "{{ 10 / 4 }}",
"neg": "{{ -5 }}",
"compare_chain": "{\% if 1 < 2 and 2 < 3 \%}yes{\% endif \%}",
"bool_and": "{{ true and false }}",
"bool_or": "{{ true or false }}",
"bool_not": "{{ not false }}",
"string_in": "{\% if \"b\" in \"abc\" \%}found{\% endif \%}",
"list_in": "{\% if 2 in [1, 2, 3] \%}found{\% endif \%}",
"nested_access": "{{ data.items[0].name }}",
"filter_chain": "{{ text|trim|upper }}",
"method_call": "{{ items|join(\", \")|upper }}"
}))
System.print(env.getTemplate("math").render({})) // expect: 14
System.print(env.getTemplate("paren").render({})) // expect: 20
System.print(env.getTemplate("mod").render({})) // expect: 1
System.print(env.getTemplate("div").render({})) // expect: 2.5
System.print(env.getTemplate("neg").render({})) // expect: -5
System.print(env.getTemplate("compare_chain").render({})) // expect: yes
System.print(env.getTemplate("bool_and").render({})) // expect: false
System.print(env.getTemplate("bool_or").render({})) // expect: true
System.print(env.getTemplate("bool_not").render({})) // expect: true
System.print(env.getTemplate("string_in").render({})) // expect: found
System.print(env.getTemplate("list_in").render({})) // expect: found
System.print(env.getTemplate("nested_access").render({"data": {"items": [{"name": "test"}]}})) // expect: test
System.print(env.getTemplate("filter_chain").render({"text": " hello "})) // expect: HELLO
System.print(env.getTemplate("method_call").render({"items": ["a", "b", "c"]})) // expect: A, B, C
+63
View File
@@ -0,0 +1,63 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"upper": "{{ text|upper }}",
"lower": "{{ text|lower }}",
"capitalize": "{{ text|capitalize }}",
"title": "{{ text|title }}",
"trim": "[{{ text|trim }}]",
"length": "{{ items|length }}",
"first": "{{ items|first }}",
"last": "{{ items|last }}",
"reverse": "{{ items|reverse|join }}",
"sort": "{{ items|sort|join(\", \") }}",
"join": "{{ items|join(\"-\") }}",
"default": "{{ missing|default(\"N/A\") }}",
"int": "{{ num|int }}",
"abs": "{{ num|abs }}",
"round": "{{ num|round(2) }}",
"replace": "{{ text|replace(\"o\", \"0\") }}",
"truncate": "{{ text|truncate(10) }}",
"batch": "{\% for row in items|batch(2) \%}[{\% for i in row \%}{{ i }}{\% endfor \%}]{\% endfor \%}",
"unique": "{{ items|unique|join }}",
"sum": "{{ nums|sum }}",
"min": "{{ nums|min }}",
"max": "{{ nums|max }}",
"striptags": "{{ html|striptags }}",
"urlencode": "{{ text|urlencode }}",
"wordcount": "{{ text|wordcount }}",
"center": "[{{ text|center(10) }}]",
"indent": "{{ text|indent(4) }}",
"tojson": "{{ data|tojson }}"
}))
System.print(env.getTemplate("upper").render({"text": "hello"})) // expect: HELLO
System.print(env.getTemplate("lower").render({"text": "HELLO"})) // expect: hello
System.print(env.getTemplate("capitalize").render({"text": "hello world"})) // expect: Hello world
System.print(env.getTemplate("title").render({"text": "hello world"})) // expect: Hello World
System.print(env.getTemplate("trim").render({"text": " hi "})) // expect: [hi]
System.print(env.getTemplate("length").render({"items": [1, 2, 3]})) // expect: 3
System.print(env.getTemplate("first").render({"items": ["a", "b", "c"]})) // expect: a
System.print(env.getTemplate("last").render({"items": ["a", "b", "c"]})) // expect: c
System.print(env.getTemplate("reverse").render({"items": ["a", "b", "c"]})) // expect: cba
System.print(env.getTemplate("sort").render({"items": ["c", "a", "b"]})) // expect: a, b, c
System.print(env.getTemplate("join").render({"items": ["a", "b", "c"]})) // expect: a-b-c
System.print(env.getTemplate("default").render({})) // expect: N/A
System.print(env.getTemplate("int").render({"num": 3.7})) // expect: 3
System.print(env.getTemplate("abs").render({"num": -5})) // expect: 5
System.print(env.getTemplate("round").render({"num": 3.14159})) // expect: 3.14
System.print(env.getTemplate("replace").render({"text": "hello"})) // expect: hell0
System.print(env.getTemplate("truncate").render({"text": "hello world this is long"})) // expect: hello...
System.print(env.getTemplate("batch").render({"items": [1, 2, 3, 4]})) // expect: [12][34]
System.print(env.getTemplate("unique").render({"items": ["a", "b", "a", "c"]})) // expect: abc
System.print(env.getTemplate("sum").render({"nums": [1, 2, 3, 4]})) // expect: 10
System.print(env.getTemplate("min").render({"nums": [3, 1, 4, 1, 5]})) // expect: 1
System.print(env.getTemplate("max").render({"nums": [3, 1, 4, 1, 5]})) // expect: 5
System.print(env.getTemplate("striptags").render({"html": "<p>text</p>"})) // expect: text
System.print(env.getTemplate("urlencode").render({"text": "hello world"})) // expect: hello+world
System.print(env.getTemplate("wordcount").render({"text": "one two three"})) // expect: 3
System.print(env.getTemplate("center").render({"text": "hi"})) // expect: [ hi ]
System.print(env.getTemplate("indent").render({"text": "line"})) // expect: line
System.print(env.getTemplate("tojson").render({"data": {"a": 1}})) // expect: {"a": 1}
+14
View File
@@ -0,0 +1,14 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"header": "<header>{{ title }}</header>",
"main": "{\% include \"header\" \%}content",
"with_ctx": "{\% include \"header\" with context \%}",
"without_ctx": "{\% include \"header\" without context \%}"
}))
System.print(env.getTemplate("main").render({"title": "Hello"})) // expect: <header>Hello</header>content
System.print(env.getTemplate("with_ctx").render({"title": "Test"})) // expect: <header>Test</header>
System.print(env.getTemplate("without_ctx").render({"title": "Test"})) // expect: <header></header>
+22
View File
@@ -0,0 +1,22 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"base": "[{\% block content \%}BASE{\% endblock \%}]",
"child": "{\% extends \"base\" \%}{\% block content \%}CHILD{\% endblock \%}",
"multi_block_base": "A:{\% block a \%}a{\% endblock \%} B:{\% block b \%}b{\% endblock \%}",
"multi_block_child": "{\% extends \"multi_block_base\" \%}{\% block a \%}A{\% endblock \%}",
"grandparent": "[{\% block x \%}GP{\% endblock \%}]",
"parent": "{\% extends \"grandparent\" \%}{\% block x \%}P{\% endblock \%}",
"grandchild": "{\% extends \"parent\" \%}{\% block x \%}GC{\% endblock \%}",
"super_base": "[{\% block s \%}BASE{\% endblock \%}]",
"super_child": "{\% extends \"super_base\" \%}{\% block s \%}{{ super() }}+CHILD{\% endblock \%}"
}))
System.print(env.getTemplate("base").render({})) // expect: [BASE]
System.print(env.getTemplate("child").render({})) // expect: [CHILD]
System.print(env.getTemplate("multi_block_base").render({})) // expect: A:a B:b
System.print(env.getTemplate("multi_block_child").render({})) // expect: A:A B:b
System.print(env.getTemplate("grandchild").render({})) // expect: [GC]
System.print(env.getTemplate("super_child").render({})) // expect: [BASE+CHILD]
+31
View File
@@ -0,0 +1,31 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"basic": "{\% for item in items \%}{{ item }}{\% endfor \%}",
"with_sep": "{\% for item in items \%}{{ item }}{\% if not loop.last \%}, {\% endif \%}{\% endfor \%}",
"index": "{\% for item in items \%}{{ loop.index }}:{{ item }}{\% if not loop.last \%} {\% endif \%}{\% endfor \%}",
"index0": "{\% for item in items \%}{{ loop.index0 }}:{{ item }}{\% if not loop.last \%} {\% endif \%}{\% endfor \%}",
"first_last": "{\% for item in items \%}{\% if loop.first \%}[{\% endif \%}{{ item }}{\% if loop.last \%}]{\% endif \%}{\% endfor \%}",
"length": "{\% for item in items \%}{{ loop.length }}{\% endfor \%}",
"else_empty": "{\% for item in items \%}{{ item }}{\% else \%}empty{\% endfor \%}",
"nested": "{\% for row in matrix \%}{\% for col in row \%}{{ col }}{\% endfor \%};{\% endfor \%}",
"dict": "{\% for key, value in data \%}{{ key }}={{ value }}{\% if not loop.last \%} {\% endif \%}{\% endfor \%}",
"range": "{\% for i in range(3) \%}{{ i }}{\% endfor \%}",
"range_start": "{\% for i in range(1, 4) \%}{{ i }}{\% endfor \%}",
"string": "{\% for c in text \%}{{ c }}-{\% endfor \%}"
}))
System.print(env.getTemplate("basic").render({"items": ["a", "b", "c"]})) // expect: abc
System.print(env.getTemplate("with_sep").render({"items": ["a", "b", "c"]})) // expect: a, b, c
System.print(env.getTemplate("index").render({"items": ["a", "b"]})) // expect: 1:a 2:b
System.print(env.getTemplate("index0").render({"items": ["a", "b"]})) // expect: 0:a 1:b
System.print(env.getTemplate("first_last").render({"items": ["a", "b", "c"]})) // expect: [abc]
System.print(env.getTemplate("length").render({"items": ["a", "b", "c"]})) // expect: 333
System.print(env.getTemplate("else_empty").render({"items": []})) // expect: empty
System.print(env.getTemplate("nested").render({"matrix": [[1, 2], [3, 4]]})) // expect: 12;34;
System.print(env.getTemplate("dict").render({"data": {"b": 2}})) // expect: b=2
System.print(env.getTemplate("range").render({})) // expect: 012
System.print(env.getTemplate("range_start").render({})) // expect: 123
System.print(env.getTemplate("string").render({"text": "hi"})) // expect: h-i-
+15
View File
@@ -0,0 +1,15 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"simple": "{\% macro greet(name) \%}Hello {{ name }}!{\% endmacro \%}{{ greet(\"World\") }}",
"with_default": "{\% macro greet(name, greeting=\"Hi\") \%}{{ greeting }} {{ name }}!{\% endmacro \%}{{ greet(\"Bob\") }}",
"multiple_calls": "{\% macro item(x) \%}[{{ x }}]{\% endmacro \%}{{ item(1) }}{{ item(2) }}{{ item(3) }}",
"with_loop": "{\% macro items(list) \%}{\% for i in list \%}{{ i }}{\% endfor \%}{\% endmacro \%}{{ items([1, 2, 3]) }}"
}))
System.print(env.getTemplate("simple").render({})) // expect: Hello World!
System.print(env.getTemplate("with_default").render({})) // expect: Hi Bob!
System.print(env.getTemplate("multiple_calls").render({})) // expect: [1][2][3]
System.print(env.getTemplate("with_loop").render({})) // expect: 123
+11
View File
@@ -0,0 +1,11 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"raw_var": "{\% raw \%}{{ not_parsed }}{\% endraw \%}",
"raw_block": "{\% raw \%}{\% if true \%}nope{\% endif \%}{\% endraw \%}"
}))
System.print(env.getTemplate("raw_var").render({})) // expect: {{ not_parsed }}
System.print(env.getTemplate("raw_block").render({})) // expect: {% if true %}nope{% endif %}
+15
View File
@@ -0,0 +1,15 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"set_simple": "{\% set x = 5 \%}{{ x }}",
"set_expr": "{\% set y = 2 + 3 \%}{{ y }}",
"set_from_var": "{\% set z = a + b \%}{{ z }}",
"set_string": "{\% set msg = \"hello\" \%}{{ msg|upper }}"
}))
System.print(env.getTemplate("set_simple").render({})) // expect: 5
System.print(env.getTemplate("set_expr").render({})) // expect: 5
System.print(env.getTemplate("set_from_var").render({"a": 10, "b": 20})) // expect: 30
System.print(env.getTemplate("set_string").render({})) // expect: HELLO
+29
View File
@@ -0,0 +1,29 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"simple": "Hello {{ name }}!",
"escaped": "{{ html }}",
"safe": "{{ html|safe }}",
"nested": "{{ user.name }} is {{ user.age }}",
"subscript": "{{ items[0] }} and {{ items[1] }}",
"literal_str": "{{ \"literal\" }}",
"literal_num": "{{ 42 }}",
"literal_bool": "{{ true }}",
"literal_list": "{{ [1, 2, 3]|join(\", \") }}",
"default": "{{ missing|default(\"fallback\") }}",
"concat": "{{ a ~ b }}"
}))
System.print(env.getTemplate("simple").render({"name": "World"})) // expect: Hello World!
System.print(env.getTemplate("escaped").render({"html": "<b>bold</b>"})) // expect: &lt;b&gt;bold&lt;/b&gt;
System.print(env.getTemplate("safe").render({"html": "<b>bold</b>"})) // expect: <b>bold</b>
System.print(env.getTemplate("nested").render({"user": {"name": "Alice", "age": 30}})) // expect: Alice is 30
System.print(env.getTemplate("subscript").render({"items": ["first", "second", "third"]})) // expect: first and second
System.print(env.getTemplate("literal_str").render({})) // expect: literal
System.print(env.getTemplate("literal_num").render({})) // expect: 42
System.print(env.getTemplate("literal_bool").render({})) // expect: true
System.print(env.getTemplate("literal_list").render({})) // expect: 1, 2, 3
System.print(env.getTemplate("default").render({})) // expect: fallback
System.print(env.getTemplate("concat").render({"a": "Hello", "b": "World"})) // expect: HelloWorld
+15
View File
@@ -0,0 +1,15 @@
// retoor <retoor@molodetz.nl>
import "jinja" for Environment, DictLoader
var env = Environment.new(DictLoader.new({
"trim_left": "x {{- y }}",
"trim_right": "{{ y -}} x",
"trim_both": "x {{- y -}} x",
"block_trim": "x {\%- if true \%}y{\% endif -\%} x"
}))
System.print(env.getTemplate("trim_left").render({"y": "Y"})) // expect: xY
System.print(env.getTemplate("trim_right").render({"y": "Y"})) // expect: Yx
System.print(env.getTemplate("trim_both").render({"y": "Y"})) // expect: xYx
System.print(env.getTemplate("block_trim").render({})) // expect: xyx
+19
View File
@@ -0,0 +1,19 @@
import "json" for Json
var obj = Json.parse("{\"name\":\"test\",\"value\":42}")
System.print(obj["name"]) // expect: test
System.print(obj["value"]) // expect: 42
var arr = Json.parse("[1,2,3]")
System.print(arr[0]) // expect: 1
System.print(arr.count) // expect: 3
var nested = Json.parse("{\"list\":[1,2],\"obj\":{\"a\":\"b\"}}")
System.print(nested["list"][1]) // expect: 2
System.print(nested["obj"]["a"]) // expect: b
System.print(Json.parse("null") == null) // expect: true
System.print(Json.parse("true")) // expect: true
System.print(Json.parse("false")) // expect: false
System.print(Json.parse("\"hello\"")) // expect: hello
System.print(Json.parse("3.14")) // expect: 3.14
+22
View File
@@ -0,0 +1,22 @@
import "json" for Json
System.print(Json.stringify(null)) // expect: null
System.print(Json.stringify(true)) // expect: true
System.print(Json.stringify(false)) // expect: false
System.print(Json.stringify(42)) // expect: 42
System.print(Json.stringify(3.14)) // expect: 3.14
System.print(Json.stringify("hello")) // expect: "hello"
System.print(Json.stringify([1, 2, 3])) // expect: [1,2,3]
System.print(Json.stringify({"a": 1})) // expect: {"a":1}
var obj = {"name": "test", "value": 42}
var json = Json.stringify(obj)
System.print(json.contains("\"name\"")) // expect: true
System.print(json.contains("\"test\"")) // expect: true
var nested = {"list": [1, 2], "flag": true}
var nestedJson = Json.stringify(nested)
System.print(nestedJson.contains("[1,2]")) // expect: true
System.print(nestedJson.contains("true")) // expect: true
System.print(Json.stringify("line\nbreak")) // expect: "line\nbreak"
+37
View File
@@ -0,0 +1,37 @@
import "math" for Math
System.print((Math.sin(0) - 0).abs < 0.0001) // expect: true
System.print((Math.cos(0) - 1).abs < 0.0001) // expect: true
System.print((Math.tan(0) - 0).abs < 0.0001) // expect: true
System.print((Math.sqrt(4) - 2).abs < 0.0001) // expect: true
System.print((Math.sqrt(9) - 3).abs < 0.0001) // expect: true
System.print((Math.pow(2, 3) - 8).abs < 0.0001) // expect: true
System.print((Math.pow(3, 2) - 9).abs < 0.0001) // expect: true
System.print((Math.log(Math.e) - 1).abs < 0.0001) // expect: true
System.print((Math.exp(1) - Math.e).abs < 0.0001) // expect: true
System.print(Math.floor(3.7)) // expect: 3
System.print(Math.ceil(3.2)) // expect: 4
System.print(Math.round(3.5)) // expect: 4
System.print(Math.round(3.4)) // expect: 3
System.print(Math.abs(-5)) // expect: 5
System.print(Math.abs(5)) // expect: 5
System.print(Math.min(3, 7)) // expect: 3
System.print(Math.max(3, 7)) // expect: 7
System.print(Math.clamp(5, 0, 10)) // expect: 5
System.print(Math.clamp(-5, 0, 10)) // expect: 0
System.print(Math.clamp(15, 0, 10)) // expect: 10
System.print((Math.pi - 3.14159).abs < 0.001) // expect: true
System.print((Math.e - 2.71828).abs < 0.001) // expect: true
System.print(Math.sign(5)) // expect: 1
System.print(Math.sign(-5)) // expect: -1
System.print(Math.sign(0)) // expect: 0
System.print(Math.lerp(0, 10, 0.5)) // expect: 5
+49
View File
@@ -0,0 +1,49 @@
// retoor <retoor@molodetz.nl>
import "regex" for Regex, Match
var r = Regex.new("hello")
System.print(r.test("hello world")) // expect: true
System.print(r.test("goodbye")) // expect: false
var r2 = Regex.new("h.llo")
System.print(r2.test("hello")) // expect: true
System.print(r2.test("hallo")) // expect: true
var r3 = Regex.new("a+")
System.print(r3.test("aaa")) // expect: true
System.print(r3.test("bbb")) // expect: false
var r4 = Regex.new("colou?r")
System.print(r4.test("color")) // expect: true
System.print(r4.test("colour")) // expect: true
var r5 = Regex.new("[a-z]+")
System.print(r5.test("hello")) // expect: true
System.print(r5.test("123")) // expect: false
var r6 = Regex.new("^hello")
System.print(r6.test("hello world")) // expect: true
System.print(r6.test("say hello")) // expect: false
var r7 = Regex.new("world$")
System.print(r7.test("hello world")) // expect: true
System.print(r7.test("world hello")) // expect: false
var r8 = Regex.new("\\d+")
System.print(r8.test("123")) // expect: true
System.print(r8.test("abc")) // expect: false
var r9 = Regex.new("hello", "i")
System.print(r9.test("HELLO")) // expect: true
var r10 = Regex.new("a")
System.print(r10.replace("banana", "o")) // expect: bonana
System.print(r10.replaceAll("banana", "o")) // expect: bonono
var r11 = Regex.new(",")
var parts = r11.split("a,b,c")
System.print(parts.count) // expect: 3
System.print(parts[0]) // expect: a
System.print(parts[1]) // expect: b
System.print(parts[2]) // expect: c
+10
View File
@@ -0,0 +1,10 @@
// retoor <retoor@molodetz.nl>
import "signal" for Signal
System.print(Signal.SIGINT) // expect: 2
System.print(Signal.SIGTERM) // expect: 15
System.print(Signal.SIGHUP) // expect: 1
System.print(Signal.SIGQUIT) // expect: 3
System.print(Signal.SIGUSR1) // expect: 10
System.print(Signal.SIGUSR2) // expect: 12
+27
View File
@@ -0,0 +1,27 @@
// retoor <retoor@molodetz.nl>
import "sqlite" for Database
var db = Database.memory()
System.print(db is Database) // expect: true
db.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")
db.execute("INSERT INTO users (name, age) VALUES (?, ?)", ["Alice", 30])
System.print(db.lastInsertId) // expect: 1
System.print(db.changes) // expect: 1
db.execute("INSERT INTO users (name, age) VALUES (?, ?)", ["Bob", 25])
System.print(db.lastInsertId) // expect: 2
var rows = db.query("SELECT * FROM users ORDER BY id")
System.print(rows.count) // expect: 2
System.print(rows[0]["name"]) // expect: Alice
System.print(rows[0]["age"]) // expect: 30
System.print(rows[1]["name"]) // expect: Bob
var filtered = db.query("SELECT * FROM users WHERE age > ?", [26])
System.print(filtered.count) // expect: 1
System.print(filtered[0]["name"]) // expect: Alice
db.close()
+16
View File
@@ -0,0 +1,16 @@
// retoor <retoor@molodetz.nl>
import "subprocess" for Subprocess, ProcessResult
var result = Subprocess.run("echo hello")
System.print(result is ProcessResult) // expect: true
System.print(result.success) // expect: true
System.print(result.exitCode) // expect: 0
System.print(result.stdout.trim()) // expect: hello
var result2 = Subprocess.run(["/bin/echo", "world"])
System.print(result2.stdout.trim()) // expect: world
var result3 = Subprocess.run("exit 42")
System.print(result3.success) // expect: false
System.print(result3.exitCode) // expect: 42
+7
View File
@@ -0,0 +1,7 @@
import "websocket" for WebSocket
var accept = WebSocket.computeAcceptKey_("dGhlIHNhbXBsZSBub25jZQ==")
System.print(accept) // expect: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
var accept2 = WebSocket.computeAcceptKey_("x3JJHMbDL1EzLkh9GBhXDw==")
System.print(accept2) // expect: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
+34
View File
@@ -0,0 +1,34 @@
import "websocket" for WebSocketMessage
var text = WebSocketMessage.new_(1, [72, 101, 108, 108, 111], true)
System.print(text.opcode) // expect: 1
System.print(text.isText) // expect: true
System.print(text.isBinary) // expect: false
System.print(text.isClose) // expect: false
System.print(text.isPing) // expect: false
System.print(text.isPong) // expect: false
System.print(text.text) // expect: Hello
System.print(text.bytes) // expect: [72, 101, 108, 108, 111]
var binary = WebSocketMessage.new_(2, [1, 2, 3, 4], true)
System.print(binary.opcode) // expect: 2
System.print(binary.isText) // expect: false
System.print(binary.isBinary) // expect: true
System.print(binary.bytes) // expect: [1, 2, 3, 4]
var close = WebSocketMessage.new_(8, [3, 232], true)
System.print(close.opcode) // expect: 8
System.print(close.isClose) // expect: true
System.print(close.closeCode) // expect: 1000
var closeWithReason = WebSocketMessage.new_(8, [3, 232, 98, 121, 101], true)
System.print(closeWithReason.closeCode) // expect: 1000
System.print(closeWithReason.closeReason) // expect: bye
var ping = WebSocketMessage.new_(9, [], true)
System.print(ping.isPing) // expect: true
System.print(ping.isPong) // expect: false
var pong = WebSocketMessage.new_(10, [], true)
System.print(pong.isPing) // expect: false
System.print(pong.isPong) // expect: true
+52
View File
@@ -0,0 +1,52 @@
import "websocket" for WebSocket, WebSocketServer
import "scheduler" for Scheduler
import "timer" for Timer
var testResults = []
var port = 19876
Scheduler.add {
var server = WebSocketServer.bind("127.0.0.1", port)
var ws = server.accept()
if (ws != null) {
var msg = ws.receive()
if (msg != null && msg.isText) {
testResults.add("server:" + msg.text)
ws.send("pong:" + msg.text)
}
msg = ws.receive()
if (msg != null && msg.isBinary) {
testResults.add("server_binary:" + msg.bytes.count.toString)
ws.sendBinary(msg.bytes)
}
ws.close()
}
server.close()
}
Timer.sleep(50)
Scheduler.add {
var ws = WebSocket.connect("ws://127.0.0.1:%(port)")
ws.send("ping")
var msg = ws.receive()
if (msg != null && msg.isText) {
testResults.add("client:" + msg.text)
}
ws.sendBinary([1, 2, 3, 4, 5])
msg = ws.receive()
if (msg != null && msg.isBinary) {
testResults.add("client_binary:" + msg.bytes.count.toString)
}
ws.close()
}
Timer.sleep(200)
for (r in testResults) {
System.print(r)
}
// expect: server:ping
// expect: client:pong:ping
// expect: server_binary:5
// expect: client_binary:5