#!/bin/bash # Repeatedly stop building until successive layers, and run all tests built, # while checking for undefined behavior using both UBSan and Valgrind. # # Requires Linux. # # Usage: # Test all layers: # test_layers # Test non-app layers after x: # test_layers x # Test layers after x and until y (inclusive): # test_layers x y # Test all layers for a specific app: # test_layers app if [[ $1 == one-off ]] then make ./mu_bin test || exit 1 exit 0 fi # Core layers atop Valgrind for f in [0-9]* do if [[ $f < $1 ]]; then continue; fi if [[ $2 && $f > $2 ]]; then exit 0; fi echo "=== $f" ./build_until $f || exit 1 valgrind --leak-check=yes --num-callers=40 -q --error-exitcode=1 ./mu_bin test || exit 1 done # Layers for Mu apps without Valgrind CXX=clang++ CXXFLAGS="-O3 -fsanitize=undefined -Wno-tautological-constant-out-of-range-compare" make if [[ ! $1 || $1 == chessboard ]] then echo "=== chessboard" ./mu_bin test chessboard.mu || exit 1 fi # slices of edit/ for Travis CI if [[ ! $1 || $1 == edit ]] then echo "=== edit: until 001" ./mu_bin test edit/001* || exit 1 echo "=== edit: until 002" ./mu_bin test edit/00[1-2]* || exit 1 echo "=== edit: until 003" ./mu_bin test edit/00[1-3]* || exit 1 fi if [[ ! $1 || $1 == edit2 ]] then echo "=== edit: until 004" ./mu_bin test edit/00[1-4]* || exit 1 echo "=== edit: until 005" ./mu_bin test edit/00[1-5]* || exit 1 echo "=== edit: until 006" ./mu_bin test edit/00[1-6]* || exit 1 fi if [[ ! $1 || $1 == edit3 ]] then echo "=== edit: until 007" ./mu_bin test edit/00[1-7]* || exit 1 echo "=== edit: until 008" ./mu_bin test edit/00[1-8]* || exit 1 echo "=== edit: until 009" ./mu_bin test edit/00* || exit 1 fi if [[ ! $1 || $1 == edit4 ]] then echo "=== edit: until 010" ./mu_bin test edit/00* edit/010* || exit 1 echo "=== edit: until 011" ./mu_bin test edit/00* edit/01[01]* || exit 1 fi