@Test public void testBasicUsage() { assertEquals(calculateLiteralValue("42", ImmutableMap.of()), Long.valueOf(42)); assertEquals(calculateLiteralValue("NULL", ImmutableMap.of()), Long.valueOf(0)); assertEquals(calculateLiteralValue("null", ImmutableMap.of()), Long.valueOf(0)); assertEquals(calculateLiteralValue("x", ImmutableMap.of("x", 42L)), Long.valueOf(42)); assertEquals(calculateLiteralValue("(42)", ImmutableMap.of()), Long.valueOf(42)); assertEquals(calculateLiteralValue("(NULL)", ImmutableMap.of()), Long.valueOf(0)); assertEquals(calculateLiteralValue("(x)", ImmutableMap.of("x", 42L)), Long.valueOf(42)); assertEquals(calculateLiteralValue("42 + 55", ImmutableMap.of()), Long.valueOf(42 + 55)); assertEquals(calculateLiteralValue("42 - 55", ImmutableMap.of()), Long.valueOf(42 - 55)); assertEquals(calculateLiteralValue("42 * 55", ImmutableMap.of()), Long.valueOf(42 * 55)); assertEquals(calculateLiteralValue("42 / 6", ImmutableMap.of()), Long.valueOf(42 / 6)); assertEquals(calculateLiteralValue("42 + 55 * 6", ImmutableMap.of()), Long.valueOf(42 + 55 * 6)); assertEquals(calculateLiteralValue("(42 + 55) * 6", ImmutableMap.of()), Long.valueOf((42 + 55) * 6)); assertEquals(calculateLiteralValue("min(10,2)", ImmutableMap.of()), Long.valueOf(2)); assertEquals(calculateLiteralValue("min(10,2*10)", ImmutableMap.of()), Long.valueOf(10)); assertEquals(calculateLiteralValue("max(10,2*10)", ImmutableMap.of()), Long.valueOf(20)); assertEquals(calculateLiteralValue("max(10,2)", ImmutableMap.of()), Long.valueOf(10)); assertEquals(calculateLiteralValue("x + y", ImmutableMap.of("x", 42L, "y", 55L)), Long.valueOf(42 + 55)); } }
public static Long calculateLiteralValue( String calculation, Map<String, Long> inputs) { try { ParserRuleContext tree = parseTypeCalculation(calculation); CalculateTypeVisitor visitor = new CalculateTypeVisitor(inputs); BigInteger result = visitor.visit(tree); return result.longValueExact(); } catch (StackOverflowError e) { throw new ParsingException("Type calculation is too large (stack overflow while parsing)"); } }
public static OptionalLong calculateLiteralValue( String calculation, Map<String, OptionalLong> inputs, boolean allowComplexExpression) { try { ParserRuleContext tree = parseTypeCalculation(calculation); if (!allowComplexExpression && !isSimpleExpression(tree)) { throw new IllegalArgumentException(format("Complex expressions not allowed, but got [%s]", calculation)); } return new CalculateTypeVisitor(inputs).visit(tree); } catch (StackOverflowError e) { throw new ParsingException("Type calculation is too large (stack overflow while parsing)"); } }
private void calculateVariableValuesForLongConstraints(BoundVariables.Builder variableBinder) { for (LongVariableConstraint longVariableConstraint : declaredSignature.getLongVariableConstraints()) { String calculation = longVariableConstraint.getExpression(); String variableName = longVariableConstraint.getName(); Long calculatedValue = calculateLiteralValue(calculation, variableBinder.getLongVariables()); if (variableBinder.containsLongVariable(variableName)) { Long currentValue = variableBinder.getLongVariable(variableName); checkState(Objects.equals(currentValue, calculatedValue), "variable '%s' is already set to %s when trying to set %s", variableName, currentValue, calculatedValue); } variableBinder.setLongVariable(variableName, calculatedValue); } }
public static Long calculateLiteralValue( String calculation, Map<String, Long> inputs) { try { ParserRuleContext tree = parseTypeCalculation(calculation); CalculateTypeVisitor visitor = new CalculateTypeVisitor(inputs); BigInteger result = visitor.visit(tree); return result.longValueExact(); } catch (StackOverflowError e) { throw new ParsingException("Type calculation is too large (stack overflow while parsing)"); } }
@Test(expectedExceptions = IllegalArgumentException.class) public void failDisallowUnaryExpression() { calculateLiteralValue("-y", ImmutableMap.of("Y", OptionalLong.of(55)), false); } }
@Test(expectedExceptions = IllegalArgumentException.class) public void failDisallowBinaryExpression() { calculateLiteralValue("x + y", ImmutableMap.of("X", OptionalLong.of(42), "Y", OptionalLong.of(55)), false); }
@Test public void disallowExpressionFlag() { assertEquals(calculateLiteralValue("x", ImmutableMap.of("X", OptionalLong.of(42)), false), OptionalLong.of(42)); }
@Test public void basicUsage() { assertEquals(calculateLiteralValue("42", ImmutableMap.of()), OptionalLong.of(42)); assertEquals(calculateLiteralValue("NULL", ImmutableMap.of()), OptionalLong.empty()); assertEquals(calculateLiteralValue("null", ImmutableMap.of()), OptionalLong.empty()); assertEquals(calculateLiteralValue("x", ImmutableMap.of("X", OptionalLong.of(42))), OptionalLong.of(42)); assertEquals(calculateLiteralValue("(42)", ImmutableMap.of()), OptionalLong.of(42)); assertEquals(calculateLiteralValue("(NULL)", ImmutableMap.of()), OptionalLong.empty()); assertEquals(calculateLiteralValue("(x)", ImmutableMap.of("X", OptionalLong.of(42))), OptionalLong.of(42)); assertEquals(calculateLiteralValue("42 + 55", ImmutableMap.of()), OptionalLong.of(42 + 55)); assertEquals(calculateLiteralValue("42 - 55", ImmutableMap.of()), OptionalLong.of(42 - 55)); assertEquals(calculateLiteralValue("42 * 55", ImmutableMap.of()), OptionalLong.of(42 * 55)); assertEquals(calculateLiteralValue("42 / 6", ImmutableMap.of()), OptionalLong.of(42 / 6)); assertEquals(calculateLiteralValue("42 + 55 * 6", ImmutableMap.of()), OptionalLong.of(42 + 55 * 6)); assertEquals(calculateLiteralValue("(42 + 55) * 6", ImmutableMap.of()), OptionalLong.of((42 + 55) * 6)); assertEquals(calculateLiteralValue("min(10,2)", ImmutableMap.of()), OptionalLong.of(2)); assertEquals(calculateLiteralValue("min(10,2*10)", ImmutableMap.of()), OptionalLong.of(10)); assertEquals(calculateLiteralValue("max(10,2*10)", ImmutableMap.of()), OptionalLong.of(20)); assertEquals(calculateLiteralValue("max(10,2)", ImmutableMap.of()), OptionalLong.of(10)); assertEquals(calculateLiteralValue("x + y", ImmutableMap.of("X", OptionalLong.of(42), "Y", OptionalLong.of(55))), OptionalLong.of(42 + 55)); assertEquals(calculateLiteralValue("x + y", ImmutableMap.of("X", OptionalLong.of(42), "Y", OptionalLong.empty())), OptionalLong.empty()); }
@Test public void testBasicUsage() { assertEquals(calculateLiteralValue("42", ImmutableMap.of()), Long.valueOf(42)); assertEquals(calculateLiteralValue("NULL", ImmutableMap.of()), Long.valueOf(0)); assertEquals(calculateLiteralValue("null", ImmutableMap.of()), Long.valueOf(0)); assertEquals(calculateLiteralValue("x", ImmutableMap.of("x", 42L)), Long.valueOf(42)); assertEquals(calculateLiteralValue("(42)", ImmutableMap.of()), Long.valueOf(42)); assertEquals(calculateLiteralValue("(NULL)", ImmutableMap.of()), Long.valueOf(0)); assertEquals(calculateLiteralValue("(x)", ImmutableMap.of("x", 42L)), Long.valueOf(42)); assertEquals(calculateLiteralValue("42 + 55", ImmutableMap.of()), Long.valueOf(42 + 55)); assertEquals(calculateLiteralValue("42 - 55", ImmutableMap.of()), Long.valueOf(42 - 55)); assertEquals(calculateLiteralValue("42 * 55", ImmutableMap.of()), Long.valueOf(42 * 55)); assertEquals(calculateLiteralValue("42 / 6", ImmutableMap.of()), Long.valueOf(42 / 6)); assertEquals(calculateLiteralValue("42 + 55 * 6", ImmutableMap.of()), Long.valueOf(42 + 55 * 6)); assertEquals(calculateLiteralValue("(42 + 55) * 6", ImmutableMap.of()), Long.valueOf((42 + 55) * 6)); assertEquals(calculateLiteralValue("min(10,2)", ImmutableMap.of()), Long.valueOf(2)); assertEquals(calculateLiteralValue("min(10,2*10)", ImmutableMap.of()), Long.valueOf(10)); assertEquals(calculateLiteralValue("max(10,2*10)", ImmutableMap.of()), Long.valueOf(20)); assertEquals(calculateLiteralValue("max(10,2)", ImmutableMap.of()), Long.valueOf(10)); assertEquals(calculateLiteralValue("x + y", ImmutableMap.of("x", 42L, "y", 55L)), Long.valueOf(42 + 55)); } }
break; case LITERAL_CALCULATION: { OptionalLong optionalLong = TypeCalculation.calculateLiteralValue( parameter.getLiteralCalculation().getCalculation(), inputs,