Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions .github/workflows/examples.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: Examples

on:
push:
branches: [ "main" ]
paths:
- ".github/workflows/examples.yml"
- "examples/**"
- "basis-library/**"
- "mlton/**"
- "runtime/**"
- "include/**"
- "Makefile"
- "Makefile.config"
- "default.nix"
- "Dockerfile.amd64"
- "Dockerfile.arm64"
- "docker-bake.hcl"
pull_request:
branches: [ "main" ]
paths:
- ".github/workflows/examples.yml"
- "examples/**"
- "basis-library/**"
- "mlton/**"
- "runtime/**"
- "include/**"
- "Makefile"
- "Makefile.config"
- "default.nix"
- "Dockerfile.amd64"
- "Dockerfile.arm64"
- "docker-bake.hcl"

jobs:
build-and-run-examples:
runs-on: ubuntu-latest
timeout-minutes: 45

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y mlton libgmp-dev gcc make

- name: Cache MPL compiler
id: cache-mpl
uses: actions/cache@v4
with:
path: build
key: mpl-${{ runner.os }}-${{ hashFiles('mlton/**', 'runtime/**', 'include/**', 'basis-library/**', 'Makefile', 'Makefile.config') }}

- name: Build MPL compiler
if: steps.cache-mpl.outputs.cache-hit != 'true'
run: make --silent

- name: Build examples
run: make -C examples --silent

- name: Run examples smoke tests
run: |
set -euo pipefail
cd examples

# Strip timing information from program output.
# Removes "... in X.XXXXs" and "Finished in: X.XXXXs" substrings,
# then removes any resulting blank lines.
strip_timing() {
sed -E \
-e 's/[Ff]inished in:? [0-9]+\.[0-9]+s\.?//g' \
-e 's/ in [0-9]+\.[0-9]+s\.?//g' \
-e 's/[[:space:]]+$//' \
| sed '/^$/d'
}

fail=0
check_output() {
local name="$1"
shift
local actual
actual=$("$@" 2>&1 | strip_timing)
local expected
expected=$(cat "expected/${name}.ok")
if [ "$actual" != "$expected" ]; then
echo "FAIL: $name"
diff <(echo "$actual") <(echo "$expected") || true
fail=1
else
echo "PASS: $name"
fi
}

check_output fib ./bin/fib -N 20
check_output random ./bin/random -N 1000 -seed 1
check_output primes ./bin/primes -N 10000
check_output msort ./bin/msort -N 20000
check_output dmm ./bin/dmm -N 16
check_output ray bash -c './bin/ray -m 32 -n 32 -s rgbbox -f ray_result.ppm && echo "ray_result.ppm checksum: $(md5sum ray_result.ppm | cut -d" " -f1)"'
check_output nn ./bin/nn -N 500
check_output nqueens ./bin/nqueens -N 10
check_output coins ./bin/coins -N 100 -repeat 1
check_output tokens ./bin/tokens expected/input.txt
check_output dedup ./bin/dedup expected/input.txt
check_output seam-carve bash -c './bin/seam-carve ray_result.ppm -num-seams 5 -output seam_result.gif && echo "seam_result.gif checksum: $(md5sum seam_result.gif | cut -d" " -f1)"'
check_output reverb bash -c './bin/reverb expected/test.wav -output reverb_result.wav && echo "reverb_result.wav checksum: $(md5sum reverb_result.wav | cut -d" " -f1)"'

if [ "$fail" -ne 0 ]; then
echo "Some output checks failed!"
exit 1
fi
3 changes: 3 additions & 0 deletions examples/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
bin/
ray_result.ppm
seam_result.gif
reverb_result.wav
4 changes: 4 additions & 0 deletions examples/expected/coins.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
N 100
sequential? false
repeat 1
Parallel: 243.
8 changes: 8 additions & 0 deletions examples/expected/dedup.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
brown
quick
jumps
lazy
the
fox
dog
over
3 changes: 3 additions & 0 deletions examples/expected/dmm.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
generating matrices of sidelength 16
multiplying
result [16.0, 16.0, 16.0, ..., 16.0]
2 changes: 2 additions & 0 deletions examples/expected/fib.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
fib 20
result 6765
2 changes: 2 additions & 0 deletions examples/expected/input.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
the quick brown fox jumps over the lazy dog
the fox the fox the dog
3 changes: 3 additions & 0 deletions examples/expected/msort.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
generating 20000 random integers
sorting
result [1, 2, 3, 6, 6, 7, 8, ..., 19999]
7 changes: 7 additions & 0 deletions examples/expected/nn.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
N 500
generated input
built quadtree
found all neighbors
result [359, 396, 463, ..., 340]
to see output, use -output and -resolution arguments
for example: nn -N 10000 -output result.ppm -resolution 1000
2 changes: 2 additions & 0 deletions examples/expected/nqueens.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
counting number of 10x10 solutions
result 724
3 changes: 3 additions & 0 deletions examples/expected/primes.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
generating primes up to 10000
number of primes 1229
result [2, 3, 5, 7, 11, 13, 17, ..., 9973]
3 changes: 3 additions & 0 deletions examples/expected/random.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
tabulate 1000 pseudo-random 64-bit words
seed 1
result [AE5DE3C06E3E5C7A, 9B3DDF966C314FED, ..., D1BFFB87661C5706]
5 changes: 5 additions & 0 deletions examples/expected/ray.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Using scene 'rgbbox' (-s to switch).
Scene BVH construction
Rendering
Writing image to ray_result.ppm.
ray_result.ppm checksum: 032cf4f851743a2aca85dd662551330e
4 changes: 4 additions & 0 deletions examples/expected/reverb.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
read sound
reverberated
wrote output
reverb_result.wav checksum: 39c9c6c243f68588951d28c83a9b805e
11 changes: 11 additions & 0 deletions examples/expected/seam-carve.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
block-width 80
num-seams 5
read image
height 32
width 32
seam carving...
computed seam carving index
remapped color palette
generated images
wrote to seam_result.gif
seam_result.gif checksum: 6e1699d1291f5e1b0438a5df4495575e
Binary file added examples/expected/test.wav
Binary file not shown.
15 changes: 15 additions & 0 deletions examples/expected/tokens.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
the
quick
brown
fox
jumps
over
the
lazy
dog
the
fox
the
fox
the
dog
3 changes: 3 additions & 0 deletions examples/src/dmm/main.sml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@ val _ = print ("multiplying\n")
val (result, tm) = Util.getTime (fn _ => TreeMatrix.multiply (input, input))

val _ = print ("finished in " ^ Time.fmt 4 tm ^ "s\n")

val flat = TreeMatrix.flatten result
val _ = print ("result " ^ Util.summarizeArray 4 (Real.fmt (StringCvt.FIX (SOME 1))) flat ^ "\n")
1 change: 1 addition & 0 deletions examples/src/nn/main.sml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ val _ = print ("built quadtree in " ^ Time.fmt 4 tm ^ "s\n")

val (nbrs, tm) = Util.getTime (fn _ => NN.allNearestNeighbors grain tree)
val _ = print ("found all neighbors in " ^ Time.fmt 4 tm ^ "s\n")
val _ = print ("result " ^ Util.summarizeArraySlice 4 Int.toString nbrs ^ "\n")

(* now input[nbrs[i]] is the closest point to input[i] *)

Expand Down
Loading