aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/anc/v1/datat.asm12
-rw-r--r--test/test_build.py30
-rw-r--r--test/test_data_v1.py81
-rw-r--r--test/test_general.py11
-rw-r--r--test/test_run.py30
-rw-r--r--test/test_v1.py28
6 files changed, 147 insertions, 45 deletions
diff --git a/test/anc/v1/datat.asm b/test/anc/v1/datat.asm
new file mode 100644
index 0000000..d727627
--- /dev/null
+++ b/test/anc/v1/datat.asm
@@ -0,0 +1,12 @@
+incn
+shfl
+shfl
+allf
+load
+wrte
+bswp
+bswp
+splt
+loka
+jmpb
+keya
diff --git a/test/test_build.py b/test/test_build.py
index ec23390..96da14e 100644
--- a/test/test_build.py
+++ b/test/test_build.py
@@ -3,12 +3,12 @@ import signal
from test_general import SalisTest
-class TestBuild(SalisTest):
- NAME = "test-build.sim"
+SIM_NAME = "test-build.sim"
+class TestBuild(SalisTest):
def cmds_new(self, anc, arch):
return (
- f"./salis.py new -a{anc} -b -f -g{compiler} -H{self.tempdir.name} -n{TestBuild.NAME} {optimized} -s{seed} -u{ui} -v{arch}"
+ f"./salis.py new -a{anc} -b -f -g{compiler} -H{self.tempdir.name} -n{SIM_NAME} {optimized} -s{seed} -u{ui} -v{arch}"
for compiler in ["clang", "gcc"]
for optimized in ["", "-o"]
for seed in [-1, 0, 1234]
@@ -23,7 +23,7 @@ class TestBuild(SalisTest):
def cmds_load(self):
return (
- f"./salis.py load -b -g{compiler} -H{self.tempdir.name} -n{TestBuild.NAME} {optimized} -u{ui}"
+ f"./salis.py load -b -g{compiler} -H{self.tempdir.name} -n{SIM_NAME} {optimized} -u{ui}"
for compiler in ["clang", "gcc"]
for optimized in ["", "-o"]
for ui in ["curses", "daemon"]
@@ -31,7 +31,7 @@ class TestBuild(SalisTest):
def cmds_server(self):
return (
- f"./salis.py server -b -g{compiler} -H{self.tempdir.name} -n{TestBuild.NAME} {optimized}"
+ f"./salis.py server -b -g{compiler} -H{self.tempdir.name} -n{SIM_NAME} {optimized}"
for compiler in ["clang", "gcc"]
for optimized in ["", "-o"]
)
@@ -44,44 +44,44 @@ class TestBuild(SalisTest):
for optimized in ["", "-o"]
)
- def file_list(self):
+ def files_on_build(self):
return [
- os.path.join(self.tempdir.name, TestBuild.NAME, "opts.json"),
+ os.path.join(self.tempdir.name, SIM_NAME, "opts.json"),
]
def test_null_new(self):
for cmd in self.cmds_new_null():
SalisTest.run_subprocess(cmd)
- self.assert_file_list_exists(self.file_list())
+ self.assert_file_list_exists(self.files_on_build())
def test_v1_new(self):
for cmd in self.cmds_new_v1():
SalisTest.run_subprocess(cmd)
- self.assert_file_list_exists(self.file_list())
+ self.assert_file_list_exists(self.files_on_build())
def test_null_load(self):
SalisTest.run_subprocess(next(self.cmds_new_null()))
- self.assert_file_list_exists(self.file_list())
+ self.assert_file_list_exists(self.files_on_build())
for cmd in self.cmds_load():
SalisTest.run_subprocess(cmd)
- self.assert_file_list_exists(self.file_list())
+ self.assert_file_list_exists(self.files_on_build())
def test_v1_load(self):
SalisTest.run_subprocess(next(self.cmds_new_v1()))
- self.assert_file_list_exists(self.file_list())
+ self.assert_file_list_exists(self.files_on_build())
for cmd in self.cmds_load():
SalisTest.run_subprocess(cmd)
- self.assert_file_list_exists(self.file_list())
+ self.assert_file_list_exists(self.files_on_build())
def test_server(self):
SalisTest.run_subprocess(next(self.cmds_new_null()))
- self.assert_file_list_exists(self.file_list())
+ self.assert_file_list_exists(self.files_on_build())
for cmd in self.cmds_server():
SalisTest.run_subprocess(cmd)
- self.assert_file_list_exists(self.file_list())
+ self.assert_file_list_exists(self.files_on_build())
@SalisTest.run_ui_test(anc="0123", anc_path="anc", name="def.sim", ui="null", ui_path="test/ui", vm_arch="null")
def test_client(self):
diff --git a/test/test_data_v1.py b/test/test_data_v1.py
new file mode 100644
index 0000000..500a409
--- /dev/null
+++ b/test/test_data_v1.py
@@ -0,0 +1,81 @@
+import json
+import signal
+import socket
+import subprocess
+
+from test_general import SalisTest
+
+ANC_SIZE = 12
+
+SERVER_HOST = "localhost"
+SERVER_PORT = 8080
+
+SIM_OPTS = {
+ "anc": "datat",
+ "anc_path": "test/anc",
+ "clones": 2,
+ "cores": 1,
+ "data_push_pow": 12,
+ "force": False,
+ "muta_pow": 32,
+ "mvec_pow": 8,
+ "seed": "0x0",
+ "vm_arch": "v1",
+ "sync_pow": 10,
+ "auto_save_pow": 36,
+}
+
+class TestDataV1(SalisTest):
+ def request_from_server(self, request):
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client:
+ client.connect((SERVER_HOST, SERVER_PORT))
+ client.sendall(json.dumps(request).encode())
+ client.shutdown(socket.SHUT_WR)
+ return json.load(client.makefile(mode="r"))
+
+ @SalisTest.run_ui_test(**SIM_OPTS, ui="push", ui_path="test/ui")
+ def test_data(self):
+ with SalisTest.run_pipe(f"./salis.py server -H{self.tempdir.name}") as server_proc:
+ for line in server_proc.stdout:
+ if "Listening..." in line:
+ break
+
+ try:
+ self.assert_equal(self.request_from_server({"request": "name"})["name"], "def.sim")
+ self.assert_equal(self.request_from_server({"request": "hash"})["hash"], subprocess.check_output("git rev-parse HEAD".split()).decode().strip())
+ self.assert_equal(self.request_from_server({"request": "opts"}), SIM_OPTS)
+
+ data = self.request_from_server({
+ "request": "data",
+ "x-axis": "rowid",
+ "x-current": 0,
+ "x-high": 2,
+ "nth": 1,
+ "entries": 2,
+ "hm-left": 0,
+ "hm-pixel-count": 2 ** SIM_OPTS["mvec_pow"],
+ "hm-pixel-pow": 0,
+ })
+
+ # Check scalar values
+ self.assert_equal(data["rowid"], [1, 2])
+ self.assert_equal(data["cycl_0"], [0, 923])
+ self.assert_equal(data["mall_0"], [ANC_SIZE * 2, (ANC_SIZE * 2) + 12])
+ self.assert_equal(data["pnum_0"], [2, 5])
+ self.assert_equal(data["pfst_0"], [0, 0])
+ self.assert_equal(data["plst_0"], [1, 4])
+ self.assert_equal(data["amb0_0"], [ANC_SIZE, ((ANC_SIZE * 2) + (4 * 3)) // 5])
+ self.assert_equal(data["amb1_0"], [0, 0])
+ self.assert_equal(data["emb0_0"], [0, 1872])
+ self.assert_equal(data["emb1_0"], [0, 2])
+ self.assert_equal(data["eliv_0"], [0, 1894])
+ self.assert_equal(data["edea_0"], [0, 328])
+ self.assert_equal(data["wmb0_0"], [0, 1])
+ self.assert_equal(data["wmb1_0"], [0, 0])
+ self.assert_equal(data["wdea_0"], [0, 0])
+
+ self.assert_equal(data["step"], [0, 2 ** SIM_OPTS["data_push_pow"]])
+
+ print("---->", data)
+ finally:
+ server_proc.send_signal(signal.SIGINT)
diff --git a/test/test_general.py b/test/test_general.py
index 43f3635..edd7328 100644
--- a/test/test_general.py
+++ b/test/test_general.py
@@ -11,7 +11,7 @@ class SalisTest(unittest.TestCase):
def tearDown(self):
self.tempdir.cleanup()
- def file_list_new(self, name):
+ def files_on_new(self, name):
return [
os.path.join(self.tempdir.name, name, name),
os.path.join(self.tempdir.name, name, f"{name}.sqlite3"),
@@ -20,6 +20,9 @@ class SalisTest(unittest.TestCase):
os.path.join(self.tempdir.name, name, "evas", f"evas-{0:016x}"),
]
+ def assert_equal(self, v1, v2):
+ assert v1 == v2, f"{v1} != {v2}"
+
def assert_file_list_exists(self, files):
for file in files:
assert os.path.isfile(file), f"{file} does not exist"
@@ -33,12 +36,12 @@ class SalisTest(unittest.TestCase):
return subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, text=True)
@staticmethod
- def run_ui_test(anc, anc_path, ui, ui_path, vm_arch, clones=1, cores=1, name="def.sim"):
+ def run_ui_test(anc, anc_path, ui, ui_path, vm_arch, clones=1, cores=1, mvec_pow=20, name="def.sim", data_push_pow=28, sync_pow=20, **kwargs):
def test_decorator(test_case):
def test_wrapper(self):
- cmd = f"./salis.py new -a{anc} -A{anc_path} -C{clones} -c{cores} -H{self.tempdir.name} -n{name} -u{ui} -U{ui_path} -v{vm_arch}"
+ cmd = f"./salis.py new -a{anc} -A{anc_path} -C{clones} -c{cores} -d{data_push_pow} -H{self.tempdir.name} -m{mvec_pow} -n{name} -u{ui} -U{ui_path} -v{vm_arch} -y{sync_pow}"
subprocess.run(cmd.split(), check=True, stdout=subprocess.DEVNULL)
- self.assert_file_list_exists(self.file_list_new(name))
+ self.assert_file_list_exists(self.files_on_new(name))
test_case(self)
return test_wrapper
diff --git a/test/test_run.py b/test/test_run.py
index 17bdca8..d164bb4 100644
--- a/test/test_run.py
+++ b/test/test_run.py
@@ -2,15 +2,15 @@ import os
from test_general import SalisTest
-class TestRun(SalisTest):
- NAME = "test-run.sim"
- PUSH_POW = 8
+SIM_NAME = "test-run.sim"
+PUSH_POW = 8
+class TestRun(SalisTest):
def cmds(self, anc, arch):
return (
(
- f"./salis.py new -a{anc} -d{TestRun.PUSH_POW} -f -g{compiler} -H{self.tempdir.name} -n{TestRun.NAME} {optimized} -s{seed} -upush -Utest/ui/ -v{arch} -y{TestRun.PUSH_POW}",
- f"./salis.py load -g{compiler} -H{self.tempdir.name} -n{TestRun.NAME} {optimized} -upush -Utest/ui/",
+ f"./salis.py new -a{anc} -d{PUSH_POW} -f -g{compiler} -H{self.tempdir.name} -n{SIM_NAME} {optimized} -s{seed} -upush -Utest/ui/ -v{arch} -y{PUSH_POW}",
+ f"./salis.py load -g{compiler} -H{self.tempdir.name} -n{SIM_NAME} {optimized} -upush -Utest/ui/",
)
for compiler in ["clang", "gcc"]
for optimized in ["", "-o"]
@@ -23,28 +23,28 @@ class TestRun(SalisTest):
def cmds_v1(self):
return self.cmds("55a", "v1")
- def file_list_0(self):
+ def files_on_first_push(self):
return [
- *self.file_list_new(TestRun.NAME),
- os.path.join(self.tempdir.name, TestRun.NAME, "evas", f"evas-{2 ** TestRun.PUSH_POW:016x}"),
+ *self.files_on_new(SIM_NAME),
+ os.path.join(self.tempdir.name, SIM_NAME, "evas", f"evas-{2 ** PUSH_POW:016x}"),
]
- def file_list_1(self):
+ def files_on_second_push(self):
return [
- *self.file_list_0(),
- os.path.join(self.tempdir.name, TestRun.NAME, "evas", f"evas-{2 * (2 ** TestRun.PUSH_POW):016x}"),
+ *self.files_on_first_push(),
+ os.path.join(self.tempdir.name, SIM_NAME, "evas", f"evas-{2 * (2 ** PUSH_POW):016x}"),
]
def test_null(self):
for cmd in self.cmds_null():
SalisTest.run_subprocess(cmd[0])
- self.assert_file_list_exists(self.file_list_0())
+ self.assert_file_list_exists(self.files_on_first_push())
SalisTest.run_subprocess(cmd[1])
- self.assert_file_list_exists(self.file_list_1())
+ self.assert_file_list_exists(self.files_on_second_push())
def test_v1(self):
for cmd in self.cmds_v1():
SalisTest.run_subprocess(cmd[0])
- self.assert_file_list_exists(self.file_list_0())
+ self.assert_file_list_exists(self.files_on_first_push())
SalisTest.run_subprocess(cmd[1])
- self.assert_file_list_exists(self.file_list_1())
+ self.assert_file_list_exists(self.files_on_second_push())
diff --git a/test/test_v1.py b/test/test_v1.py
index 783dc38..a54d390 100644
--- a/test/test_v1.py
+++ b/test/test_v1.py
@@ -1,46 +1,52 @@
from test_general import SalisTest
+SIM_OPTS = {
+ "anc_path": "test/anc",
+ "ui_path": "test/ui/v1",
+ "vm_arch": "v1",
+}
+
class TestV1(SalisTest):
- @SalisTest.run_ui_test(anc="noops", anc_path="test/anc", ui="noops", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="noops", ui="noops")
def test_noops(self):
pass
- @SalisTest.run_ui_test(anc="jumps", anc_path="test/anc", ui="jumps", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="jumps", ui="jumps")
def test_jumps(self):
pass
- @SalisTest.run_ui_test(anc="addrs", anc_path="test/anc", ui="addrs", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="addrs", ui="addrs")
def test_addrs(self):
pass
- @SalisTest.run_ui_test(anc="ifnzs", anc_path="test/anc", ui="ifnzs", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="ifnzs", ui="ifnzs")
def test_ifnzs(self):
pass
- @SalisTest.run_ui_test(anc="allos", anc_path="test/anc", ui="allos", ui_path="test/ui/v1", vm_arch="v1", clones=2)
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="allos", ui="allos", clones=2)
def test_allos(self):
pass
- @SalisTest.run_ui_test(anc="mbops", anc_path="test/anc", ui="mbops", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="mbops", ui="mbops")
def test_mbops(self):
pass
- @SalisTest.run_ui_test(anc="3rops", anc_path="test/anc", ui="3rops", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="3rops", ui="3rops")
def test_3rops(self):
pass
- @SalisTest.run_ui_test(anc="1rops", anc_path="test/anc", ui="1rops", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="1rops", ui="1rops")
def test_1rops(self):
pass
- @SalisTest.run_ui_test(anc="stack", anc_path="test/anc", ui="stack", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="stack", ui="stack")
def test_stack(self):
pass
- @SalisTest.run_ui_test(anc="ioops", anc_path="test/anc", ui="ioops", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="ioops", ui="ioops")
def test_ioops(self):
pass
- @SalisTest.run_ui_test(anc="2rops", anc_path="test/anc", ui="2rops", ui_path="test/ui/v1", vm_arch="v1")
+ @SalisTest.run_ui_test(**SIM_OPTS, anc="2rops", ui="2rops")
def test_2rops(self):
pass