diff --git a/.github/workflows/exprtk_fuzzer-mayhem.yml b/.github/workflows/exprtk_fuzzer-mayhem.yml new file mode 100644 index 0000000..31cb990 --- /dev/null +++ b/.github/workflows/exprtk_fuzzer-mayhem.yml @@ -0,0 +1,55 @@ +name: Mayhem +on: + push: + pull_request: + workflow_dispatch: + workflow_call: +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} +jobs: + build: + name: ${{ matrix.os }} shared=${{ matrix.shared }} ${{ matrix.build_type }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + shared: [false] + build_type: [Release] + include: + - os: ubuntu-latest + triplet: x64-linux + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + - name: Log in to the Container registry + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: Build and push Docker image + uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + with: + context: . + file: mayhem/Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + - name: Start analysis + uses: forallsecure/mcode-action@v1 + with: + mayhem-token: ${{ secrets.MAYHEM_TOKEN }} + args: --image ${{ steps.meta.outputs.tags }} --cmd /out/exprtk_fuzzer --target + exprtk_fuzzer --file mayhem/exprtk_fuzzer.mayhemfile + sarif-output: sarif + - name: Upload SARIF file(s) + uses: github/codeql-action/upload-sarif@v2 + with: + sarif_file: sarif diff --git a/mayhem/Dockerfile b/mayhem/Dockerfile new file mode 100644 index 0000000..e3f7632 --- /dev/null +++ b/mayhem/Dockerfile @@ -0,0 +1,25 @@ +# Copyright 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +FROM gcr.io/oss-fuzz-base/base-builder +RUN apt-get update && apt-get install -y make autoconf automake libtool +COPY . exprtk +RUN rm -rf exprtk/mayhem +WORKDIR exprtk +COPY mayhem/build.sh mayhem/exprtk_fuzzer.cpp mayhem/exprtk_test_expressions.dict $SRC/ + +ENV FUZZING_LANGUAGE=c++ SANITIZER=address +RUN compile \ No newline at end of file diff --git a/mayhem/Dockerfile.dockerignore b/mayhem/Dockerfile.dockerignore new file mode 100644 index 0000000..e69de29 diff --git a/mayhem/build.sh b/mayhem/build.sh new file mode 100644 index 0000000..2fcb53d --- /dev/null +++ b/mayhem/build.sh @@ -0,0 +1,24 @@ +#!/bin/bash -eu +# Copyright 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +cp $SRC/*.dict $OUT/ + +CXXFLAGS="${CXXFLAGS} -O2 -fno-sanitize=integer-divide-by-zero,float-divide-by-zero" + +$CXX -std=c++11 $CXXFLAGS -I. -I$SRC/exprtk \ + $SRC/exprtk_fuzzer.cpp -o $OUT/exprtk_fuzzer \ + $LIB_FUZZING_ENGINE diff --git a/mayhem/exprtk_fuzzer.cpp b/mayhem/exprtk_fuzzer.cpp new file mode 100644 index 0000000..d862938 --- /dev/null +++ b/mayhem/exprtk_fuzzer.cpp @@ -0,0 +1,79 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#define exprtk_enable_range_runtime_checks +#include "exprtk.hpp" + + +template +void run(const std::string& expression_string) +{ + typedef exprtk::symbol_table symbol_table_t; + typedef exprtk::expression expression_t; + typedef exprtk::parser parser_t; + typedef exprtk::loop_runtime_check loop_runtime_check_t; + + T x = T(1.2345); + T y = T(2.2345); + T z = T(3.2345); + T w = T(4.2345); + + symbol_table_t symbol_table; + symbol_table.add_variable("x",x); + symbol_table.add_variable("y",y); + symbol_table.add_variable("z",z); + symbol_table.add_variable("w",w); + symbol_table.add_constants(); + + expression_t expression; + expression.register_symbol_table(symbol_table); + + loop_runtime_check_t loop_runtime_check; + loop_runtime_check.loop_set = loop_runtime_check_t::e_all_loops; + loop_runtime_check.max_loop_iterations = 100000; + + parser_t parser; + + parser.register_loop_runtime_check(loop_runtime_check); + + if (parser.compile(expression_string, expression)) + { + const std::size_t max_expression_size = 64 * 1024; + + if (expression_string.size() <= max_expression_size) + { + try + { + expression.value(); + } + catch (std::runtime_error& rte) + {} + + parser.clear_loop_runtime_check(); + } + } +} + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) +{ + const std::string expression(reinterpret_cast(data), size); + + run(expression); + run (expression); + + return 0; +} diff --git a/mayhem/exprtk_fuzzer.mayhemfile b/mayhem/exprtk_fuzzer.mayhemfile new file mode 100644 index 0000000..066c388 --- /dev/null +++ b/mayhem/exprtk_fuzzer.mayhemfile @@ -0,0 +1,4 @@ +project: PROJECT +target: exprtk_fuzzer +cmds: +- cmd: /out/exprtk_fuzzer diff --git a/mayhem/exprtk_test_expressions.dict b/mayhem/exprtk_test_expressions.dict new file mode 100644 index 0000000..40711f0 --- /dev/null +++ b/mayhem/exprtk_test_expressions.dict @@ -0,0 +1,7239 @@ +"1" +"a" +"()" +"a*2" +"a+1" +"a+b" +"(())" +"a+-b" +"(a*e)" +"(a+e)" +"(a-a)" +"(b*e)" +"(b+a)" +"(b-b)" +"(e*e)" +"1+a^2" +"2*a+1" +"a*2.2" +"a*b*c" +"a*b+c" +"a+1.1" +"a+b*c" +"a+b+c" +"a+b-c" +"a-b-c" +"a/b/c" +"a^2+1" +"a^2^3" +"b^2*2" +"x*y*z" +"x*y+z" +"x*y-z" +"x*y/z" +"x+y*z" +"x+y+z" +"x+y-z" +"x+y/z" +"x-y*z" +"x-y/z" +"x/y*z" +"x/y+z" +"x/y-z" +"x/y/z" +"((()))" +"(pi*b)" +"(pi+b)" +"(x)(x)" +"[x][x]" +"abs(a)" +"cos(a)" +"sin(a)" +"tan(a)" +"{x}{x}" +"(a+b)*3" +"(pi+pi)" +"1.1*a^2" +"1.1+a^2" +"2*(a+b)" +"2.2*b^2" +"2.2*y*z" +"2.2*y+z" +"2.2*y-z" +"2.2*y/z" +"2.2+y*z" +"2.2+y+z" +"2.2+y-z" +"2.2+y/z" +"2.2-y*z" +"2.2-y/z" +"2.2/y*z" +"2.2/y+z" +"2.2/y-z" +"2.2/y/z" +"a*2+b*2" +"a^2+b^2" +"sqrt(a)" +"x*3.3*z" +"x*3.3+z" +"x*3.3-z" +"x*3.3/z" +"x*y*4.4" +"x*y*z+w" +"x*y*z-w" +"x*y+4.4" +"x*y+z*w" +"x*y+z+w" +"x*y+z-w" +"x*y+z/w" +"x*y-4.4" +"x*y-z*w" +"x*y-z+w" +"x*y-z-w" +"x*y-z/w" +"x*y/4.4" +"x*y/z+w" +"x*y/z-w" +"x+3.3*z" +"x+3.3+z" +"x+3.3-z" +"x+3.3/z" +"x+y*4.4" +"x+y*z*w" +"x+y*z-w" +"x+y*z/w" +"x+y+4.4" +"x+y+z*w" +"x+y+z-w" +"x+y+z/w" +"x+y-4.4" +"x+y-z*w" +"x+y-z-w" +"x+y-z/w" +"x+y/4.4" +"x+y/z*w" +"x+y/z+w" +"x+y/z-w" +"x+y/z/w" +"x-3.3*z" +"x-3.3/z" +"x-y*4.4" +"x-y*z*w" +"x-y*z-w" +"x-y*z/w" +"x-y+z*w" +"x-y+z+w" +"x-y+z/w" +"x-y-z*w" +"x-y-z+w" +"x-y-z/w" +"x-y/4.4" +"x-y/z*w" +"x-y/z-w" +"x-y/z/w" +"x/3.3*z" +"x/3.3+z" +"x/3.3-z" +"x/3.3/z" +"x/y*4.4" +"x/y*z+w" +"x/y*z-w" +"x/y+4.4" +"x/y+z*w" +"x/y+z+w" +"x/y+z-w" +"x/y+z/w" +"x/y-4.4" +"x/y-z*w" +"x/y-z+w" +"x/y-z-w" +"x/y-z/w" +"x/y/4.4" +"x/y/z+w" +"x/y/z-w" +"(3.70/b)" +"(a/0.20)" +"(b+2.07)" +"(b+3.52)" +"-(b^1.1)" +"((a/a)+e)" +"((b/a)/a)" +"((e/b)+e)" +"((x*y*z))" +"((x*y+z))" +"((x*y-z))" +"((x*y/z))" +"((x+y*z))" +"((x+y+z))" +"((x+y-z))" +"((x+y/z))" +"((x-y*z))" +"((x-y+z))" +"((x-y-z))" +"((x-y/z))" +"((x/y*z))" +"((x/y+z))" +"((x/y-z))" +"((x/y/z))" +"(2*a+1)*3" +"(2*a+2*a)" +"(3.00+pi)" +"(a+b)*3.3" +"2.2*(a+b)" +"2.2*a+1.1" +"2.2*y*4.4" +"2.2*y*z+w" +"2.2*y*z-w" +"2.2*y+4.4" +"2.2*y+z*w" +"2.2*y+z+w" +"2.2*y+z-w" +"2.2*y+z/w" +"2.2*y-4.4" +"2.2*y-z*w" +"2.2*y-z+w" +"2.2*y-z-w" +"2.2*y-z/w" +"2.2*y/4.4" +"2.2*y/z+w" +"2.2*y/z-w" +"2.2+y*4.4" +"2.2+y*z*w" +"2.2+y*z-w" +"2.2+y*z/w" +"2.2+y+4.4" +"2.2+y+z*w" +"2.2+y+z-w" +"2.2+y+z/w" +"2.2+y-4.4" +"2.2+y-z*w" +"2.2+y-z-w" +"2.2+y-z/w" +"2.2+y/4.4" +"2.2+y/z*w" +"2.2+y/z+w" +"2.2+y/z-w" +"2.2+y/z/w" +"2.2-y*4.4" +"2.2-y*z*w" +"2.2-y*z-w" +"2.2-y*z/w" +"2.2-y+z*w" +"2.2-y+z+w" +"2.2-y+z/w" +"2.2-y-z*w" +"2.2-y-z+w" +"2.2-y-z/w" +"2.2-y/4.4" +"2.2-y/z*w" +"2.2-y/z-w" +"2.2-y/z/w" +"2.2/y*4.4" +"2.2/y*z+w" +"2.2/y*z-w" +"2.2/y+4.4" +"2.2/y+z*w" +"2.2/y+z+w" +"2.2/y+z-w" +"2.2/y+z/w" +"2.2/y-4.4" +"2.2/y-z*w" +"2.2/y-z+w" +"2.2/y-z-w" +"2.2/y-z/w" +"2.2/y/4.4" +"2.2/y/z+w" +"2.2/y/z-w" +"a+b*(a+b)" +"a^2^3-a^8" +"tan(1.29)" +"x*3.3*4.4" +"x*3.3*z+w" +"x*3.3*z-w" +"x*3.3+4.4" +"x*3.3+z*w" +"x*3.3+z+w" +"x*3.3+z-w" +"x*3.3+z/w" +"x*3.3-4.4" +"x*3.3-z*w" +"x*3.3-z+w" +"x*3.3-z-w" +"x*3.3-z/w" +"x*3.3/4.4" +"x*3.3/z+w" +"x*3.3/z-w" +"x*y*4.4+w" +"x*y*4.4-w" +"x*y*z+5.5" +"x*y*z-5.5" +"x*y+4.4*w" +"x*y+4.4+w" +"x*y+4.4-w" +"x*y+4.4/w" +"x*y+z*5.5" +"x*y+z+5.5" +"x*y+z-5.5" +"x*y+z/5.5" +"x*y-4.4*w" +"x*y-4.4+w" +"x*y-4.4-w" +"x*y-4.4/w" +"x*y-z*5.5" +"x*y-z+5.5" +"x*y-z-5.5" +"x*y-z/5.5" +"x*y/4.4+w" +"x*y/4.4-w" +"x*y/z+5.5" +"x*y/z-5.5" +"x+3.3*4.4" +"x+3.3*z*w" +"x+3.3*z-w" +"x+3.3*z/w" +"x+3.3+4.4" +"x+3.3+z*w" +"x+3.3+z-w" +"x+3.3+z/w" +"x+3.3-4.4" +"x+3.3-z*w" +"x+3.3-z-w" +"x+3.3-z/w" +"x+3.3/4.4" +"x+3.3/z*w" +"x+3.3/z+w" +"x+3.3/z-w" +"x+3.3/z/w" +"x+y*4.4*w" +"x+y*4.4-w" +"x+y*4.4/w" +"x+y*z*5.5" +"x+y*z-5.5" +"x+y*z/5.5" +"x+y+4.4*w" +"x+y+4.4-w" +"x+y+4.4/w" +"x+y+z*5.5" +"x+y+z-5.5" +"x+y+z/5.5" +"x+y-4.4*w" +"x+y-4.4-w" +"x+y-4.4/w" +"x+y-z*5.5" +"x+y-z-5.5" +"x+y-z/5.5" +"x+y/4.4*w" +"x+y/4.4+w" +"x+y/4.4-w" +"x+y/4.4/w" +"x+y/z*5.5" +"x+y/z+5.5" +"x+y/z-5.5" +"x+y/z/5.5" +"x-3.3*4.4" +"x-3.3*z*w" +"x-3.3*z-w" +"x-3.3*z/w" +"x-3.3+z*w" +"x-3.3+z+w" +"x-3.3+z/w" +"x-3.3-z*w" +"x-3.3-z+w" +"x-3.3-z/w" +"x-3.3/4.4" +"x-3.3/z*w" +"x-3.3/z-w" +"x-3.3/z/w" +"x-y*4.4*w" +"x-y*4.4-w" +"x-y*4.4/w" +"x-y*z*5.5" +"x-y*z-5.5" +"x-y*z/5.5" +"x-y+4.4*w" +"x-y+4.4+w" +"x-y+4.4/w" +"x-y+z*5.5" +"x-y+z+5.5" +"x-y+z/5.5" +"x-y-4.4*w" +"x-y-4.4+w" +"x-y-4.4/w" +"x-y-z*5.5" +"x-y-z+5.5" +"x-y-z/5.5" +"x-y/4.4*w" +"x-y/4.4-w" +"x-y/4.4/w" +"x-y/z*5.5" +"x-y/z-5.5" +"x-y/z/5.5" +"x/3.3*4.4" +"x/3.3*z+w" +"x/3.3*z-w" +"x/3.3+4.4" +"x/3.3+z*w" +"x/3.3+z+w" +"x/3.3+z-w" +"x/3.3+z/w" +"x/3.3-4.4" +"x/3.3-z*w" +"x/3.3-z+w" +"x/3.3-z-w" +"x/3.3-z/w" +"x/3.3/4.4" +"x/3.3/z+w" +"x/3.3/z-w" +"x/y*4.4+w" +"x/y*4.4-w" +"x/y*z+5.5" +"x/y*z-5.5" +"x/y+4.4*w" +"x/y+4.4+w" +"x/y+4.4-w" +"x/y+4.4/w" +"x/y+z*5.5" +"x/y+z+5.5" +"x/y+z-5.5" +"x/y+z/5.5" +"x/y-4.4*w" +"x/y-4.4+w" +"x/y-4.4-w" +"x/y-4.4/w" +"x/y-z*5.5" +"x/y-z+5.5" +"x/y-z-5.5" +"x/y-z/5.5" +"x/y/4.4+w" +"x/y/4.4-w" +"x/y/z+5.5" +"x/y/z-5.5" +"((b/b)/pi)" +"((x))((x))" +"(1+b)*(-3)" +"(b+(pi*a))" +"-a^2^3-a^8" +"1.1*a^2.01" +"[[x]][[x]]" +"e^log(7*a)" +"{{x}}{{x}}" +"(((x*y)*z))" +"(((x*y)+z))" +"(((x*y)-z))" +"(((x*y)/z))" +"(((x+y)*z))" +"(((x+y)+z))" +"(((x+y)-z))" +"(((x+y)/z))" +"(((x-y)*z))" +"(((x-y)/z))" +"(((x/y)*z))" +"(((x/y)+z))" +"(((x/y)-z))" +"(((x/y)/z))" +"((a-pi)*pi)" +"((x*(y*z)))" +"((x*(y+z)))" +"((x*(y-z)))" +"((x*(y/z)))" +"((x*y*z+w))" +"((x*y*z-w))" +"((x*y+z*w))" +"((x*y+z+w))" +"((x*y+z-w))" +"((x*y+z/w))" +"((x*y-z*w))" +"((x*y-z+w))" +"((x*y-z-w))" +"((x*y-z/w))" +"((x*y/z+w))" +"((x*y/z-w))" +"((x+(y*z)))" +"((x+(y+z)))" +"((x+(y-z)))" +"((x+(y/z)))" +"((x+y*z*w))" +"((x+y*z-w))" +"((x+y*z/w))" +"((x+y+z*w))" +"((x+y+z-w))" +"((x+y+z/w))" +"((x+y-z*w))" +"((x+y-z-w))" +"((x+y-z/w))" +"((x+y/z*w))" +"((x+y/z+w))" +"((x+y/z-w))" +"((x+y/z/w))" +"((x-(y*z)))" +"((x-(y+z)))" +"((x-(y-z)))" +"((x-(y/z)))" +"((x-y*z*w))" +"((x-y*z+w))" +"((x-y*z-w))" +"((x-y*z/w))" +"((x-y+z*w))" +"((x-y+z+w))" +"((x-y+z/w))" +"((x-y-z*w))" +"((x-y-z+w))" +"((x-y-z/w))" +"((x-y/z*w))" +"((x-y/z+w))" +"((x-y/z-w))" +"((x-y/z/w))" +"((x/(y*z)))" +"((x/(y+z)))" +"((x/(y-z)))" +"((x/(y/z)))" +"((x/y*z+w))" +"((x/y*z-w))" +"((x/y+z*w))" +"((x/y+z+w))" +"((x/y+z-w))" +"((x/y+z/w))" +"((x/y-z*w))" +"((x/y-z+w))" +"((x/y-z-w))" +"((x/y-z/w))" +"((x/y/z+w))" +"((x/y/z-w))" +"1-(a/b*0.5)" +"10^log(3+b)" +"2.2*a^1+1.1" +"2.2*y*4.4+w" +"2.2*y*4.4-w" +"2.2*y*z+5.5" +"2.2*y*z-5.5" +"2.2*y+4.4*w" +"2.2*y+4.4+w" +"2.2*y+4.4-w" +"2.2*y+4.4/w" +"2.2*y+z*5.5" +"2.2*y+z+5.5" +"2.2*y+z-5.5" +"2.2*y+z/5.5" +"2.2*y-4.4*w" +"2.2*y-4.4+w" +"2.2*y-4.4-w" +"2.2*y-4.4/w" +"2.2*y-z*5.5" +"2.2*y-z+5.5" +"2.2*y-z-5.5" +"2.2*y-z/5.5" +"2.2*y/4.4+w" +"2.2*y/4.4-w" +"2.2*y/z+5.5" +"2.2*y/z-5.5" +"2.2+y*4.4*w" +"2.2+y*4.4-w" +"2.2+y*4.4/w" +"2.2+y*z*5.5" +"2.2+y*z-5.5" +"2.2+y*z/5.5" +"2.2+y+4.4*w" +"2.2+y+4.4-w" +"2.2+y+4.4/w" +"2.2+y+z*5.5" +"2.2+y+z-5.5" +"2.2+y+z/5.5" +"2.2+y-4.4*w" +"2.2+y-4.4-w" +"2.2+y-4.4/w" +"2.2+y-z*5.5" +"2.2+y-z-5.5" +"2.2+y-z/5.5" +"2.2+y/4.4*w" +"2.2+y/4.4+w" +"2.2+y/4.4-w" +"2.2+y/4.4/w" +"2.2+y/z*5.5" +"2.2+y/z+5.5" +"2.2+y/z-5.5" +"2.2+y/z/5.5" +"2.2-y*4.4*w" +"2.2-y*4.4-w" +"2.2-y*4.4/w" +"2.2-y*z*5.5" +"2.2-y*z-5.5" +"2.2-y*z/5.5" +"2.2-y+4.4*w" +"2.2-y+4.4+w" +"2.2-y+4.4/w" +"2.2-y+z*5.5" +"2.2-y+z+5.5" +"2.2-y+z/5.5" +"2.2-y-4.4*w" +"2.2-y-4.4+w" +"2.2-y-4.4/w" +"2.2-y-z*5.5" +"2.2-y-z+5.5" +"2.2-y-z/5.5" +"2.2-y/4.4*w" +"2.2-y/4.4-w" +"2.2-y/4.4/w" +"2.2-y/z*5.5" +"2.2-y/z-5.5" +"2.2-y/z/5.5" +"2.2/y*4.4+w" +"2.2/y*4.4-w" +"2.2/y*z+5.5" +"2.2/y*z-5.5" +"2.2/y+4.4*w" +"2.2/y+4.4+w" +"2.2/y+4.4-w" +"2.2/y+4.4/w" +"2.2/y+z*5.5" +"2.2/y+z+5.5" +"2.2/y+z-5.5" +"2.2/y+z/5.5" +"2.2/y-4.4*w" +"2.2/y-4.4+w" +"2.2/y-4.4-w" +"2.2/y-4.4/w" +"2.2/y-z*5.5" +"2.2/y-z+5.5" +"2.2/y-z-5.5" +"2.2/y-z/5.5" +"2.2/y/4.4+w" +"2.2/y/4.4-w" +"2.2/y/z+5.5" +"2.2/y/z-5.5" +"sin(tan(b))" +"x*3.3*4.4+w" +"x*3.3*4.4-w" +"x*3.3*z+5.5" +"x*3.3*z-5.5" +"x*3.3+4.4*w" +"x*3.3+4.4+w" +"x*3.3+4.4-w" +"x*3.3+4.4/w" +"x*3.3+z*5.5" +"x*3.3+z+5.5" +"x*3.3+z-5.5" +"x*3.3+z/5.5" +"x*3.3-4.4*w" +"x*3.3-4.4+w" +"x*3.3-4.4-w" +"x*3.3-4.4/w" +"x*3.3-z*5.5" +"x*3.3-z+5.5" +"x*3.3-z-5.5" +"x*3.3-z/5.5" +"x*3.3/4.4+w" +"x*3.3/4.4-w" +"x*3.3/z+5.5" +"x*3.3/z-5.5" +"x*y*z-x*y/z" +"x*y+z+x*y-z" +"x*y/z-x*y*z" +"x+3.3*4.4*w" +"x+3.3*4.4-w" +"x+3.3*4.4/w" +"x+3.3*z*5.5" +"x+3.3*z-5.5" +"x+3.3*z/5.5" +"x+3.3+4.4*w" +"x+3.3+4.4-w" +"x+3.3+4.4/w" +"x+3.3+z*5.5" +"x+3.3+z-5.5" +"x+3.3+z/5.5" +"x+3.3-4.4*w" +"x+3.3-4.4-w" +"x+3.3-4.4/w" +"x+3.3-z*5.5" +"x+3.3-z-5.5" +"x+3.3-z/5.5" +"x+3.3/4.4*w" +"x+3.3/4.4-w" +"x+3.3/4.4/w" +"x+3.3/z*5.5" +"x+3.3/z+5.5" +"x+3.3/z-5.5" +"x+3.3/z/5.5" +"x+y-z-x+y+z" +"x+y/z+x+y*z" +"x+y/z-x+y+z" +"x-3.3*4.4*w" +"x-3.3*4.4-w" +"x-3.3*4.4/w" +"x-3.3*z*5.5" +"x-3.3*z-5.5" +"x-3.3*z/5.5" +"x-3.3+4.4*w" +"x-3.3+4.4+w" +"x-3.3+4.4/w" +"x-3.3+z*5.5" +"x-3.3+z+5.5" +"x-3.3+z/5.5" +"x-3.3-4.4*w" +"x-3.3-4.4+w" +"x-3.3-4.4/w" +"x-3.3-z*5.5" +"x-3.3-z+5.5" +"x-3.3-z/5.5" +"x-3.3/4.4*w" +"x-3.3/4.4-w" +"x-3.3/4.4/w" +"x-3.3/z*5.5" +"x-3.3/z-5.5" +"x-3.3/z/5.5" +"x-y*z+x+y*z" +"x-y/z*x-y*z" +"x-y/z*x-y/z" +"x/3.3*4.4+w" +"x/3.3*4.4-w" +"x/3.3*z+5.5" +"x/3.3*z-5.5" +"x/3.3+4.4*w" +"x/3.3+4.4+w" +"x/3.3+4.4-w" +"x/3.3+4.4/w" +"x/3.3+z*5.5" +"x/3.3+z+5.5" +"x/3.3+z-5.5" +"x/3.3+z/5.5" +"x/3.3-4.4*w" +"x/3.3-4.4+w" +"x/3.3-4.4-w" +"x/3.3-4.4/w" +"x/3.3-z*5.5" +"x/3.3-z+5.5" +"x/3.3-z-5.5" +"x/3.3-z/5.5" +"x/3.3/4.4+w" +"x/3.3/4.4-w" +"x/3.3/z+5.5" +"x/3.3/z-5.5" +"x/y*z*x/y/z" +"x/y+z*x/y-z" +"x/y+z-x/y-z" +"x/y/z+x/y*z" +"(((((())))))" +"((1.11+a)*a)" +"((3.08+e)-b)" +"((a+b)+3.55)" +"((b*b)*2.41)" +"(b/(b*0.06))" +"a+b-e*pi/5^6" +"a^-2^3-1/a^8" +"a^b/e*pi-5+6" +"(((a-a)+e)/a)" +"(((b+e)+a)-a)" +"((0.73+pi)*e)" +"((3.123*y*z))" +"((3.123*y+z))" +"((3.123*y-z))" +"((3.123*y/z))" +"((3.123+y*z))" +"((3.123+y+z))" +"((3.123+y-z))" +"((3.123+y/z))" +"((3.123-y*z))" +"((3.123-y+z))" +"((3.123-y-z))" +"((3.123-y/z))" +"((3.123/y*z))" +"((3.123/y+z))" +"((3.123/y-z))" +"((3.123/y/z))" +"((a/pi)-2.55)" +"((b*(b+b))*b)" +"((pi/2.23)-a)" +"((x*5.123*z))" +"((x*5.123+z))" +"((x*5.123-z))" +"((x*5.123/z))" +"((x*y*7.123))" +"((x*y+7.123))" +"((x*y-7.123))" +"((x*y/7.123))" +"((x+5.123*z))" +"((x+5.123+z))" +"((x+5.123-z))" +"((x+5.123/z))" +"((x+y*7.123))" +"((x+y+7.123))" +"((x+y-7.123))" +"((x+y/7.123))" +"((x-5.123*z))" +"((x-5.123+z))" +"((x-5.123-z))" +"((x-5.123/z))" +"((x-y*7.123))" +"((x-y+7.123))" +"((x-y-7.123))" +"((x-y/7.123))" +"((x/5.123*z))" +"((x/5.123+z))" +"((x/5.123-z))" +"((x/5.123/z))" +"((x/y*7.123))" +"((x/y+7.123))" +"((x/y-7.123))" +"((x/y/7.123))" +"(a*(b-(b/b)))" +"(cos(2.41)/b)" +"+a^+2^+3-a^+8" +"123456.123456" +"2.2*y*4.4-5.5" +"2.2*y/4.4-5.5" +"2.2+y*4.4*5.5" +"2.2+y*4.4-5.5" +"2.2+y*4.4/5.5" +"2.2+y+4.4*5.5" +"2.2+y+4.4/5.5" +"2.2+y-4.4*5.5" +"2.2+y-4.4/5.5" +"2.2+y/4.4*5.5" +"2.2+y/4.4+5.5" +"2.2+y/4.4-5.5" +"2.2+y/4.4/5.5" +"2.2-y*4.4*5.5" +"2.2-y*4.4-5.5" +"2.2-y*4.4/5.5" +"2.2-y+4.4*5.5" +"2.2-y+4.4/5.5" +"2.2-y-4.4*5.5" +"2.2-y-4.4/5.5" +"2.2-y/4.4*5.5" +"2.2-y/4.4-5.5" +"2.2-y/4.4/5.5" +"2.2/y*4.4-5.5" +"2.2/y/4.4-5.5" +"sin(a)+sin(b)" +"sqrt(a^2+b^2)" +"tan((3.59-e))" +"x*3.3*4.4-5.5" +"x*3.3/4.4-5.5" +"x+3.3*4.4-5.5" +"x+3.3/4.4-5.5" +"x-3.3*4.4-5.5" +"x-3.3/4.4-5.5" +"x/3.3*4.4-5.5" +"x/3.3/4.4-5.5" +"(((x)))(((x)))" +"(1.1+b)*(-3.3)" +"-(sin(pi+a)+1)" +"[[[x]]][[[x]]]" +"sqrt(a) 3 + 3 ? 7 : 9) == 9" +"(1 + 1 < 3 ? 7 : 9) == 7" +"(1 + 1 > 3 ? 7 : 9) == 9" +"(1 < 2 ? 3 : 4) == 3" +"(1 > 2 ? 3 : 4) == 4" +"'123456789'[0:] != '01234567890123456789'[0:9]" +"'123456789'[:] != '01234567890123456789'[0:9]" +"'123456789' != '01234567890123456789'[0:9]" +"'123456789'[:] != '01234567890123456789'[10:]" +"'123456789'[:8] != '01234567890123456789'[0:9]" +"'123456789'[:8] != '01234567890123456789'[:9]" +"(1 > 2 ? 3 : 4 + 5) == 9" +"(1 < 2 ? 3 + 5 : 4) == 8" +"'123' in 'aaa123'" +"12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })" +"12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })" +" 1 ? 3 : 4" +"(1 ? 3 : 4) == 3" +"1 == (for (var i := 0; i < 10; i += 1) { ~{break[i += 1]; continue; i += i} })" +"'1XYZ2' ilike '*xyz*'" +"21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; i += 1; i += 2; i += 3; }; })" +"21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; return [i * 8]; i += 1; i += 2; i += 3; }; })" +"(2 < 3 + 3 ? 7 : 9) == 7" +"(2 > 3 + 3 ? 7 : 9) == 9" +"'23456' == '01234567890123456789'[1+1:r1]" +"'23456' == '01234567890123456789'[2*6:10+6]" +"'23456' == '01234567890123456789'[2: r1]" +"'23456' == '01234567890123456789'[r0:3*2]" +"'23456' == '01234567890123456789'[r0: 6]" +"'23456' == '01234567890123456789'[r0:r1]" +"'2345678' == '01234567890123456789'[r0:r1+2]" +"'234567890123456789' == '01234567890123456789'[r0: ]" +"2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; i += 1; i += 2; i += 3; } else i; }" +"2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; return [i * 8]; i += 1; i += 2; i += 3; } else i; }" +"'456' == '01234567890123456789'[r0+2:r1]" +"'4567890123456789' == '01234567890123456789'[r1-r0:]" +"7 == (for (var i := 0; i < 10; i += 1) { ~{break[7]; continue; i += i} })" +"'a123b' like '*123*'" +"'aaa' + '123' == 'aaa123'" +"'aaa123' == 'aaa' + '123'" +"'aaa' == 'aaa'" +"'aaa' <= 'bbb'" +"'aaa' < 'bbb'" +"'aaa' in 'aaa123'" +"'bbb' >= 'aaa'" +"'bbb' > 'aaa'" +"[*] { case 1 < 2 : 1 / 2; case (1 < 3) : 2 / 2; case 1 < 4 : 3 / 2; case (1 < 5) : 4 / 2; }" +"[*]{ case x < y : x + y; case y < x : y - x; }" +"equal((2.2*pi^2.2^3.3),2.2*(pi^13.4894687605338489))" +"equal((2*pi^2^3),2*(pi^8))" +"equal((pi^2.2^3.3*2),2*(pi^13.4894687605338489))" +"equal((pi^2.2^3.3/2.2),(pi^13.4894687605338489)/2.2)" +"equal((pi^2.2^3.3),(pi^13.4894687605338489))" +"equal((pi^-2^-3),1/(pi^(1/8)))" +"equal((pi^-2^3),1/(pi^8))" +"equal((pi^2^3*2),2*(pi^8))" +"equal((pi^2^3/2),(pi^8)/2)" +"equal((pi^2^-3),(pi^(1/8)))" +"equal((pi^2^3),(pi^8))" +"equal(pi^2^3-pi^8,0)" +"equal(\t \n(\n \r1.1\t\t - \n\n 2.2\n\n/\r3.3\t),(1.1-2.2/3.3))" +"for(var i := 0; (i < 10) and (i != y); i+=2) { x += i; }; x;" +"for(var i := 0; (i < 10) and (i != y);) { x += i; i+=2; }; x;" +"for(var i := 0; (i < 10);) { i += 1; }; x;" +"for(var i := 0; (i < y); i += 1) { if (i <= (y / 2)) continue; else x += i; }; x;" +"for(var i := 0; (i < y); i += 1) { if (i <= (y / 2)) x += i; else break; }; x;" +"if (1 < 2) { 1+2; 3;} == 3" +"if (1 < 2) { 1+2; 3;} else {1+2; 4;} == 3" +"if (1 > 2) { 1+2; 3;} else {1+2; 4;} == 4" +"if (1 < 2) { 1+2; 3;} else 4; == 3" +"if (1 > 2) { 1+2; 3;} else 4; == 4" +"if (1 < 2) { 1+2; 3;} else if (1 < 2) {1+2; 4;} == 3" +"if (1 > 2) { 1+2; 3;} else if (1 < 2) {1+2; 4;} == 4" +"if (1 > 2) { 1+2; 3;} else if (1 > 2) {1+2; 4;} == null" +"if (1 < 2) { 1+2; 3;} else if (1 < 2) 4; == 3" +"if (1 > 2) { 1+2; 3;} else if (1 < 2) 4; == 4" +"if (1 > 2) { 1+2; 3;} else if (1 > 2) 4; == null" +"if (1 > 2) { 1+2; 3;} == null" +"if (1 < 2) 3; == 3" +"if (1 < 2) 3; else {1+2; 4;} == 3" +"if (1 > 2) 3; else {1+2; 4;} == 4" +"if (1 < 2) 3; else 4; == 3" +"if (1 > 2) 3; else 4; == 4" +"if (1 < 2) 3; else if (1 < 2) {1+2; 4;} == 3" +"if (1 > 2) 3; else if (1 < 2) {1+2; 4;} == 4" +"if (1 > 2) 3; else if (1 > 2) {1+2; 4;} == null" +"if (1 < 2) 3; else if (1 < 2) 4; == 3" +"if (1 > 2) 3; else if (1 < 2) 4; == 4" +"if (1 > 2) 3; else if (1 > 2) 4; == null" +"if (1 > 2) 3; == null" +"inrange('aaa','bbb','ccc')" +"(min(0,1) ? 1 + 3 : 1 + 4) == 5" +"(min(1,2) ? 1 + 3 : 1 + 4) == 4" +"repeat 1.1 + 2.2 until (1 < 2)" +"repeat 1.1234; 1 < 2; 1.1 + 2.2 until (1 < 2)" +"switch { case 1 > 1 : 1; case 2 > 2 : 2; case 3 = 3 : 3; case 4 > 4 : 4; default : 5; }" +"switch { case (1 > 2) : 0; case (1 <= 2) : 1; default: 1.12345; }" +"switch { case (1 <= 2) : 1; default: 1.12345; }" +"switch { case (1 <= 2) : switch { case (1 <= 2) : 1; default: 1.12345; }; default: 1.12345; }" +"switch { case ([x > y]) : [0]; case ([x <= y]) : [y - x]; default: 1.12345; }" +"switch { case (x > y) : 0; case (x <= y) : (y - x); default: 1.12345; }" +"switch { case {(x <= y)} : switch { case ({x <= y}) : x; default: 1.12345; }; default: 1.12345; }" +"switch { case {x <= y} : switch { case {x <= y} : x; default: 1.12345; }; default: 1.12345; }" +"switch { case (x <= y) : switch { case (x <= y) : (y - x); default: 1.12345; }; default: 1.12345; }" +"switch { case {x <= y} : x; default: 1.12345; }" +"switch { case [(x <= y)] : {y - x}; default: 1.12345; }" +"switch { case (x <= y) : (y - x); default: 1.12345; }" +"var s := 'abc'; ~{1 + 2; 'abc' + s; s} == s" +"var s := 'abc'; ~{1 + 2; var x := 'ab'; x + 'c'} == s" +"var s := 'abc'; ~{'ab' + 'c'} == s" +"var s := 'abc'; ~{'abc' } == s" +"var s := 'abc'; s == ~{'ab' + 'c'}" +"var s := 'abc'; s == ~{'abc' }" +"var s := 'abc'; ~{s } == s" +"var s := 'abc'; s == ~{s }" +"var v0[3] := {1,2, 3}; var v1[3] := {1,1,1}; v0 -= v1; (v0[0] == 0) and (v0[1] == 1) and (v0[2] == 2)" +"var v0[3] := {1,2, 3}; var v1[3] := {1,1,1}; v0 += v1; (v0[0] == 2) and (v0[1] == 3) and (v0[2] == 4)" +"var v0[3] := {1,2, 3}; var v1[3] := {2,2,2}; v0 *= v1; (v0[0] == 2) and (v0[1] == 4) and (v0[2] == 6)" +"var v0[3] := [1]; var v1[3] := [1]; v0 -= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 0)" +"var v0[3] := [1]; var v1[3] := [1]; v0 += v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)" +"var v0[3] := [1]; var v1[3] := [2]; v0 *= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)" +"var v0[3] := {3,9,15}; var v1[3] := {3,3,3}; v0 /= v1; (v0[0] == 1) and (v0[1] == 3) and (v0[2] == 5)" +"var v0[3] := [3]; var v1[3] := [3]; v0 /= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 1)" +"var v[2] := {1,2}; swap(v[0],v[1]); (v[0] == 2) and (v[1] == 1)" +"var v[2] := {1,2}; swap(v[2 * zero],v[(2 * one) / (1 + 1)]); (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1)" +"var v[2] := {1,2}; swap(v[zero],v[one]); (v[zero] == 2) and (v[one] == 1)" +"var v[2] := {1,2}; v[0] <=> v[1] ; (v[0] == 2) and (v[1] == 1)" +"var v[2] := {1,2}; ~(v[2 * zero] <=> v[(2 * one) / (1 + 1)] , (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))" +"var v[2] := {1,2}; v[2 * zero] <=> v[(2*one)/(1+1)] ; (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1)" +"var v[2] := {1,2}; v[zero] <=> v[one] ; (v[zero] == 2) and (v[one] == 1)" +"var v[3] := {1,2, 3}; v -= 1; (v[0] == 0) and (v[1] == 1) and (v[2] == 2)" +"var v[3] := {1,2, 3}; v += 1; (v[0] == 2) and (v[1] == 3) and (v[2] == 4)" +"var v[3] := {1,2, 3}; v *= 2; (v[0] == 2) and (v[1] == 4) and (v[2] == 6)" +"var v[3] := [1]; v -= 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 0)" +"var v[3] := [1]; v += 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)" +"var v[3] := [1]; v *= 2; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)" +"var v[3] := {3,9,15}; v /= 3; (v[0] == 1) and (v[1] == 3) and (v[2] == 5)" +"var v[3] := [3]; v /= 3; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 1)" +"var x; 1" +"var x[10] := [-1]; var y[10] := [-1]; for (var i := 0; i < 10; i += 1) { x[i] := i; y[i] := 2 * x[i]; }; (sum(x) == 45) and (sum(y) == (2 * sum(x)));" +"var x[10^6]:=[2];var y[10^6]:=[3]; var s:=0;equal(for(var i:=0; i<10;i+=1){s+= sum(5 *(2x-y/3)) + i;},150000045.0)" +"var x[10^6] := null; var y[10^7] := null; 0 * (min(x) + min(y)) + x[] + y[] == 10^7 + 10^6" +"(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6" +"(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x := [2] }}) == 6" +"(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x := [2] } + ~{{ var x[1] := [2] }}) == 6" +"(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6" +"(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x := [2] }}) == 6" +"(~{~{~{var x[1] := [1]}}} + ~{~{var x[1] := [2]}} + ~{var x[1] := [3]}) == 6" +"(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x := [1] } + ~{ var x[1] := [2] }}) == 6" +"(~{~{ var x[1] := [1] }} + ~{ var x := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6" +"(~{ var x[1] := [1] } + ~{ var x := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6" +"var x:=1; 2-(3+abs(x)) == -2" +"var x:=1; 2/(3*abs(x)) == (2/3)" +"var x:=1; 2+(3-abs(x)) == 4" +"var x:=1; 2+(3+abs(x)) == 6" +"~{var x := '123'; x[]} + ~{~{var x := '1234'; x[]}} == 7" +"~{var x := '123'; x[]} + ~{var x := '1234'; x[]} == 7" +"~{var x := '123'; x[]} + ~{~{var x := 4}} == 7" +"~{var x := '123'; x[]} + ~{var x := 4} == 7" +"var x:=1; 2+(abs(x)-3) == 0" +"var x:=1; 2-(abs(x)+3) == -2" +"var x:=1; 2*(abs(x)/3) == (2/3)" +"var x:=1; 2+(abs(x)+3) == 6" +"var x:=1; (3+abs(x))-2 == 2" +"var x:=1; (3*abs(x))/2 == (3/2)" +"var x:=1; (3-abs(x))+2 == 4" +"var x:=1; (3+abs(x))+2 == 6" +"var x:=1; (abs(x)-3)+2 == 0" +"var x:=1; (abs(x)/3)/2 == (1/6)" +"var x:=1; (abs(x)+3)-2 == 2" +"var x:=1; (abs(x)/3)*2 == (2/3)" +"var x:=1; (abs(x)*3)/2 == (3/2)" +"var x:=1; (abs(x)+3)+2 == 6" +"(~{~{ var x := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6" +"(~{ var x := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6" +"~{ var x := 1 } + ~{ var x := 2 } == 3" +"(~{ var x := 1 } + ~{ var x := 2 } + ~{~{ var x := 1 } + ~{ var x := 2 }}) == 6" +"(~{ var x := 1 } + ~{ var x := 2 }) == (~{ var x := 2 } + ~{ var x := 1 })" +"(~{ var x := 1 } + ~{ var x[6] := {6,5,4,3,2,1} }) == 7" +"var x := 1; var y := 2; 1" +"var x := 1; var y := 2; swap(x,y); (x == 2) and (y == 1)" +"var x := 1; var y := 2; ~(swap(x,y),(x == 2) and (y == 1))" +"var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[0]); swap(v[1],y); (x == 3) and (y == 4)" +"var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[2 * zero]); swap(v[(2 * one) / (1 + 1)],y); (x == 3) and (y == 4)" +"var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[zero]); swap(v[one],y); (x == 3) and (y == 4)" +"var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[0]; v[1] <=> y; (x == 3) and (y == 4)" +"var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[zero / 3]; v[(2 * one)/(1 + 1)] <=> y; (x == 3) and (y == 4)" +"var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[zero]; v[one] <=> y; (x == 3) and (y == 4)" +"var x := 1; var y := 2; x" +"var x := 1; var y := 2; x <=> y ; (x == 2) and (y == 1)" +"var x := 1; x" +"var x := 2; (~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } else break[i + j]; } } } + ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } else break[i + j]; } } }) == 18" +"var x := 2; var v0[3] := {1,2,3}; ( ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) { var y := 3; var v2[3] := {1,2,3}; if ( (i + j + y + x + abs(v0[i % v0[]] - v2[j % v2[]])) < 6) { var v3[3] := {1,2,3}; y += x / v3[j % v3[]]; continue; } else break[i + j]; } } } + ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) { var y := 3; var v2[3] := {1,2,3}; if ((i + j + y + x + abs(v0[i % v0[]] - v2[j % v2[]])) < 6) { var v3[3] := {1,2,3}; y += x / v3[j % v3[]]; continue; } else break[i + j]; } } } ) == 18" +"var x:= 2; var y := 3; (-abs(x + 0)+abs(y - 0)) == 1" +"var x:= 2; var y := 3; (-abs(x + 0)--abs(y - 0)) == 1" +"var x:= 2; var y := 3; (-abs(x + 0)/-abs(y - 0)) == (2/3)" +"var x:= 2; var y := 3; (abs(x + 0)--abs(y - 0)) == 5" +"var x:= 2; var y := 3; (-abs(x + 0)-abs(y - 0)) == -5" +"var x:= 2; var y := 3; (-abs(x + 0)+-abs(y - 0)) == -5" +"var x:= 2; var y := 3; (-abs(x + 0)*-abs(y - 0)) == 6" +"var x:= 2; var y := 3; (-abs(x)+abs(y)) == 1" +"var x:= 2; var y := 3; (-abs(x)--abs(y)) == 1" +"var x:= 2; var y := 3; (-abs(x)/-abs(y)) == (2/3)" +"var x:= 2; var y := 3; (abs(x)--abs(y)) == 5" +"var x:= 2; var y := 3; (-abs(x)-abs(y)) == -5" +"var x:= 2; var y := 3; (-abs(x)+-abs(y)) == -5" +"var x:= 2; var y := 3; (-abs(x)*-abs(y)) == 6" +"var x[3] := {0.1,0.2,0.3}; sum(trunc(x)) == 0" +"var x[3] := [0]; var y[1] := {1}; x <= y" +"var x[3] := [0]; var y[1] := {1}; x < Y" +"var x[3] := [0]; var y[1] := {1}; x < (y += 1)" +"var x[3] := [0]; var y[1] := {5}; (x += 1) < y" +"var x[3] := [0]; var y[1] := {5}; (x += 1) < (y += 1)" +"var x[3] := [0]; var y[2] := {1,2}; x <= y" +"var x[3] := [0]; var y[2] := {1,2}; X < y" +"var x[3] := [0]; var y[2] := {1,2}; x < (y += 1)" +"var x[3] := [0]; var y[2] := {5,6}; (x += 1) < y" +"var x[3] := [0]; var y[2] := {5,6}; (x += 1) < (y += 1)" +"var x[3] := [0]; var y[3] := {1,2,3}; x <= y" +"var x[3] := [0]; var y[3] := {1,2,3}; x < Y" +"var x[3] := [0]; var y[3] := {1,2,3}; x < (y += 1)" +"var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < y" +"var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < (y += 1)" +"var x[3] := [0]; var y[4] := {1,2,3,4}; x <= y" +"var x[3] := [0]; var y[4] := {1,2,3,4}; X < y" +"var x[3] := [0]; var y[4] := {1,2,3,4}; x < (y += 1)" +"var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < y" +"var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < (y += 1)" +"var x[3] := {1,1,1}; var y := 1; x == y" +"var x[3] := {1,1,1}; var y := 1; y == x" +"var x[3] := {1,1,1}; var y := 2; x == y - 1" +"var x[3] := {1,1,1}; var y := 2; y - 1 == x" +"var x[3] := {-1,-2,-3}; sum(abs(x) ) == 6" +"var x[3] := {1,2,3}; var y := 3; equal(true,(x -= 1) < y + 1)" +"var x[3] := {1,2,3}; var y := 3; x <= y + 1" +"var x[3] := {1,2,3}; var y := 3; x < y + 1" +"var x[3] := {1,2,3}; var y := 3; y >= x" +"var x[3] := {1,2,3}; var y := 5; equal(true,(x -= 1) <= y)" +"var x[3] := {1,2,3}; var y := 5; equal(true,(x += 1) < y)" +"var x[3] := {1,2,3}; var y := 5; x <= y" +"var x[3] := {1,2,3}; var y := 5; x < y" +"var x[3] := {1,2,3}; var y := 5; y + 1 > x" +"var x[3] := {1,2,3}; var y := 5; y + 1 > (x += 1)" +"var x[3] := {1,2,3}; var y := 5; y > x" +"var x[3] := {1,2,3}; var y := 5; y > (x += 1)" +"var x[3] := {1,2,3}; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)" +"var x[3] := {1,2}; (x[0] == 1) and (x[1] == 2) and (x[2] == 0)" +"(~{ var x[3] := [1] } + ~{ var x[6] := {6,5,4,3,2,1}}) == 7" +"var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y)/3; z == 2(x * y)/3" +"var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y); z == (x * y)2" +"var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := (x * y); z == (x * y)" +"var x[3] := [1]; var y[1] := [1]; x == y" +"var x[3] := [1]; var y[1] := [2]; x != y" +"var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y)/3; z == 2(x / y)/3" +"var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y); z == (x / y)2" +"var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := (x / y); z == (x / y)" +"var x[3] := [1]; var y[2] := [1]; x == y" +"var x[3] := [1]; var y[2] := [2]; x != y" +"var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y)/3; z == 2(x - y)/3" +"var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y); z == (x - y)2" +"var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := (x - y); z == (x - y)" +"var x[3] := [1]; var y[3] := [1]; x == y" +"var x[3] := [1]; var y[3] := [2]; x != y" +"var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := 2(x + y)/3; z == 2(x + y)/3" +"var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := 2(x + y); z == (x + y)2" +"var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := (x + y); z == (x + y)" +"var x[3] := [1]; var y[4] := [1]; x == y" +"var x[3] := [1]; var y[4] := [2]; x != y" +"var x[3] := [1]; (x[0] == 1) and (x[1] == 1) and (x[2] == 1)" +"var x[3] := {2,2,2}; var y := 0; y + 1 == (x -= 1)" +"var x[3] := {2,2,2}; var y := 1; (x -= 1) == y" +"var x[3] := {2,2,2}; var y := 1; y == (x -= 1)" +"var x[3] := [5]; var y[1] := {1}; x >= y" +"var x[3] := [5]; var y[1] := {1}; x > y" +"var x[3] := [5]; var y[2] := {1,2}; x >= y" +"var x[3] := [5]; var y[2] := {1,2}; x > y" +"var x[3] := [5]; var y[3] := {1,2,3}; x >= y" +"var x[3] := [5]; var y[3] := {1,2,3}; x > y" +"var x[3] := [5]; var y[4] := {1,2,3,4}; x >= y" +"var x[3] := [5]; var y[4] := {1,2,3,4}; x > y" +"var x[3] := [8]; var y[1] := {1}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)" +"var x[3] := [8]; var y[1] := {1}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)" +"var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)" +"var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)" +"var x[3] := [8]; var y[3] := {1,2,3}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)" +"var x[3] := [8]; var y[3] := {1,2,3}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)" +"var x[3] := [8]; var y[4] := {1,2,3,4}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)" +"var x[3] := [8]; var y[4] := {1,2,3,4}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)" +"var x[3] := [9]; var y[1] := {1}; x <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)" +"var x[3] := [9]; var y[1] := {1}; x <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)" +"var x[3] := [9]; var y[2] := {1,2}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)" +"var x[3] := [9]; var y[2] := {1,2}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)" +"var x[3] := [9]; var y[3] := {1,2,3}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)" +"var x[3] := [9]; var y[3] := {1,2,3}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)" +"var x[3] := [9]; var y[4] := {1,2,3,4}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)" +"var x[3] := [9]; var y[4] := {1,2,3,4}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)" +"~{~{var x := 3}} + ~{var x := '1234'; x[]} == 7" +"~{var x := 3} + ~{var x := '1234'; x[]} == 7" +"var x[3] := {}; var y[1] := {1}; x := (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)" +"var x[3] := {}; var y[1] := {1}; x := y; (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)" +"var x[3] := {}; var y[2] := {1,2}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)" +"var x[3] := {}; var y[2] := {1,2}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)" +"var x[3] := {}; var y[3] := {1,2,3}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])" +"var x[3] := {}; var y[3] := {1,2,3}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])" +"var x[3] := {}; var y[4] := {1,2,3,4}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])" +"var x[3] := {}; var y[4] := {1,2,3,4}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])" +"var x := 3; var y := 6; -x * -y == 18" +"var x:=3; var y:=6; -(-(-x))*-(-(-y)) == 18" +"var x:=3; var y:=6; -(-x)*-(-(-y)) == -18" +"var x:=3; var y:=6; -(-x)*-(-y) == 18" +"var x := 3; var y := 6; x + -y == -3" +"var x := 3; var y := 6; -x - -y == 3" +"var x := 3; var y := 6; x - -y == 9" +"var x := 3; var y := 6; -x + -y == -9" +"var x:=3; var y:=6; -(-(-(x+y)))*-(-(-(y+x))) == 81" +"var x:=3; var y:=6; -(-(-(x+y)))*-(-(y+x)) == -81" +"var x:=3; var y:=6; -(-(x+y))*-(-(y+x)) == 81" +"var x[3] := {}; (x[0] == 0) and (x[1] == 0) and (x[2] == 0)" +"var x[6] := {1,2,3,4,5,6}; equal(sqrt(sum([x - avg(x)]^2) / x[]),1.7078251277)" +"(~{ var x[6] := {6,5,4,3,2,1} } + ~{ var x := 1 }) == 7" +"var x := 6; var y := 3; -x / -y == 2" +"var x:=6; var y:=4; 3 / -x == -0.5" +"var x:=6; var y:=4; -3 / -x == 0.5" +"var x:=6; var y:=4; 3 * -x == -18" +"var x:=6; var y:=4; -3 * -x == 18" +"var x:=6; var y:=4; 3 + -x == -3" +"var x:=6; var y:=4; -3 - -x == 3" +"var x:=6; var y:=4; 3 - -x == 9" +"var x:=6; var y:=4; -3 + -x == -9" +"var x:=6; var y:=4; x * -3 == -18" +"var x:=6; var y:=4; x / -3 == -2" +"var x:=6; var y:=4; -x - -3 == -3" +"var x:=6; var y:=4; x + -3 == 3" +"var x:=6; var y:=4; -x + -3 == -9" +"var x:=6; var y:=4; x - -3 == 9" +"var x := 'abc'; var y := '123'; x != y" +"var x := 'abc'; var y := '123' + x; y == '123abc'" +"var x := 'abc'; var y := x + '123'; y == 'abc123'" +"var x := 'abc'; x == 'abc'" +"~{var x := 'xxx'; var y := 'yyy';~{((x + '2') != x ? x : y) == x }}" +"~{var x := 'xxx'; var y := 'yyy';~{(x == (x + '1') ? x : y) == y }}" +"~{var x := 'xxx'; var y := 'yyy';~{'xxx1' == (x < y ? x + '1' : y)}}" +"~{var x := 'xxx'; var y := 'yyy';~{x == (x != (x + '2') ? x : y) }}" +"~{var x := 'xxx'; var y := 'yyy';~{(x < y ? x + '1' : y) == 'xxx1'}}" +"~{var x := 'xxx'; var y := 'yyy';~{(x > y ? x : y + '2') == 'yyy2'}}" +"~{var x := 'xxx'; var y := 'yyy';~{(x < y ? x : y) == x }}" +"~{var x := 'xxx'; var y := 'yyy';~{(x > y ? x : y) == y }}" +"~{var x := 'xxx'; var y := 'yyy';~{y == (x == (x + '1') ? x : y) }}" +"~{var x := 'xxx'; var y := 'yyy';~{'yyy2' == (x > y ? x : y + '2')}}" +"'abcd' like 'abcd*'" +"'abcd' like 'abc*'" +"'abcd' like 'ab*'" +"'abcd' like 'a*'" +"'abcd' like 'abcd?'" +"'abcd' like 'abc?'" +"'abcd' like 'abc??'" +"'abcd' like 'ab???'" +"'abcd' like 'a????'" +"'abcd' like '?????'" +"'a' like 'a*'" +"'ab' like 'a*'" +"'abcd' like 'abcd*'" +"'' like ''" +"'abcd' like 'abcd'" +"'abcd' like 'abc*'" +"'abcd' like '*bcd'" +"'abcd' like 'abc?'" +"'abcd' like '?bcd'" +"'abcd' like 'ab?d'" +"'abcd' like 'ab*d'" +"'abcd' like 'a?cd'" +"'abcd' like 'a*cd'" +"'abcd' like 'a??d'" +"'abcd' like 'a*?d'" +"'abcd' like '*bc*'" +"'abcd' like '?bc?'" +"'abcd' like '????'" +"'abcd' like 'a???'" +"'abcd' like 'ab??'" +"'abcd' like 'abc?'" +"'abcd' like '???d'" +"'abcd' like '??cd'" +"'abcd' like '?bcd'" +"'abcd' like '?b?d'" +"'abcd' like 'a?c?'" +"'abcd' like 'a??d'" +"'abcd' like '?bc?'" +"'abcd' like 'ab**'" +"'abcd' like 'ab*?'" +"'abcd' like 'a***'" +"'abcd' like '**cd'" +"'abcd' like '*?cd'" +"'abcd' like '***d'" +"'abcd' like '?*?d'" +"'abcd' like '?*?d'" +"'abcd' like '*bc*'" +"'abcd' like '*bc?'" +"'abcd' like '*b??'" +"'abcd' like '?bc*'" +"'abcd' like '??c*'" +"'abcd' like '*b?*'" +"'abcd' like '*b*d'" +"'abcd' like 'a*c*'" +"'abcd' like '?*cd'" +"'abcd' like 'ab?*'" +"'abcd' like 'ab*?'" +"'abcd' like 'a?*d'" +"'ab' like 'a*'" +"'ab' like 'a?'" +"'a' like 'a*'" +"'a' like 'a?'" +"'xalabcd' like '*abcd*'" +"'xablabcd' like '*abcd*'" +"'xabclabcd' like '*abcd*'" +"'aaaaa' like '*aa?'" +"'abcd' like 'xyzw'" +"'abcd' like 'xyz'" +"'abc' like 'xyzw'" +"'abcd' like 'ab?'" +"'abcd' like 'a?'" +"'abcd' ilike 'abcd*'" +"'abcd' ilike 'abc*'" +"'abcd' ilike 'ab*'" +"'abcd' ilike 'a*'" +"'abcd' ilike 'abcd?'" +"'abcd' ilike 'abc?'" +"'abcd' ilike 'abc??'" +"'abcd' ilike 'ab???'" +"'abcd' ilike 'a????'" +"'abcd' ilike '?????'" +"'a' ilike 'a*'" +"'ab' ilike 'a*'" +"'abcd' ilike 'abcd*'" +"'' ilike ''" +"'abcd' ilike 'abcd'" +"'abcd' ilike 'abc*'" +"'abcd' ilike '*bcd'" +"'abcd' ilike 'abc?'" +"'abcd' ilike '?bcd'" +"'abcd' ilike 'ab?d'" +"'abcd' ilike 'ab*d'" +"'abcd' ilike 'a?cd'" +"'abcd' ilike 'a*cd'" +"'abcd' ilike 'a??d'" +"'abcd' ilike 'a*?d'" +"'abcd' ilike '*bc*'" +"'abcd' ilike '?bc?'" +"'abcd' ilike '????'" +"'abcd' ilike 'a???'" +"'abcd' ilike 'ab??'" +"'abcd' ilike 'abc?'" +"'abcd' ilike '???d'" +"'abcd' ilike '??cd'" +"'abcd' ilike '?bcd'" +"'abcd' ilike '?b?d'" +"'abcd' ilike 'a?c?'" +"'abcd' ilike 'a??d'" +"'abcd' ilike '?bc?'" +"'abcd' ilike 'ab**'" +"'abcd' ilike 'ab*?'" +"'abcd' ilike 'a***'" +"'abcd' ilike '**cd'" +"'abcd' ilike '*?cd'" +"'abcd' ilike '***d'" +"'abcd' ilike '?*?d'" +"'abcd' ilike '?*?d'" +"'abcd' ilike '*bc*'" +"'abcd' ilike '*bc?'" +"'abcd' ilike '*b??'" +"'abcd' ilike '?bc*'" +"'abcd' ilike '??c*'" +"'abcd' ilike '*b?*'" +"'abcd' ilike '*b*d'" +"'abcd' ilike 'a*c*'" +"'abcd' ilike '?*cd'" +"'abcd' ilike 'ab?*'" +"'abcd' ilike 'ab*?'" +"'abcd' ilike 'a?*d'" +"'ab' ilike 'a*'" +"'ab' ilike 'a?'" +"'a' ilike 'a*'" +"'a' ilike 'a?'" +"'xalabcd' ilike '*abcd*'" +"'xablabcd' ilike '*abcd*'" +"'xabclabcd' ilike '*abcd*'" +"'aaaaa' ilike '*aa?'" +"'abcd' ilike 'xyzw'" +"'abcd' ilike 'xyz'" +"'abc' ilike 'xyzw'" +"'abcd' ilike 'ab?'" +"'abcd' ilike 'a?'" +"~{var s := ~{var n := 1; var m := 2; if (n < m) 'n < m'; else 'n >= m'; }; (s == 'n < m')}" +"~{var s := ~{var n := 1; var m := 2; if (n > m) 'n <= m'; else 'n > m'; }; (s == 'n > m')}" +"~{var s := ~{var n := 1; var m := 2; if (n < m) 'n < m'; else 'n >' + '= m'; }; (s == 'n < m')}" +"~{var s := ~{var n := 1; var m := 2; if (n < m) 'n ' + '< m'; else 'n >= m'; }; (s == 'n < m')}" +"~{var s := ~{var n := 1; var m := 2; if (n > m) 'n <= m'; else 'n ' + '> m'; }; (s == 'n > m')}" +"~{var s := ~{var n := 1; var m := 2; if (n > m) 'n <' + '= m'; else 'n > m'; }; (s == 'n > m')}" +"~{var s := ~{var n := 1; var m := 2; var r0 := 'n < m'; var r1 := 'n >= m'; if (n < m) r0; else r1; }; (s == 'n < m')}" +"~{var s := ~{var n := 1; var m := 2; var r0 := 'n < m'; var r1 := 'n >= m'; if (n < m) r0 + ''; else r1 + ''; }; (s == 'n < m')}" +"~{var s := ~{var n := 1; var m := 2; var r0 := 'n < m'; var r1 := 'n >= m'; if (n < m) '' + r0; else '' + r1; }; (s == 'n < m')}" \ No newline at end of file