use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.
the class SelectExpressionsSatisfyingComparisonStepSolverTest method test.
@Test
public void test() {
TheoryTestingSupport theoryTestingSupport = TheoryTestingSupport.make(makeRandom(), new DifferenceArithmeticTheory(true, true));
Context context = theoryTestingSupport.makeContextWithTestingInformation();
List<String> expressionStrings;
Expression bound;
Expression expected;
expressionStrings = list("I", "J");
bound = parse("J");
expected = parse("if I < J then list(I) else list()");
runTest(expressionStrings, bound, expected, context);
expressionStrings = list("I", "2", "J");
bound = parse("3");
expected = parse("if I < 3 then if J < 3 then list(I, 2, J) else list(I, 2) else if J < 3 then list(2, J) else list(2)");
runTest(expressionStrings, bound, expected, context);
expressionStrings = list();
bound = parse("3");
expected = parse("list()");
runTest(expressionStrings, bound, expected, context);
expressionStrings = list("I", "2", "J");
bound = parse("infinity");
expected = parse("list(I, 2, J)");
runTest(expressionStrings, bound, expected, context);
expressionStrings = list("I", "2", "J");
bound = parse("-infinity");
expected = parse("list()");
runTest(expressionStrings, bound, expected, context);
expressionStrings = list("I", "2", "infinity");
bound = parse("3");
expected = parse("if I < 3 then list(I, 2) else list(2)");
runTest(expressionStrings, bound, expected, context);
}
use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.
the class BruteForceCommonInterpreterTest method runTest.
public void runTest(String expression, String expected, BruteForceCommonInterpreter interpreter, Context context) {
Expression result = interpreter.apply(parse(expression), context);
Assert.assertEquals(parse(expected), result);
}
use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.
the class BruteForceCommonInterpreterTest method test.
@Test
public void test() {
LinkedHashMap<Expression, Expression> assignment = map(parse("Two"), Expressions.TWO);
BruteForceCommonInterpreter interpreter = new BruteForceCommonInterpreter();
Context context = new TrueContext();
context = AbstractIterativeMultiIndexQuantifierElimination.extendAssignments(assignment, context);
String expression;
String expected;
expression = "max({{ (on I in 0..3) max( {{ (on J in 0..3) I + J : I != J }} ) }})";
expected = "5";
runTest(expression, expected, interpreter, context);
expression = "3 * (Two + 5 - 3)*(-10)";
expected = "-120";
runTest(expression, expected, interpreter, context);
expression = "3 * (2 + 5 - 3)*(-10)";
expected = "-120";
runTest(expression, expected, interpreter, context);
expression = "sum({{ (on x in 0..2) x }} )";
expected = "3";
runTest(expression, expected, interpreter, context);
expression = "sum({{ (on f in 0..2 -> Boolean) if f(0) then 2 else 3 }} )";
expected = "20";
runTest(expression, expected, interpreter, context);
expression = "sum({{ (on f in 0..2 -> Boolean) if f(0) and f(1) then 2 else 3 : f(2) }} )";
expected = "11";
runTest(expression, expected, interpreter, context);
expression = "sum({{ (on f in 0..2 -> Boolean) " + "if f(0) and f(1) then 2 else | f in 0..2 x 0..2 -> Boolean : f(0, 0) | " + ": f(2) }} )";
expected = "770";
runTest(expression, expected, interpreter, context);
expression = "sum({{ (on f in '->'(x(1..2), Boolean), g in '->'(x(1..2), Boolean)) if f(1) and g(2) then 2 else 3 : f(2) }} )";
expected = "22";
runTest(expression, expected, interpreter, context);
expression = "| f in '->'(x(0..2, 0..2), Boolean) : f(0, 0) |";
expected = "256";
runTest(expression, expected, interpreter, context);
expression = "| f in 0..2 x 0..2 -> Boolean : f(0, 0) |";
expected = "256";
runTest(expression, expected, interpreter, context);
expression = "| f in 0..2 x 0..2 -> Boolean, g in 0..2 -> Boolean : f(0, 0) |";
expected = "2048";
runTest(expression, expected, interpreter, context);
expression = "sum( {{ (on p in Boolean) if p then 1 else 2 }} )";
expected = "3";
runTest(expression, expected, interpreter, context);
}
use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.
the class IntensionalSetConditionSimplifierTest method testBasicCases.
@Test
public void testBasicCases() {
Expression iSet = parse("{(on I in 1..10) (I, 2) : I != 5}");
Assert.assertEquals(parse("{(on I in 1..10) (I, 2) : I != 5}"), simplifier.apply(iSet, context));
iSet = parse("{{(on I in 1..10) (I, 2) : I != 5}}");
Assert.assertEquals(parse("{{(on I in 1..10) (I, 2) : I != 5}}"), simplifier.apply(iSet, context));
iSet = parse("{(on I in 1..10) (I, 2) : I != 5 and I = 5}");
Assert.assertEquals(parse("{(on I in 1..10) (I, 2) : false}"), simplifier.apply(iSet, context));
iSet = parse("{{(on I in 1..10) (I, 2) : I != 5 and I = 5}}");
Assert.assertEquals(parse("{{(on I in 1..10) (I, 2) : false}}"), simplifier.apply(iSet, context));
}
use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.
the class MeasureTest method measure.
private Rational measure(String testIntensionalSetString) {
Expression testIntensionalSetExpression = parse(testIntensionalSetString);
Expression properlyConditionedIntensionalSetExpression = testIntensionalSetExpression;
if (Sets.isIntensionalSet(testIntensionalSetExpression)) {
IntensionalSet intensionalSet = (IntensionalSet) testIntensionalSetExpression;
List<Expression> indices = IndexExpressions.getIndices(intensionalSet.getIndexExpressions());
if (indices.size() == 1) {
Expression index = indices.get(0);
Context intensionalSetContext = context.extendWith(intensionalSet.getIndexExpressions());
Type type = GrinderUtil.getType(index, intensionalSetContext);
if (type instanceof RealExpressoType || type instanceof RealInterval) {
SingleVariableLinearRealArithmeticConstraint singleVariableConstraint = new SingleVariableLinearRealArithmeticConstraint(index, true, context.getTheory());
singleVariableConstraint = (SingleVariableLinearRealArithmeticConstraint) singleVariableConstraint.conjoin(intensionalSet.getCondition(), intensionalSetContext);
properlyConditionedIntensionalSetExpression = IntensionalSet.make(Sets.isMultiSet(intensionalSet) ? IntensionalSet.MULTI_SET_LABEL : IntensionalSet.UNI_SET_LABEL, intensionalSet.getIndexExpressions(), intensionalSet.getHead(), singleVariableConstraint);
}
}
}
Rational result = Measure.get(properlyConditionedIntensionalSetExpression, context);
return result;
}
Aggregations