/* * Encog(tm) Core v3.4 - Java Version * http://www.heatonresearch.com/encog/ * https://github.com/encog/encog-java-core * Copyright 2008-2016 Heaton Research, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * For more information on Heaton Research copyrights, licenses * and trademarks visit: * http://www.heatonresearch.com/copyright */ package org.encog.parse.expression.common; import org.junit.Assert; import org.encog.Encog; import org.encog.ml.ea.exception.EAError; import org.encog.ml.prg.EncogProgram; import org.encog.ml.prg.expvalue.ExpressionValue; import org.junit.Test; public class TestExpression { @Test public void testConst() { Assert.assertEquals( 1, EncogProgram.parseFloat("1"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( -1, EncogProgram.parseFloat("-1"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 1, EncogProgram.parseFloat("--1"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( -1, EncogProgram.parseFloat("---1"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 1, EncogProgram.parseFloat("----1"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 100, EncogProgram.parseFloat("100"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 100, EncogProgram.parseFloat("+100"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( -100, EncogProgram.parseFloat("-100"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 1000, EncogProgram.parseFloat("1e3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 0.001, EncogProgram.parseFloat("1e-3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 1.5, EncogProgram.parseFloat("1.5"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( -1.5, EncogProgram.parseFloat("-1.5"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 1500, EncogProgram.parseFloat("1.5e3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( -0.0015, EncogProgram.parseFloat("-1.5e-3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 1.2345678, EncogProgram.parseFloat("1.2345678"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testTypes() { ExpressionValue exp = EncogProgram.parseExpression("cint(1.2345678)"); Assert.assertTrue(exp.isInt()); Assert.assertEquals( 1, exp.toIntValue()); exp = EncogProgram.parseExpression("cstr(1.2345678)"); Assert.assertTrue(exp.isString()); Assert.assertEquals( "1.2345678", exp.toStringValue()); exp = EncogProgram.parseExpression("cfloat(\"1.2345678\")"); Assert.assertTrue(exp.isFloat()); Assert.assertEquals( "1.2345678", exp.toStringValue()); } @Test public void testPrecedence() { Assert.assertEquals( -2.5, EncogProgram.parseFloat("1.0+2.0*3.0/4.0-5.0"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testAdd() { Assert.assertEquals( 5, EncogProgram.parseFloat("2+3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 3, EncogProgram.parseFloat("5+-2"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 6, EncogProgram.parseFloat("1+2+3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 10, EncogProgram.parseFloat("1+2+3+4"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testSub() { Assert.assertEquals( -1, EncogProgram.parseFloat("2-3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 7, EncogProgram.parseFloat("5--2"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testMul() { Assert.assertEquals( -6, EncogProgram.parseFloat("-2*3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 6, EncogProgram.parseFloat("2*3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 6, EncogProgram.parseFloat("-2*-3"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 24, EncogProgram.parseFloat("2*3*4"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertEquals( 120, EncogProgram.parseFloat("2*3*4*5"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testPower() { Assert.assertEquals( 8, EncogProgram.parseFloat("2^3"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testParen1() { Assert.assertEquals( 14, EncogProgram.parseFloat("2*(3+4)"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testParen2() { Assert.assertEquals( 10, EncogProgram.parseFloat("(2*3)+4"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testParen3() { Assert.assertEquals( 100, EncogProgram.parseFloat("(2*3)^2+(4*2)^2"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testParen4() { Assert.assertEquals( 4, EncogProgram.parseFloat("2^(1+1)"),Encog.DEFAULT_DOUBLE_EQUAL); } @Test public void testBad() { try { Assert.assertEquals( 0, EncogProgram.parseFloat("2*(3+4"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertTrue(false); } catch(EAError ex) { // good, we want an exception. } try { Assert.assertEquals( 0, EncogProgram.parseFloat("5+"),Encog.DEFAULT_DOUBLE_EQUAL); Assert.assertTrue(false); } catch(EAError ex) { // good, we want an exception. } } }