/** * Author: Georg Hofferek <georg.hofferek@iaik.tugraz.at> */ package at.iaik.suraq.test; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.junit.Assert; import org.junit.Test; import at.iaik.suraq.exceptions.InvalidIndexGuardException; import at.iaik.suraq.exceptions.InvalidValueConstraintException; import at.iaik.suraq.smtlib.formula.AndFormula; import at.iaik.suraq.smtlib.formula.ArrayProperty; import at.iaik.suraq.smtlib.formula.ArrayRead; import at.iaik.suraq.smtlib.formula.ArrayVariable; import at.iaik.suraq.smtlib.formula.DomainEq; import at.iaik.suraq.smtlib.formula.DomainTerm; import at.iaik.suraq.smtlib.formula.DomainVariable; import at.iaik.suraq.smtlib.formula.Formula; import at.iaik.suraq.smtlib.formula.ImpliesFormula; import at.iaik.suraq.smtlib.formula.PropositionalConstant; /** * @author Georg Hofferek <georg.hofferek@iaik.tugraz.at> * */ public class ArrayPropertiesTest { /** * Test method for * {@link at.iaik.suraq.smtlib.formula.ArrayProperty#arrayPropertiesToFiniteConjunctions(java.util.Set)} * . * * @throws InvalidValueConstraintException * @throws InvalidIndexGuardException */ @Test public void testArrayPropertiesToFiniteConjunctions() throws InvalidIndexGuardException, InvalidValueConstraintException { DomainVariable uVar = DomainVariable.create("uVar"); DomainVariable i1 = DomainVariable.create("i1"); DomainVariable i2 = DomainVariable.create("i2"); DomainVariable i3 = DomainVariable.create("i3"); DomainVariable constant = DomainVariable.create("constant"); ArrayVariable array = ArrayVariable.create("array"); ArrayRead read = ArrayRead.create(array, uVar); List<DomainTerm> list = new ArrayList<DomainTerm>(); list.add(read); list.add(constant); List<DomainVariable> uVars = new ArrayList<DomainVariable>(); uVars.add(uVar); Formula indexGuard = PropositionalConstant.create(true); Formula valueConstraint = DomainEq.create(list, true); ArrayProperty property = ArrayProperty.create(uVars, indexGuard, valueConstraint); Set<DomainTerm> indexSet = new HashSet<DomainTerm>(); indexSet.add(i1); indexSet.add(i2); indexSet.add(i3); AndFormula actual = property.toFiniteConjunction(indexSet); List<Formula> conjuncts = new ArrayList<Formula>(); for (DomainTerm var : indexSet) { Formula leftSide = PropositionalConstant.create(true); read = ArrayRead.create(array, var); list.clear(); list.add(read); list.add(constant); Formula rightSide = DomainEq.create(list, true); Formula conjunct = ImpliesFormula.create(leftSide, rightSide); conjuncts.add(conjunct); } AndFormula expected = AndFormula.generate(conjuncts); Assert.assertEquals(expected, actual); } }