Ifthenelse

Aus JACK Wiki
Zur Navigation springen Zur Suche springen

Beschreibung

Die Funktion ifthenelse wählt zwischen zwei Zeichenketten, abhängig vom logischen Wahrheitsgehalt einer gegebenen Aussage. Als Aussage sind rationale Zahlen, sowie mathematische Terme und Un-/Gleichungen zulässig. Zahlen ungleich 0 werden als wahr, 0 wird zu falsch ausgewertet.

Die Funktion erwartet eine Aussage, die sich zu wahr oder falsch auswerten lässt, einen String, der zurückgegeben wird, falls die Aussage wahr ist, und einen String, der zurückgegeben wird, falls die Aussage falsch ist. Es wird ein String zurückgegeben.

Syntax

ifthenelse(String aussage, String wahrAussage, String falschAussage)

Parameter

  • aussage - logisch auzuwertende Aussage
  • wahrAussage - String, der im Falle einer wahren Aussage zurückgegeben wird
  • falschAussage - String, der im Falle einer falschen Aussage zurückgegeben wird

Return Value

  • Gibt einen String zurück

Beispiele

Standardfälle

ifthenelse('1','wahr','falsch')   --> returns wahr
ifthenelse('5*2+5==5*3','a','b')   --> returns a

Benutzung von Variablen

ifthenelse('[pos=1]','then','else')
ifthenelse('15','[var=a]','text')

JUnit Tests

@Before 
public void beforeTest() {
  placeFillInVariable(1, OMParser.parse("0"));
  placeFillInVariable(2, OMParser.parse("1"));
  placeFillInVariable(3, OMParser.parse("test"));
		
  placeExerciseVariable("a", OMParser.parse("0"));
  placeExerciseVariable("b", OMParser.parse("1"));
  placeExerciseVariable("c", OMParser.parse("test"));
}

@Test
public void testIfthenelse(){
  assertTrue("'else'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse(0, 'then', 'else')")));
  assertTrue("'then'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse(1, 'then', 'else')")));
  assertTrue("'five'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse(5.7, 'five', 'notFive')")));
}

@Test
public void testIfthenelseWithInput(){
  assertTrue("'else'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse([pos=1], 'then', 'else')")));
  assertTrue("'test'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse(1, '[pos=3]', 'else')")));
  assertTrue("'test'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse([pos=2], '[pos=3]', 'notFive')")));
}

@Test
public void testIfthenelseWithVariables(){
  assertTrue("'else'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse([var=a], 'then', 'else')")));
  assertTrue("'test'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse(1, '[var=c]', 'else')")));
  assertTrue("'test'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse([var=b], '[var=c]', 'notFive')")));
}

@Test
public void testIfthenelseWithExpressions(){
  assertTrue("'a'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse('5*2 +5 == 5*3', 'a', 'b')")));
  assertTrue("'b'".equals(getEvaluator().getResultAsEvaluatorString("ifthenelse('ifthenelse(0, '1', '0')', 'a', 'b')")));
}
	
@Test(expected=InvalidEvaluatorFunctionArgumentException.class)
public void testIfthenelseWithWrongInputCharacter(){
  getEvaluator().getResultAsEvaluatorString("ifthenelse(a, 'a', 'b')");
}

@Test(expected=UnsupportedEvaluatorFunctionException.class)
public void testIfthenelseWithTwoRationalAndOneTextArgument(){
  getEvaluator().getResultAsEvaluatorString("ifthenelse(1, 0, 'b')");
}

@Test(expected=UnsupportedEvaluatorFunctionException.class)
public void testIfthenelseWithThreeRationalArguments(){
  getEvaluator().getResultAsEvaluatorString("ifthenelse(1, 0, 7)");
}

@Test(expected=UnsupportedEvaluatorFunctionException.class)
public void testIfthenelseWithOneArgument(){
  getEvaluator().getResultAsEvaluatorString("ifthenelse(1)");
}
	
@Test(expected=UnsupportedEvaluatorFunctionException.class)
public void testIfthenelseWithTwoArguments(){
  getEvaluator().getResultAsEvaluatorString("ifthenelse(0, 'this')");
}

@Test(expected=UndefinedExerciseVariableException.class)
public void testIfthenelseWithMissingExerciseVariable(){
  getEvaluator().getResultAsEvaluatorString("ifthenelse('[var=j]', 'a', 'b')");
}

@Test(expected=UndefinedFillInVariableException.class)
public void testIfthenelseWithMissingInput(){
  getEvaluator().getResultAsEvaluatorString("ifthenelse('[pos=42]', 'a', 'b')");
}

Hinweise

  • Zahlen ungleich 0 werden zu wahr ausgewertet.