package jscl.math.operator; import jscl.JsclMathEngine; import jscl.MathEngine; import jscl.text.ParseException; import jscl.text.msg.Messages; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class DoubleFactorialTest { @Test public void testDoubleFactorial() throws Exception { final MathEngine me = JsclMathEngine.getInstance(); assertEquals("1", me.evaluate("0!")); assertEquals("1", me.evaluate("1!")); assertEquals("2", me.evaluate("2!")); assertEquals("6", me.evaluate("3!")); assertEquals("24", me.evaluate("4!")); try { me.evaluate("(-1)!!"); fail(); } catch (ArithmeticException e) { // ok } assertEquals("-1", me.evaluate("-1!!")); assertEquals("1", me.evaluate("0!!")); assertEquals("1", me.evaluate("1!!")); assertEquals("2", me.evaluate("2!!")); assertEquals("2", me.evaluate("(2!!)!")); assertEquals("2", me.evaluate("(2!)!!")); assertEquals("3", me.evaluate("3!!")); assertEquals("48", me.evaluate("(3!)!!")); assertEquals("6", me.evaluate("(3!!)!")); assertEquals("8", me.evaluate("4!!")); assertEquals("15", me.evaluate("5!!")); assertEquals("48", me.evaluate("6!!")); assertEquals("105", me.evaluate("7!!")); assertEquals("384", me.evaluate("8!!")); assertEquals("945", me.evaluate("9!!")); try { me.evaluate("9!!!"); fail(); } catch (ParseException e) { if (Messages.msg_18.equals(e.getMessageCode())) { // ok } else { fail(); } } } }