diff options
| -rw-r--r-- | test/anc/v1/datat.asm | 12 | ||||
| -rw-r--r-- | test/test_build.py | 30 | ||||
| -rw-r--r-- | test/test_data_v1.py | 81 | ||||
| -rw-r--r-- | test/test_general.py | 11 | ||||
| -rw-r--r-- | test/test_run.py | 30 | ||||
| -rw-r--r-- | test/test_v1.py | 28 |
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 |
