#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2009, 2010, 2011, 2012, 2014 Laboratoire de Recherche
# et Développement de l'EPITA (LRDE)
#
# This file is part of Spot, a model checking library.
#
# Spot is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Spot is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


. ./defs

set -e

pwd
lc="genltl"

run='run 0'

check_formula()
{
  # First, check the satisfiability of the formula with Spot
  $run ../ikwiad -CR -e -x -f "$1" >/dev/null
  # Also check the satisfiability of the degeneralized formula
  $run ../ikwiad -CR -e -DT -x -f "$1" >/dev/null
  $run ../ikwiad -CR -e -DS -x -f "$1" >/dev/null
}

# Kristin Y. Rozier reported that the formulae with n=10 were badly
# translated.  Each of these formulae should have exactly one
# accepting path, but in this case the emptiness returned an automata
# without cycle.  It turned out the function used to compare LTL
# formulae was bugged when two LTL formulae had the same hash value,
# so the translation of the formula stopped midway, on a formula it
# thought it had already seen.

check_range()
{
  "$lc" --rv-counter $1 --rv-counter-linear $1 \
        --rv-counter-carry $1 --rv-counter-carry-linear $1 |
  while read line; do
    check_formula "$line"
  done
}

check_range 1..2
# Do not run the larger formulae with valgrind, it is too slow
run=
check_range 3..11
