diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 00000000..350c108b --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,32 @@ +# +# Builds and tests the package on Linux. +# +# This runs after changes are pushed to a feature branch or to `develop`. +# + +name: Build + +on: + push: + branches: + - '**' + - '!master' + +jobs: + build: + if: "! contains(toJSON(github.event.commits.*.message), '[skip-ci]')" + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup Node + uses: actions/setup-node@v1 + with: + node-version: '12' + + - name: Install Dependencies + run: npm ci + + - name: Run Tests + run: npm test diff --git a/models/delay/delay.dat b/models/delay/delay.dat index b510ac64..839faab6 100644 --- a/models/delay/delay.dat +++ b/models/delay/delay.dat @@ -1702,7 +1702,7 @@ delay a[A3] 0 3 FINAL TIME 0 10 -init +init 1 0 0 init 2[A2] 0 0 diff --git a/models/delay/delay.mdl b/models/delay/delay.mdl index 260bbb9c..4517ff60 100755 --- a/models/delay/delay.mdl +++ b/models/delay/delay.mdl @@ -4,7 +4,7 @@ SubA: A2, A3 ~~| input = STEP(10, 0) - STEP(10, 4) ~~| delay = 5 ~~| -init = 0 ~~| +init 1 = 0 ~~| input a[DimA]= 10, 20, 30 ~~| delay a[DimA] = 1, 2, 3 ~~| @@ -17,8 +17,8 @@ init 2[SubA] = 0 ~~| k = 42 ~~| d1 = DELAY1(input, delay) ~~| -d2[DimA] = DELAY1I(input a[DimA], delay, init) ~~| -d3[DimA] = DELAY1I(input, delay a[DimA], init) ~~| +d2[DimA] = DELAY1I(input a[DimA], delay, init 1) ~~| +d3[DimA] = DELAY1I(input, delay a[DimA], init 1) ~~| d4[DimA] = DELAY1I(input, delay, init a[DimA]) ~~| d5[DimA] = DELAY1I(input a[DimA], delay a[DimA], init a[DimA]) ~~| d6[SubA] = DELAY1I(input 2[SubA], delay 2, init 2[SubA]) ~~| diff --git a/src/tests/modeltests b/src/tests/modeltests index 9cefaa10..49eb08d8 100755 --- a/src/tests/modeltests +++ b/src/tests/modeltests @@ -1,22 +1,37 @@ -#!/usr/bin/env sh -# Use the global sde command if it is available. +#!/bin/bash + +set -e # fail on error + +# Use the local sde command. SDE='node ../sde.js' -if which sde >/dev/null; then SDE=sde; fi $SDE -v &>/dev/null if [[ $? -ne 0 ]]; then echo 'SDEverywhere is not installed.' - echo 'Run "npm install" in the src directory to install it locally.' - echo 'You could also install it globally with "npm install sdeverywhere -g".' + echo 'Run "npm install" in the top directory to install it locally.' exit 1 fi -# Test each model against saved Vensim data. -for MODEL in $(ls ../../models); do - echo "testing the $MODEL model" - $SDE clean --modeldir ../../models/$MODEL - CMD="$SDE test ../../models/$MODEL/$MODEL -p 1e-4" - if [[ $MODEL == 'directdata' ]]; then - CMD="$CMD --spec ../../models/$MODEL/spec.json" + +function test { + MODEL=$1 + echo "Testing the $MODEL model" + MODEL_DIR=../../models/$MODEL + $SDE clean --modeldir $MODEL_DIR + if [[ -f $MODEL_DIR/spec.json ]]; then + TEST_ARGS="--spec $MODEL_DIR/spec.json" + else + TEST_ARGS= fi - $CMD - $SDE clean --modeldir ../../models/$MODEL -done + $SDE test $TEST_ARGS -p 1e-4 $MODEL_DIR/$MODEL + $SDE clean --modeldir $MODEL_DIR + echo +} + +if [[ -n $1 ]]; then + # Test the given model against saved Vensim data. + test $1 +else + # Test each model against saved Vensim data. + for m in $(ls ../../models); do + test $m + done +fi