private boolean isExpressionValid(String expression, String qualifiedSorceName) { if (expression == null || expression.trim().isEmpty()) { return true; } if (expression.trim().equals(qualifiedSorceName.trim())) { return false; } try { final DefaultNamespace expressionValidationNamespace = new DefaultNamespace(); expressionValidationNamespace.registerSymbol(SymbolFactory.createVariable(qualifiedSorceName, 0.0)); final Term term = parser.parse(expression, expressionValidationNamespace); return term != null && term.isB(); } catch (ParseException ignored) { return false; } }
@Override public void adaptTo(Object timeSeriesKey, AxisMapping axisMapping) { if (timeSeriesExpressionsMap.containsKey(timeSeriesKey)) { currentExpressionMap = timeSeriesExpressionsMap.get(timeSeriesKey); } else { currentExpressionMap = new HashMap<String, String>(); timeSeriesExpressionsMap.put(timeSeriesKey, currentExpressionMap); } qualifiedSourceNames = extractQualifiedSourceNames(axisMapping); namespace = new DefaultNamespace(); for (String qualifiedSourceName : qualifiedSourceNames) { namespace.registerSymbol(SymbolFactory.createVariable(qualifiedSourceName, 0.0)); } if (qualifiedSourceNames.size() > 0 && hasUI) { expressionTextField.setEnabled(true); sourceNamesDropDown.setEnabled(true); sourceNamesDropDown.setModel(new DefaultComboBoxModel(getSourceNames())); final String expression = getExpressionFor(getSelectedSourceName()); expressionTextField.setText(expression == null ? "" : expression); } }
private void initParser() { final String sourceName = getSelectedSourceName(); final Variable sourceVariable = SymbolFactory.createVariable(sourceName, 0.0); final DefaultNamespace namespace = new DefaultNamespace(); namespace.registerSymbol(sourceVariable); setParser(new ParserImpl(namespace, true)); }
@Test public void testNaNAndInf() throws ParseException { final Variable x = SymbolFactory.createVariable("x", 0.0); ((WritableNamespace) parser.getDefaultNamespace()).registerSymbol(x); Term term = parser.parse("inf(x) || nan(x)"); x.assignD(env, 0.0); assertEquals(false, term.evalB(env)); x.assignD(env, Math.log(0)); assertEquals(true, term.evalB(env)); x.assignD(env, (double) (float) Math.log(0)); assertEquals(true, term.evalB(env)); x.assignD(env, 0.0); assertEquals(false, term.evalB(env)); x.assignD(env, Math.sqrt(-1)); assertEquals(true, term.evalB(env)); x.assignD(env, (double) (float) Math.sqrt(-1)); assertEquals(true, term.evalB(env)); }
private void testConditional(String code) throws ParseException { final Variable x = SymbolFactory.createVariable("x", 0.0); ((WritableNamespace) parser.getDefaultNamespace()).registerSymbol(x); Term term = parser.parse(code); assertNotNull(term); assertNotNull(term.getChildren()); int i = term.getChildren().length; assertEquals(3, i); x.assignI(null, -10); assertEquals(0, term.evalI(env)); x.assignI(null, 0); assertEquals(0, term.evalI(env)); x.assignI(null, 10); assertEquals(1, term.evalI(env)); }
private void testNestedConditional(String code) throws ParseException { final Variable x = SymbolFactory.createVariable("x", 0.0); ((WritableNamespace) parser.getDefaultNamespace()).registerSymbol(x); Term term = parser.parse(code); assertNotNull(term); assertNotNull(term.getChildren()); int i = term.getChildren().length; assertEquals(3, i); x.assignI(null, -10); assertEquals(-1, term.evalI(env)); x.assignI(null, 0); assertEquals(0, term.evalI(env)); x.assignI(null, 10); assertEquals(1, term.evalI(env)); }