5from __future__
import annotations
9from esiaccel.cosim.pytest
import cosim_test
13from .conftest
import HW_DIR, check_lines, require_tool, run_cmd
16@cosim_test(HW_DIR / "esitester.py", args=("{tmp_dir}", "cosim"))
20 require_tool(
"esitester")
21 require_tool(
"esiquery")
24 conn = f
"{host}:{port}"
25 stdout = run_cmd([
"esitester",
"-v",
"cosim", conn,
"callback",
"-i",
"5"])
27 "[CONNECT] connecting to backend",
31 assert f
"callback: {i}" in stdout, \
32 f
"Expected 'callback: {i}' in stdout"
35 conn = f
"{host}:{port}"
36 stdout = run_cmd([
"esitester",
"cosim", conn,
"streaming_add"])
38 "Streaming add test results:",
39 "input[0]=222709 + 5 = 222714 (expected 222714)",
40 "input[1]=894611 + 5 = 894616 (expected 894616)",
41 "input[2]=772894 + 5 = 772899 (expected 772899)",
42 "input[3]=429150 + 5 = 429155 (expected 429155)",
43 "input[4]=629806 + 5 = 629811 (expected 629811)",
44 "Streaming add test passed",
48 conn = f
"{host}:{port}"
49 stdout = run_cmd([
"esitester",
"cosim", conn,
"streaming_add",
"-t"])
51 "Streaming add test results:",
52 "Streaming add test passed",
56 conn = f
"{host}:{port}"
57 stdout = run_cmd([
"esitester",
"cosim", conn,
"translate_coords"])
59 "Coord translate test results:",
60 "coord[0]=(222709,894611) + (10,20) = (222719,894631)",
61 "coord[1]=(772894,429150) + (10,20) = (772904,429170)",
62 "coord[2]=(629806,138727) + (10,20) = (629816,138747)",
63 "coord[3]=(218516,390276) + (10,20) = (218526,390296)",
64 "coord[4]=(750021,423525) + (10,20) = (750031,423545)",
65 "Coord translate test passed",
69 conn = f
"{host}:{port}"
71 [
"esitester",
"cosim", conn,
"serial_coords",
"-n",
"40",
"-b",
"33"])
73 "Serial coord translate test results:",
75 "Serial coord translate test passed",
79 conn = f
"{host}:{port}"
81 [
"esitester",
"cosim", conn,
"auto_serial_coords",
"-n",
"5"])
83 "Auto serial coord translate test results:",
85 "Auto serial coord translate test passed",
89 conn = f
"{host}:{port}"
90 stdout = run_cmd([
"esitester",
"cosim", conn,
"channel",
"-i",
"3"])
92 "[channel] producer i=0 got=0",
93 "[channel] producer i=1 got=1",
94 "[channel] producer i=2 got=2",
95 "[channel] loopback i=0",
96 "[channel] loopback i=1",
97 "[channel] loopback i=2",
98 "Channel test passed",
102 conn = f
"{host}:{port}"
103 stdout = run_cmd([
"esiquery",
"cosim", conn,
"telemetry"])
104 check_lines(stdout, [
106 "fromhostdma[32].fromHostCycles: 0",
107 "readmem[32].addrCmdCycles: 0",
108 "readmem[32].addrCmdIssued: 0",
109 "readmem[32].addrCmdResponses: 0",
110 "readmem[32].lastReadLSB: 0",
111 "tohostdma[32].toHostCycles: 0",
112 "tohostdma[32].totalWrites: 0",
113 "writemem[32].addrCmdCycles: 0",
114 "writemem[32].addrCmdIssued: 0",
115 "writemem[32].addrCmdResponses: 0",
119 """Test ChannelService ToHost and FromHost ports from Python."""
120 acc = conn.build_accelerator()
121 channel_test = acc.children[esiaccel.AppID(
"channel_test")]
122 ports = channel_test.ports
125 mmio = ports[esiaccel.AppID(
"cmd")]
126 assert isinstance(mmio, types.MMIORegion), \
127 f
"Expected MMIORegion, got {type(mmio)}"
129 producer = ports[esiaccel.AppID(
"producer")]
130 assert isinstance(producer, types.ToHostPort), \
131 f
"Expected ToHostPort, got {type(producer)}"
135 mmio.write(0x0, num_values)
136 for i
in range(num_values):
137 result = producer.read().result()
138 assert result == i, f
"Producer: expected {i}, got {result}"
141 loopback_in = ports[esiaccel.AppID(
"loopback_in")]
142 assert isinstance(loopback_in, types.FromHostPort), \
143 f
"Expected FromHostPort, got {type(loopback_in)}"
144 loopback_in.connect()
146 loopback_out = ports[esiaccel.AppID(
"loopback_out")]
147 assert isinstance(loopback_out, types.ToHostPort), \
148 f
"Expected ToHostPort, got {type(loopback_out)}"
149 loopback_out.connect()
152 loopback_in.write(42 + i)
153 result = loopback_out.read().result()
154 assert result == 42 + i, \
155 f
"Loopback: expected {42 + i}, got {result}"
158@cosim_test(HW_DIR / "esitester.py", args=("{tmp_dir}", "cosim_dma"))
162 require_tool(
"esitester")
163 require_tool(
"esiquery")
166 conn = f
"{host}:{port}"
167 run_cmd([
"esitester",
"cosim", conn,
"hostmem"])
170 conn = f
"{host}:{port}"
171 run_cmd([
"esitester",
"cosim", conn,
"dma",
"-w",
"-r"])
174 conn = f
"{host}:{port}"
175 stdout = run_cmd([
"esiquery",
"cosim", conn,
"telemetry"])
176 check_lines(stdout, [
178 "fromhostdma[32].fromHostCycles: 0",
179 "tohostdma[32].toHostCycles: 0",
183 conn = f
"{host}:{port}"
184 stdout = run_cmd([
"esitester",
"cosim", conn,
"channel",
"-i",
"3"])
185 check_lines(stdout, [
186 "[channel] producer i=0 got=0",
187 "[channel] producer i=1 got=1",
188 "[channel] producer i=2 got=2",
189 "[channel] loopback i=0",
190 "[channel] loopback i=1",
191 "[channel] loopback i=2",
192 "Channel test passed",
196 conn = f
"{host}:{port}"
198 [
"esitester",
"cosim", conn,
"serial_coords",
"-n",
"40",
"-b",
"33"])
199 check_lines(stdout, [
200 "Serial coord translate test results:",
202 "Serial coord translate test passed",
None test_hostmem(self, str host, int port)
None test_serial_coords(self, str host, int port)
None test_channel(self, str host, int port)
None test_telemetry(self, str host, int port)
None test_dma(self, str host, int port)
None test_callback(self, str host, int port)
None test_channel_python(self, AcceleratorConnection conn)
None test_streaming_add_quiet(self, str host, int port)
None test_channel(self, str host, int port)
None test_telemetry(self, str host, int port)
None test_translate_coords(self, str host, int port)
None test_streaming_add(self, str host, int port)
None test_serial_coords(self, str host, int port)
None test_auto_serial_coords(self, str host, int port)