Eval: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 20: Zeile 20:


====JUnit Tests====
====JUnit Tests====
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed">
<span class="mw-customtoggle-myDivision">[Anzeigen]</span>
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed" id="mw-customcollapsible-myDivision">
@Before  
@Before  
public void beforeTest() {
public void beforeTest() {

Version vom 27. Juni 2017, 10:13 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

[Anzeigen]

@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.