v4 / .github / workflows / macos_ci.yml
519 lines · 481 sloc · 23.89 KB · bde90fa1948f698c2b3d395f0ebc234a54c15498
Raw
1name: CI macOS
2
3on:
4 push:
5 branches:
6 - master
7 paths-ignore:
8 - '**.md'
9 - '**.yml'
10 - '!**/macos_ci.yml'
11 - 'cmd/tools/**'
12 - '!cmd/tools/builders/**.v'
13 pull_request:
14 paths-ignore:
15 - '**.md'
16 - '**.yml'
17 - '!**/macos_ci.yml'
18 - 'cmd/tools/**'
19 - '!cmd/tools/builders/**.v'
20
21concurrency:
22 group: macos-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
23 cancel-in-progress: true
24
25jobs:
26 clang-macos:
27 strategy:
28 matrix:
29 os: [macos-14]
30 fail-fast: false
31 runs-on: ${{ matrix.os }}
32 timeout-minutes: 151
33 env:
34 VFLAGS: -cc clang
35 VTEST_SHOW_LONGEST_BY_RUNTIME: 3
36 VTEST_SHOW_LONGEST_BY_COMPTIME: 3
37 VTEST_SHOW_LONGEST_BY_TOTALTIME: 3
38 steps:
39 - uses: actions/checkout@v7
40 - name: Cache Homebrew downloads
41 uses: actions/cache@v6
42 with:
43 path: ~/Library/Caches/Homebrew
44 key: brew-${{ matrix.os }}-${{ hashFiles('.github/workflows/macos_ci.yml', 'ci/macos_ci.vsh') }}
45 restore-keys: |
46 brew-${{ matrix.os }}-
47 - name: Build V
48 run: make -j4 && ./v symlink
49 - name: Test symlink
50 run: v run ci/macos_ci.vsh test_symlink
51 - name: v doctor
52 run: v run ci/macos_ci.vsh v_doctor
53 - name: Build v with -prealloc
54 run: v run ci/macos_ci.vsh build_v_with_prealloc
55 - name: Test cross compilation to Linux
56 run: v run ci/macos_ci.vsh test_cross_compilation
57 - name: Test inline assembly on macos
58 run: v run ci/macos_ci.vsh test_inline_assembly
59 - name: Build V with -cstrict
60 run: v run ci/macos_ci.vsh build_with_cstrict
61 - name: All code is formatted
62 run: v run ci/macos_ci.vsh all_code_is_formatted
63 - name: Run sanitizers
64 run: v run ci/macos_ci.vsh run_sanitizers
65 - name: Build V using V
66 run: v run ci/macos_ci.vsh build_using_v
67 - name: Verify `v test` works
68 run: v run ci/macos_ci.vsh verify_v_test_works
69 - name: Install iconv for encoding.iconv
70 run: v run ci/macos_ci.vsh install_iconv
71 - name: Test pure V math module
72 run: v run ci/macos_ci.vsh test_pure_v_math_module
73 - name: Self tests
74 run: v run ci/macos_ci.vsh self_tests
75 - name: Build examples
76 run: v run ci/macos_ci.vsh build_examples
77 - name: Build tetris with -autofree
78 run: v run ci/macos_ci.vsh build_tetris_autofree
79 - name: Build blog tutorial with -autofree
80 run: v run ci/macos_ci.vsh build_blog_autofree
81 - name: Build examples with -prod
82 run: v run ci/macos_ci.vsh build_examples_prod
83 - name: Build examples with V build with tcc
84 run: v run ci/macos_ci.vsh build_examples_v_compiled_with_tcc
85 ## - name: V self compilation with -usecache
86 ## run: v run ci/macos_ci.vsh v_self_compilation_usecache
87 - name: V self compilation with -parallel-cc
88 run: v run ci/macos_ci.vsh v_self_compilation_parallel_cc
89 - name: v2 test suite
90 if: ${{ false }} # Temporarily disabled.
91 run: v run cmd/v2/test_all.vsh -prod
92 - name: Test password input
93 run: v run ci/macos_ci.vsh test_password_input
94 - name: Test readline
95 run: v run ci/macos_ci.vsh test_readline
96
97 v2-x64-native-macos:
98 if: ${{ false }} # Temporarily disabled.
99 runs-on: macos-15-intel
100 timeout-minutes: 30
101 steps:
102 - uses: actions/checkout@v7
103 - name: Build V
104 run: make -j4
105 - name: backend x64 regressions
106 run: |
107 set -e
108
109 VJOBS=1 ./v test \
110 vlib/v2_toberemoved/abi \
111 vlib/v2_toberemoved/gen/x64/x64_abi_test.v \
112 vlib/v2_toberemoved/gen/x64/x64_backend_diagnostics_test.v \
113 vlib/v2_toberemoved/gen/x64/x64_object_format_test.v \
114 vlib/v2_toberemoved/gen/x64/x64_pe_linker_test.v \
115 vlib/v2_toberemoved/ssa/tree_sumtype_lowering_test.v
116 VJOBS=1 ./v test -run-only test_module_qualified_alias_array_field_index_has_alias_element_type,test_module_storage_legacy_direct_import_nested_module_selector_uses_declared_leaf_module,test_module_storage_flat_direct_import_nested_module_selector_uses_declared_leaf_module vlib/v2_toberemoved/ssa/module_storage_test.v
117 VJOBS=1 ./v test -run-only test_temporary_generic_receiver_init_maps_method_generic,test_temporary_generic_call_receiver_maps_method_generic,test_temporary_generic_selector_receiver_maps_method_generic,test_identifier_generic_receiver_from_call_maps_method_generic vlib/v2_toberemoved/types/checker_test.v
118 VJOBS=1 ./v test -run-only test_worker_clone_sees_sumtype_decl_variant_cache,test_sumtype_decl_variant_cache_records_concrete_generic_variants_only,test_generic_sumtype_match_uses_full_specialization_when_generic_base_repeats,test_flat_direct_generic_sumtype_match_uses_full_specialization_when_generic_base_repeats,test_generic_sumtype_match_smartcast_scans_full_specialization_body,test_flat_direct_generic_sumtype_match_smartcast_scans_full_specialization_body,test_nested_module_concrete_generic_sumtype_base_does_not_fall_back_to_local_tree,test_leaf_module_concrete_generic_sumtype_base_fallback_beats_parent_module_tree vlib/v2_toberemoved/transformer/monomorphize_test.v
119 VJOBS=1 ./v test -run-only test_x64_macos_windows_math_log_20_stdout_exact_bytes,test_x64_macos_windows_generic_sumtype_repeated_base_specialization_stdout_exact_bytes,test_x64_macos_windows_formatted_int_interpolation_stdout_exact_bytes,test_x64_macos_windows_formatted_int_width_100_interpolation_stdout_exact_bytes,test_x64_macos_windows_formatted_f64_interpolation_stdout_exact_bytes,test_x64_macos_windows_formatted_string_return_lifetime_stdout_exact_bytes,test_x64_macos_windows_spectral_reduced_formatted_stdout_exact_bytes,test_x64_macos_windows_bits_len32_stdout_exact_bytes,test_x64_macos_windows_rand_u32n_interface_result_stdout_exact_bytes,test_x64_macos_windows_rand_intn_range_interface_result_stdout_exact_bytes,test_x64_macos_windows_textscanner_embedded_parser_stdout_exact_bytes,test_x64_macos_windows_struct_positional_side_effect_stdout_exact_bytes,test_x64_macos_windows_struct_named_side_effect_stdout_exact_bytes,test_x64_macos_windows_unrelated_same_shape_struct_stdout_exact_bytes,test_x64_macos_windows_named_init_embedded_value_stdout_exact_bytes,test_x64_macos_windows_get_raw_line_example_stdin_stdout_exact_bytes,test_x64_macos_windows_mini_calculator_example_stdin_stdout_exact_bytes,test_x64_macos_windows_mini_calculator_recursive_descent_example_stdin_stdout_exact_bytes,test_x64_macos_external_c_flag_source_uses_hosted_link_with_compile_flags vlib/v2_toberemoved/gen/x64/x64_runtime_smoke_test.v
120 ./v test vlib/v2_toberemoved/builder/native_test.v vlib/v2_toberemoved/builder/target_os_test.v
121 ./v test vlib/v2_toberemoved/ssa/optimize
122 V2_VERIFY_STRICT=1 ./v test vlib/v2_toberemoved/ssa/optimize
123
124 - name: backend x64 examples
125 run: |
126 set -e
127
128 tmp="$(mktemp -d)"
129 trap 'rm -rf "$tmp"' EXIT
130
131 check_empty_stderr() {
132 label="$1"
133 stderr="$2"
134 if [ -s "$stderr" ]; then
135 echo "::error::$label wrote to stderr"
136 cat "$stderr"
137 return 1
138 fi
139 }
140
141 check_v_run_stderr() {
142 label="$1"
143 stderr="$2"
144 if [ ! -s "$stderr" ]; then
145 return 0
146 fi
147 if python3 - "$stderr" <<'PY'
148 import re
149 import sys
150
151 text = open(sys.argv[1], "rb").read().decode("utf-8", "replace")
152 text = re.sub(r"\x1b\[[0-?]*[ -/]*[@-~]", "", text).strip()
153 expected = "warning: tcc compilation failed, falling back to cc (this is much slower)"
154 raise SystemExit(0 if text == expected else 1)
155 PY
156 then
157 return 0
158 fi
159 echo "::error::$label wrote unexpected stderr"
160 cat "$stderr"
161 return 1
162 }
163
164 check_stdout() {
165 label="$1"
166 expected="$2"
167 actual="$3"
168 if ! cmp -s "$expected" "$actual"; then
169 echo "::error::$label stdout mismatch"
170 echo "expected:"
171 cat "$expected"
172 echo "actual:"
173 cat "$actual"
174 return 1
175 fi
176 }
177
178 run_native_x64_example() {
179 source="$1"
180 name="$2"
181 expected="$3"
182 shift 3
183
184 ./v -v2 -no-parallel -b x64 "$source" -o "$tmp/$name"
185 "$tmp/$name" "$@" > "$tmp/$name.out" 2> "$tmp/$name.err"
186 check_empty_stderr "$name" "$tmp/$name.err"
187 check_stdout "$name" "$expected" "$tmp/$name.out"
188 }
189
190 run_native_x64_example_with_stdin() {
191 source="$1"
192 name="$2"
193 input="$3"
194 expected="$4"
195 shift 4
196
197 ./v -v2 -no-parallel -b x64 "$source" -o "$tmp/$name"
198 "$tmp/$name" "$@" < "$input" > "$tmp/$name.out" 2> "$tmp/$name.err"
199 check_empty_stderr "$name" "$tmp/$name.err"
200 check_stdout "$name" "$expected" "$tmp/$name.out"
201 }
202
203 run_native_x64_example_capture() {
204 source="$1"
205 name="$2"
206 shift 2
207
208 ./v -v2 -no-parallel -b x64 "$source" -o "$tmp/$name"
209 "$tmp/$name" "$@" > "$tmp/$name.out" 2> "$tmp/$name.err"
210 check_empty_stderr "$name" "$tmp/$name.err"
211 }
212
213 check_random_ips_stdout() {
214 label="$1"
215 actual="$2"
216 python3 - "$label" "$actual" <<'PY'
217 import sys
218
219 label = sys.argv[1]
220 path = sys.argv[2]
221 lines = open(path, "r", encoding="utf-8").read().splitlines()
222 if len(lines) != 10:
223 raise SystemExit(f"{label}: expected 10 lines, got {len(lines)}")
224 rows = []
225 for line in lines:
226 parts = line.split(".")
227 if len(parts) != 4:
228 raise SystemExit(f"{label}: invalid IPv4 shape: {line!r}")
229 row = []
230 for part in parts:
231 if not part.isdigit():
232 raise SystemExit(f"{label}: non-numeric octet in {line!r}")
233 value = int(part)
234 if value < 0 or value > 254:
235 raise SystemExit(f"{label}: octet out of range in {line!r}")
236 row.append(value)
237 rows.append(tuple(row))
238 if len(set(rows)) < 3:
239 raise SystemExit(f"{label}: output has too little row diversity")
240 if all(row[1] == 0 for row in rows) and all(row[3] == 0 for row in rows):
241 raise SystemExit(f"{label}: suspicious old x.0.x.0 pattern")
242 PY
243 }
244
245 check_rule110_stdout() {
246 label="$1"
247 actual="$2"
248 width="$3"
249 python3 - "$label" "$actual" "$width" <<'PY'
250 import sys
251
252 label = sys.argv[1]
253 path = sys.argv[2]
254 width = int(sys.argv[3])
255 lines = open(path, "r", encoding="utf-8").read().splitlines()
256 title = "Rule 110 V Implementation"
257 title_lines = [idx for idx, line in enumerate(lines) if title in line]
258 if not title_lines:
259 raise SystemExit(f"{label}: missing title")
260 idx = title_lines[0]
261 generations = lines[idx + 1:]
262 if generations and generations[0] == "":
263 generations = generations[1:]
264 if len(generations) != width:
265 raise SystemExit(f"{label}: expected {width} generation lines, got {len(generations)}")
266 for line in generations:
267 if len(line) != width:
268 raise SystemExit(f"{label}: generation line has width {len(line)}, expected {width}: {line!r}")
269 if any(ch not in " *" for ch in line):
270 raise SystemExit(f"{label}: invalid generation chars: {line!r}")
271 if not any("*" in line for line in generations):
272 raise SystemExit(f"{label}: expected at least one live cell")
273 if len(set(generations)) < 3:
274 raise SystemExit(f"{label}: expected at least 3 distinct generation lines")
275 PY
276 }
277
278 write_v_run_expected() {
279 source="$1"
280 expected="$2"
281 shift 2
282 stderr="$tmp/$(basename "$expected").stderr"
283 ./v run "$source" "$@" > "$expected" 2> "$stderr"
284 check_v_run_stderr "v run $source $*" "$stderr"
285 }
286
287 write_v_run_expected_with_stdin() {
288 source="$1"
289 input="$2"
290 expected="$3"
291 shift 3
292 stderr="$tmp/$(basename "$expected").stderr"
293 ./v run "$source" "$@" < "$input" > "$expected" 2> "$stderr"
294 check_v_run_stderr "v run $source $*" "$stderr"
295 }
296
297 write_fizz_buzz_expected() {
298 i=1
299 while [ "$i" -le 100 ]; do
300 if [ $((i % 15)) -eq 0 ]; then
301 echo FizzBuzz
302 elif [ $((i % 3)) -eq 0 ]; then
303 echo Fizz
304 elif [ $((i % 5)) -eq 0 ]; then
305 echo Buzz
306 else
307 echo "$i"
308 fi
309 i=$((i + 1))
310 done
311 }
312
313 write_hanoi_expected() {
314 python3 - <<'PY'
315 def hanoi(n, a, b, c):
316 if n == 1:
317 print(f"Disc 1 from {a} to {c}...")
318 else:
319 hanoi(n - 1, a, c, b)
320 print(f"Disc {n} from {a} to {c}...")
321 hanoi(n - 1, b, a, c)
322
323 hanoi(7, "A", "B", "C")
324 PY
325 }
326
327 write_sudoku_expected() {
328 python3 - <<'PY'
329 import sys
330
331 puzzle = [
332 [0, 3, 0, 0, 7, 0, 0, 0, 0],
333 [0, 0, 0, 1, 3, 5, 0, 0, 0],
334 [0, 0, 1, 0, 0, 0, 0, 5, 0],
335 [1, 0, 0, 0, 6, 0, 0, 0, 3],
336 [4, 0, 0, 8, 0, 3, 0, 0, 1],
337 [7, 0, 0, 0, 2, 0, 0, 0, 6],
338 [0, 0, 0, 0, 0, 0, 2, 1, 0],
339 [0, 0, 0, 4, 1, 2, 0, 0, 5],
340 [0, 0, 0, 0, 0, 0, 0, 7, 4],
341 ]
342 solution = [
343 [2, 3, 5, 6, 7, 8, 1, 4, 9],
344 [9, 4, 7, 1, 3, 5, 8, 6, 2],
345 [6, 8, 1, 2, 4, 9, 3, 5, 7],
346 [1, 2, 8, 7, 6, 4, 5, 9, 3],
347 [4, 5, 6, 8, 9, 3, 7, 2, 1],
348 [7, 9, 3, 5, 2, 1, 4, 8, 6],
349 [3, 6, 4, 9, 5, 7, 2, 1, 8],
350 [8, 7, 9, 4, 1, 2, 6, 3, 5],
351 [5, 1, 2, 3, 8, 6, 9, 7, 4],
352 ]
353
354 def append_grid(lines, label, grid):
355 lines.append(label)
356 for i, row in enumerate(grid):
357 if i % 3 == 0 and i != 0:
358 lines.append("- - - - - - - - - - - -")
359 line = ""
360 for j, value in enumerate(row):
361 if j % 3 == 0 and j != 0:
362 line += " | "
363 line += f"{value} "
364 lines.append(line)
365
366 lines = []
367 append_grid(lines, "Sudoku Puzzle:", puzzle)
368 lines.append("Solving...")
369 append_grid(lines, "Solution:", solution)
370 out = ("\n".join(lines) + "\n").encode()
371 if len(out) != 582:
372 raise SystemExit(f"sudoku stdout oracle shape changed: {len(out)} bytes")
373 sys.stdout.buffer.write(out)
374 PY
375 }
376
377 write_tree_of_nodes_expected() {
378 cat <<'EOF'
379 tree structure:
380 Node{
381 value: 10
382 left: Tree(Node{
383 value: 30
384 left: Tree(Empty{})
385 right: Tree(Empty{})
386 })
387 right: Tree(Node{
388 value: 20
389 left: Tree(Empty{})
390 right: Tree(Empty{})
391 })
392 }
393 tree size: 3
394 EOF
395 }
396
397 write_js_hello_world_expected() {
398 printf 'Hello from V.js (0)\nHello from V.js (1)\nHello from V.js (2)\n'
399 }
400
401 write_vascii_expected() {
402 python3 - <<'PY'
403 from pathlib import Path
404 import sys
405
406 source = Path("examples/vascii.v").read_text(encoding="utf-8")
407 start_marker = "println('"
408 end_marker = "')"
409 if source.count(start_marker) != 1:
410 raise SystemExit("vascii stdout oracle expects one single-quoted println literal")
411 start = source.index(start_marker) + len(start_marker)
412 end = source.rindex(end_marker)
413 if source[end + len(end_marker):].strip() != "}":
414 raise SystemExit("vascii stdout oracle expects the println literal to be the final main statement")
415
416 out = bytearray()
417 literal = source[start:end]
418 i = 0
419 while i < len(literal):
420 ch = literal[i]
421 if ch == "\\":
422 i += 1
423 if i >= len(literal):
424 raise SystemExit("unterminated escape in vascii literal")
425 escaped = literal[i]
426 if escaped == "n":
427 out.append(10)
428 elif escaped == "t":
429 out.append(9)
430 elif escaped == "r":
431 out.append(13)
432 elif escaped == "\\":
433 out.append(92)
434 elif escaped == "'":
435 out.append(39)
436 elif escaped == '"':
437 out.append(34)
438 else:
439 out.extend(escaped.encode("utf-8"))
440 else:
441 out.extend(ch.encode("utf-8"))
442 i += 1
443 out.append(10)
444 sys.stdout.buffer.write(out)
445 PY
446 }
447
448 write_rune_expected() {
449 printf '\360\237\230\200\n@\n'
450 }
451
452 printf 'Hello, World!\n' > "$tmp/hello_world.expected"
453 write_fizz_buzz_expected > "$tmp/fizz_buzz.expected"
454 write_hanoi_expected > "$tmp/hanoi.expected"
455 write_sudoku_expected > "$tmp/sudoku.expected"
456 printf 'HELLO WORLD\nHELLO WORLD\nHELLO WORLD\n' > "$tmp/function_types.expected"
457 printf '5\n3\n' > "$tmp/submodule.expected"
458 printf '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n' > "$tmp/fibonacci_10.expected"
459 printf '120\n' > "$tmp/dump_factorial.expected"
460 write_v_run_expected examples/primes.v "$tmp/primes_20.expected" 20
461 write_tree_of_nodes_expected > "$tmp/tree_of_nodes.expected"
462 write_js_hello_world_expected > "$tmp/js_hello_world.expected"
463 write_vascii_expected > "$tmp/vascii.expected"
464 write_rune_expected > "$tmp/rune.expected"
465 write_v_run_expected examples/graphs/bfs.v "$tmp/bfs.expected"
466 write_v_run_expected examples/graphs/bfs3.v "$tmp/bfs3.expected"
467 write_v_run_expected examples/graphs/dfs.v "$tmp/dfs.expected"
468 write_v_run_expected examples/graphs/dijkstra.v "$tmp/dijkstra.expected"
469 write_v_run_expected examples/graphs/topological_sorting_greedy.v "$tmp/topological_sorting_greedy.expected"
470 write_v_run_expected examples/graphs/topological_sorting_dfs.v "$tmp/topological_sorting_dfs.expected"
471 write_v_run_expected examples/graphs/dfs2.v "$tmp/dfs2.expected"
472 write_v_run_expected examples/graphs/minimal_spann_tree_prim.v "$tmp/minimal_spann_tree_prim.expected"
473 write_v_run_expected examples/graphs/bellman-ford.v "$tmp/bellman_ford.expected"
474 write_v_run_expected examples/binary_search_tree.v "$tmp/binary_search_tree.expected"
475 printf 'wrong format\nempty input\n' > "$tmp/errors.expected"
476 write_v_run_expected examples/custom_error.v "$tmp/custom_error.expected"
477 write_v_run_expected examples/spectral.v "$tmp/spectral_10.expected" 10
478 printf 'length of random array is 1000\nbefore quick sort whether array is sorted: false\nafter quick sort whether array is sorted: true\n' > "$tmp/quick_sort.expected"
479 printf 'hello\nworld\n' > "$tmp/get_raw_line.in"
480 write_v_run_expected_with_stdin examples/get_raw_line.v "$tmp/get_raw_line.in" "$tmp/get_raw_line.expected"
481 printf '3+4*2\nexit\n' > "$tmp/mini_calculator.in"
482 write_v_run_expected_with_stdin examples/mini_calculator.v "$tmp/mini_calculator.in" "$tmp/mini_calculator.expected"
483 printf '3+4*2\nexit\n' > "$tmp/mini_calculator_recursive_descent.in"
484 write_v_run_expected_with_stdin examples/mini_calculator_recursive_descent.v "$tmp/mini_calculator_recursive_descent.in" "$tmp/mini_calculator_recursive_descent.expected"
485
486 run_native_x64_example examples/hello_world.v hello_world "$tmp/hello_world.expected"
487 run_native_x64_example examples/fizz_buzz.v fizz_buzz "$tmp/fizz_buzz.expected"
488 run_native_x64_example examples/hanoi.v hanoi "$tmp/hanoi.expected"
489 run_native_x64_example examples/sudoku.v sudoku "$tmp/sudoku.expected"
490 run_native_x64_example examples/function_types.v function_types "$tmp/function_types.expected"
491 run_native_x64_example examples/submodule/main.v submodule "$tmp/submodule.expected"
492 run_native_x64_example examples/fibonacci.v fibonacci "$tmp/fibonacci_10.expected" 10
493 run_native_x64_example examples/dump_factorial.v dump_factorial "$tmp/dump_factorial.expected"
494 run_native_x64_example examples/primes.v primes "$tmp/primes_20.expected" 20
495 run_native_x64_example examples/tree_of_nodes.v tree_of_nodes "$tmp/tree_of_nodes.expected"
496 run_native_x64_example examples/js_hello_world.v js_hello_world "$tmp/js_hello_world.expected"
497 run_native_x64_example examples/vascii.v vascii "$tmp/vascii.expected"
498 run_native_x64_example examples/rune.v rune "$tmp/rune.expected"
499 run_native_x64_example examples/graphs/bfs.v bfs "$tmp/bfs.expected"
500 run_native_x64_example examples/graphs/bfs3.v bfs3 "$tmp/bfs3.expected"
501 run_native_x64_example examples/graphs/dfs.v dfs "$tmp/dfs.expected"
502 run_native_x64_example examples/graphs/dijkstra.v dijkstra "$tmp/dijkstra.expected"
503 run_native_x64_example examples/graphs/topological_sorting_greedy.v topological_sorting_greedy "$tmp/topological_sorting_greedy.expected"
504 run_native_x64_example examples/graphs/topological_sorting_dfs.v topological_sorting_dfs "$tmp/topological_sorting_dfs.expected"
505 run_native_x64_example examples/graphs/dfs2.v dfs2 "$tmp/dfs2.expected"
506 run_native_x64_example examples/graphs/minimal_spann_tree_prim.v minimal_spann_tree_prim "$tmp/minimal_spann_tree_prim.expected"
507 run_native_x64_example examples/graphs/bellman-ford.v bellman_ford "$tmp/bellman_ford.expected"
508 run_native_x64_example examples/binary_search_tree.v binary_search_tree "$tmp/binary_search_tree.expected"
509 run_native_x64_example examples/errors.v errors "$tmp/errors.expected"
510 run_native_x64_example examples/custom_error.v custom_error "$tmp/custom_error.expected"
511 run_native_x64_example examples/spectral.v spectral "$tmp/spectral_10.expected" 10
512 run_native_x64_example examples/quick_sort.v quick_sort "$tmp/quick_sort.expected"
513 run_native_x64_example_with_stdin examples/get_raw_line.v get_raw_line "$tmp/get_raw_line.in" "$tmp/get_raw_line.expected"
514 run_native_x64_example_with_stdin examples/mini_calculator.v mini_calculator "$tmp/mini_calculator.in" "$tmp/mini_calculator.expected"
515 run_native_x64_example_with_stdin examples/mini_calculator_recursive_descent.v mini_calculator_recursive_descent "$tmp/mini_calculator_recursive_descent.in" "$tmp/mini_calculator_recursive_descent.expected"
516 run_native_x64_example_capture examples/random_ips.v random_ips
517 check_random_ips_stdout random_ips "$tmp/random_ips.out"
518 run_native_x64_example_capture examples/rule110.v rule110 31
519 check_rule110_stdout rule110 "$tmp/rule110.out" 31
520