Skip to content

Commit 089b631

Browse files
Update CI, minor fixes (#238)
- updates CI settings and scripts to those from epfl-lara/scala-smtlib - cross-tests on JDK 17 and 21 - fixes Eldarica version (from nightly) since a new release is now available - updates scala-smtlib to Scala 3.7 base - fixes a compilation warning about pattern match exhaustivity
1 parent 212b4a3 commit 089b631

File tree

6 files changed

+79
-34
lines changed

6 files changed

+79
-34
lines changed

.github/workflows/inox-CI.yml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,19 @@ jobs:
99
tests:
1010
if: github.event.pull_request.draft == false
1111
runs-on: [self-hosted, linux]
12+
strategy:
13+
matrix:
14+
java-version: [17, 21]
1215
env:
1316
# define Java options for both official sbt and sbt-extras
1417
JAVA_OPTS_TMP_DIR: ./tmp_java
1518
JAVA_OPTS: -Xss64M -Xms1024M -Xmx8G -Djava.io.tmpdir=$JAVA_OPTS_TMP_DIR
1619
JVM_OPTS: -Xss64M -Xms1024M -Xmx8G -Djava.io.tmpdir=$JAVA_OPTS_TMP_DIR
20+
# solver versions to test against
21+
INSTALL_SOLVERS: 1
22+
Z3_VER: 4.15.1
23+
CVC4_VER: 1.8
24+
CVC5_VER: 1.2.1
1725
steps:
1826
- name: Checkout
1927
uses: actions/checkout@v4
@@ -23,16 +31,15 @@ jobs:
2331
uses: actions/setup-java@v4
2432
with:
2533
distribution: temurin
26-
java-version: 17
34+
java-version: ${{ matrix.java-version }}
2735
- name: Install and unpack sbt
2836
run: |
29-
wget https://github.com/sbt/sbt/releases/download/v1.10.1/sbt-1.10.1.tgz
30-
tar xfz sbt-1.10.1.tgz
37+
./scripts/install_sbt.sh
3138
echo "PATH=./sbt/bin/:$PATH" >> "$GITHUB_ENV"
3239
- name: Prepare temp folder
3340
run: rm -rf $JAVA_OPTS_TMP_DIR && mkdir -p $JAVA_OPTS_TMP_DIR
3441
- name: Install solvers
35-
run: ./install_solvers.sh $GITHUB_WORKSPACE/.local/bin
42+
run: ./scripts/install_solvers.sh $GITHUB_WORKSPACE/.local/bin $Z3_VER $CVC4_VER $CVC5_VER
3643
- name: Add solvers to PATH
3744
run: echo "$GITHUB_WORKSPACE/.local/bin" >> $GITHUB_PATH
3845
- name: Test solvers availability

build.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ resolvers ++= Seq(
4040
libraryDependencies ++= Seq(
4141
"org.scalatest" %% "scalatest" % "3.2.9" % "test;it",
4242
"org.apache.commons" % "commons-lang3" % "3.4",
43-
("uuverifiers" %% "eldarica" % "nightly-SNAPSHOT").cross(CrossVersion.for3Use2_13),
43+
("uuverifiers" %% "eldarica" % "2.2").cross(CrossVersion.for3Use2_13),
4444
("uuverifiers" %% "princess" % "2025-04-01").cross(CrossVersion.for3Use2_13),
4545
"org.scala-lang.modules" %% "scala-parser-combinators" % "2.3.0"
4646
)
@@ -67,7 +67,7 @@ lazy val nTestParallelism = {
6767
def ghProject(repo: String, version: String) = RootProject(uri(s"${repo}#${version}"))
6868

6969
// lazy val smtlib = RootProject(file("../scala-smtlib")) // If you have a local copy of Scala-SMTLIB and would like to do some changes
70-
lazy val smtlib = ghProject("https://github.com/epfl-lara/scala-smtlib.git", "39745509132b01dc3291112c5259f5e77492d42c")
70+
lazy val smtlib = ghProject("https://github.com/epfl-lara/scala-smtlib.git", "358d3f1c2d323fcd574cc869ce1d2e6b4f14609c")
7171

7272
lazy val scriptName = settingKey[String]("Name of the generated 'inox' script")
7373

install_solvers.sh

Lines changed: 0 additions & 28 deletions
This file was deleted.

scripts/install_sbt.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/usr/bin/env sh
2+
3+
SBT_VER="$(grep 'sbt.version' project/build.properties | cut -d= -f2)"
4+
if [ -z "$SBT_VER" ]; then
5+
echo "sbt.version not found in project/build.properties"
6+
exit 1
7+
fi
8+
wget -c https://github.com/sbt/sbt/releases/download/v${SBT_VER}/sbt-${SBT_VER}.tgz -q
9+
tar xfz "sbt-${SBT_VER}.tgz"

scripts/install_solvers.sh

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env sh
2+
3+
if [ "$INSTALL_SOLVERS" != "1" ]; then
4+
echo "Skipping solver installation"
5+
exit 0
6+
fi
7+
8+
TEMP_DIR="$(pwd)/temp"
9+
SOLVERS_DIR=${1:-"$(pwd)/solvers"}
10+
11+
# check for set version or default to known working (for script) versions
12+
Z3_VER=${2:-"4.15.1"}
13+
CVC4_VER=${3:-"1.8"}
14+
CVC5_VER=${4:-"1.2.1"}
15+
16+
ARCH=$(uname -m)
17+
# short arch name as used by z3 builds
18+
SHORT_ARCH=$(uname -m | sed 's/x86_64/x64/;s/aarch64/arm64/;')
19+
20+
# libc linked against z3
21+
# (glibc for Linux, osx for macOS)
22+
LIBC_NAME=$(uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/osx/;s/linux/glibc/;')
23+
24+
mkdir -p "$SOLVERS_DIR"
25+
mkdir -p "$TEMP_DIR"
26+
# cvc5
27+
wget -c "https://github.com/cvc5/cvc5/releases/download/cvc5-${CVC5_VER}/cvc5-Linux-${ARCH}-static.zip" -O "$TEMP_DIR/cvc5.zip" -q
28+
unzip "$TEMP_DIR/cvc5.zip" -d "$TEMP_DIR"
29+
CVC5_DIR=$(find "$TEMP_DIR" -mindepth 1 -maxdepth 1 -type d -name "*cvc5*")
30+
mv "$CVC5_DIR/bin/cvc5" "$SOLVERS_DIR/cvc5"
31+
chmod +x "$SOLVERS_DIR/cvc5"
32+
rm -rf "$TEMP_DIR"
33+
34+
# # CVC4
35+
wget -c "https://cvc4.cs.stanford.edu/downloads/builds/x86_64-linux-opt/cvc4-${CVC4_VER}-x86_64-linux-opt" -O "$SOLVERS_DIR/cvc4" -q
36+
chmod +x "$SOLVERS_DIR/cvc4"
37+
38+
# z3
39+
mkdir -p "$TEMP_DIR"
40+
Z3_FILE_PREFIX="z3-${Z3_VER}-${SHORT_ARCH}-${LIBC_NAME}"
41+
Z3_URL=$(
42+
curl -s "https://api.github.com/repos/Z3Prover/z3/releases/tags/z3-${Z3_VER}" | # get release info
43+
grep "browser_download_url.*${Z3_FILE_PREFIX}" | #| # find url for the correct build
44+
sed 's/^.*: //;s/^"//;s/"$//' # strip non-url
45+
)
46+
wget -c "${Z3_URL}" -O "$TEMP_DIR/z3.zip" -q
47+
unzip "$TEMP_DIR/z3.zip" -d "$TEMP_DIR"
48+
Z3_DIR=$(find "$TEMP_DIR" -mindepth 1 -maxdepth 1 -type d -name "*z3*")
49+
mv "$Z3_DIR/bin/z3" "$SOLVERS_DIR/z3"
50+
chmod +x "$SOLVERS_DIR/z3"
51+
rm -rf "$TEMP_DIR"
52+
53+
echo "************** Solvers Installed **************"
54+
exit 0

src/main/scala/inox/parsing/TypeElaborator.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ trait TypeElaborators { self: Elaborators =>
183183
val u = Unknown.fresh
184184
vds.combine(getExpr(pred, u)(using newStore))({
185185
case (Seq(vd), pred) => trees.RefinementType(vd, pred)
186+
case (vds, _) =>
187+
// there were 0 or > 1 bindings, should not happen
188+
throw new ElaborationException(Seq(ErrorLocation(s"Invalid refinement type elaboration, expected 1 binding, found ${vds.length}", expr.pos)))
186189
}).addConstraint({
187190
Constraint.equal(u, trees.BooleanType())
188191
})

0 commit comments

Comments
 (0)