Eval: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 18: | Zeile 18: | ||
eval('3+[pos=1]-2') | eval('3+[pos=1]-2') | ||
eval('[var=a]/2+1') | eval('[var=a]/2+1') | ||
====JUnit Tests==== | |||
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed"> | |||
@Before | |||
public void beforeTest() { | |||
placeFillInVariable(1, OMParser.parse("0")); | |||
placeFillInVariable(2, OMParser.parse("1")); | |||
placeExerciseVariable("a", OMParser.parse("0")); | |||
placeExerciseVariable("b", OMParser.parse("1")); | |||
} | |||
@Test | |||
public void testEval() { | |||
assertTrue(2 == getEvaluator().getNumberResult("eval('1+1')")); | |||
assertTrue(2.2 == getEvaluator().getNumberResult("eval('1.2+1')")); | |||
assertTrue(5 == getEvaluator().getNumberResult("eval(|-5|)")); | |||
assertTrue(12 == getEvaluator().getNumberResult("eval('2+5*2')")); | |||
assertTrue(16 == getEvaluator().getNumberResult("eval('2*(5+3)')")); | |||
assertTrue(1 == getEvaluator().getNumberResult("eval(5%2)")); | |||
assertFalse(1 == getEvaluator().getNumberResult("eval('2+2')")); | |||
} | |||
@Test | |||
public void testEvalWithInput() { | |||
assertTrue(0 == getEvaluator().getNumberResult("eval('[pos=1]')")); | |||
assertTrue(0 == getEvaluator().getNumberResult("eval('[pos=2]-1')")); | |||
} | |||
@Test | |||
public void testEvalWithVariables() { | |||
assertTrue(0 == getEvaluator().getNumberResult("eval('[var=a]')")); | |||
assertTrue(0 == getEvaluator().getNumberResult("eval('[var=b]-1')")); | |||
} | |||
@Test | |||
public void testEvalWithExpressions() { | |||
assertTrue(6 == getEvaluator().getNumberResult("eval(eval('2+2') + eval('1+1'))")); | |||
assertTrue(1 == getEvaluator().getNumberResult("eval(eval(1))")); | |||
} | |||
@Test | |||
public void testEvalWithFunction() { | |||
assertFalse("5x".equals(getEvaluator().getResultAsEvaluatorString("eval('2x+3x')"))); | |||
assertFalse(1 == getEvaluator().getNumberResult("eval('2x=2')")); | |||
} | |||
@Test (expected=InvalidEvaluatorFunctionArgumentException.class) | |||
public void testEvalWithWrongInputEmptyStringArgument() { | |||
getEvaluator().getNumberResult("eval('')"); | |||
} | |||
@Test (expected=InvalidEvaluatorFunctionArgumentException.class) | |||
public void testEvalWithWrongInputCharacter() { | |||
getEvaluator().getNumberResult("eval('a')"); | |||
} | |||
@Test(expected=UnsupportedEvaluatorFunctionException.class) | |||
public void testEvalWithTwoArguments(){ | |||
getEvaluator().getNumberResult("eval(0, 1)"); | |||
} | |||
@Test(expected=UnsupportedEvaluatorFunctionException.class) | |||
public void testEvalWithThreeArguments(){ | |||
getEvaluator().getNumberResult("eval(1, 0, 0)"); | |||
} | |||
@Test (expected=UndefinedExerciseVariableException.class) | |||
public void testEvalWithMissingExerciseVariable() { | |||
getEvaluator().getNumberResult("eval('[var=j]')"); | |||
} | |||
@Test (expected=UndefinedFillInVariableException.class) | |||
public void testEvalWithMissingInput() { | |||
getEvaluator().getNumberResult("eval('[pos=42]')"); | |||
} | |||
</syntaxhighlight> | |||
=== Hinweise === | === Hinweise === |
Version vom 20. Juni 2017, 16:09 Uhr
Beschreibung
Die Funktion eval wertet einen Term aus. Der auszuwertende Ausdruck darf nur Zahlen und die Basisoperationen Addition, Subtraktion, Multiplikation, Division, sowie Modulo und Beträge beinhalten. Die Funktion erwartet einen String, den auszuwertenden Term, und gibt das entsprechende Ergebnis zurück.
Syntax
eval(Expression term)
Parameter
- term - der auszuwertende Term
Return Value
- Gibt eine Zahl zurück
Beispiele
Standardfälle
eval('(3+2*4)%5') --> returns 1
Benutzung von Variablen
eval('3+[pos=1]-2') eval('[var=a]/2+1')
JUnit Tests
@Before
public void beforeTest() {
placeFillInVariable(1, OMParser.parse("0"));
placeFillInVariable(2, OMParser.parse("1"));
placeExerciseVariable("a", OMParser.parse("0"));
placeExerciseVariable("b", OMParser.parse("1"));
}
@Test
public void testEval() {
assertTrue(2 == getEvaluator().getNumberResult("eval('1+1')"));
assertTrue(2.2 == getEvaluator().getNumberResult("eval('1.2+1')"));
assertTrue(5 == getEvaluator().getNumberResult("eval(|-5|)"));
assertTrue(12 == getEvaluator().getNumberResult("eval('2+5*2')"));
assertTrue(16 == getEvaluator().getNumberResult("eval('2*(5+3)')"));
assertTrue(1 == getEvaluator().getNumberResult("eval(5%2)"));
assertFalse(1 == getEvaluator().getNumberResult("eval('2+2')"));
}
@Test
public void testEvalWithInput() {
assertTrue(0 == getEvaluator().getNumberResult("eval('[pos=1]')"));
assertTrue(0 == getEvaluator().getNumberResult("eval('[pos=2]-1')"));
}
@Test
public void testEvalWithVariables() {
assertTrue(0 == getEvaluator().getNumberResult("eval('[var=a]')"));
assertTrue(0 == getEvaluator().getNumberResult("eval('[var=b]-1')"));
}
@Test
public void testEvalWithExpressions() {
assertTrue(6 == getEvaluator().getNumberResult("eval(eval('2+2') + eval('1+1'))"));
assertTrue(1 == getEvaluator().getNumberResult("eval(eval(1))"));
}
@Test
public void testEvalWithFunction() {
assertFalse("5x".equals(getEvaluator().getResultAsEvaluatorString("eval('2x+3x')")));
assertFalse(1 == getEvaluator().getNumberResult("eval('2x=2')"));
}
@Test (expected=InvalidEvaluatorFunctionArgumentException.class)
public void testEvalWithWrongInputEmptyStringArgument() {
getEvaluator().getNumberResult("eval('')");
}
@Test (expected=InvalidEvaluatorFunctionArgumentException.class)
public void testEvalWithWrongInputCharacter() {
getEvaluator().getNumberResult("eval('a')");
}
@Test(expected=UnsupportedEvaluatorFunctionException.class)
public void testEvalWithTwoArguments(){
getEvaluator().getNumberResult("eval(0, 1)");
}
@Test(expected=UnsupportedEvaluatorFunctionException.class)
public void testEvalWithThreeArguments(){
getEvaluator().getNumberResult("eval(1, 0, 0)");
}
@Test (expected=UndefinedExerciseVariableException.class)
public void testEvalWithMissingExerciseVariable() {
getEvaluator().getNumberResult("eval('[var=j]')");
}
@Test (expected=UndefinedFillInVariableException.class)
public void testEvalWithMissingInput() {
getEvaluator().getNumberResult("eval('[pos=42]')");
}
Hinweise
- Die Funktion berücksichtigt Punktrechnung vor Strichrechnung.
- Bei der Multiplikation mit einer Klammer muss explizit ein Malzeichen verwendet werden.