package php.runtime.memory; import org.junit.Assert; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.junit.runners.MethodSorters; import php.runtime.Memory; @RunWith(JUnit4.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class StringMemoryTest { @Test public void testToNumeric(){ Memory memory = StringMemory.toNumeric("123"); Assert.assertEquals(Memory.Type.INT, memory.type); Assert.assertEquals(123, memory.toLong()); memory = StringMemory.toNumeric("-123"); Assert.assertEquals(Memory.Type.INT, memory.type); Assert.assertEquals(-123, memory.toLong()); memory = StringMemory.toNumeric(" 123"); Assert.assertEquals(Memory.Type.INT, memory.type); Assert.assertEquals(123, memory.toLong()); memory = StringMemory.toNumeric("123 foobar"); Assert.assertEquals(Memory.Type.INT, memory.type); Assert.assertEquals(123, memory.toLong()); memory = StringMemory.toNumeric("123foobar"); Assert.assertEquals(Memory.Type.INT, memory.type); Assert.assertEquals(123, memory.toLong()); memory = StringMemory.toNumeric("123.foobar"); Assert.assertEquals(Memory.Type.DOUBLE, memory.type); Assert.assertEquals(123.0, memory.toDouble(), 0.00001); memory = StringMemory.toNumeric("123.45"); Assert.assertEquals(Memory.Type.DOUBLE, memory.type); Assert.assertEquals(123.45, memory.toDouble(), 0.00001); memory = StringMemory.toNumeric("\n\r 123.45 foobar"); Assert.assertEquals(Memory.Type.DOUBLE, memory.type); Assert.assertEquals(123.45, memory.toDouble(), 0.00001); memory = StringMemory.toNumeric("123.45 foobar"); Assert.assertEquals(Memory.Type.DOUBLE, memory.type); Assert.assertEquals(123.45, memory.toDouble(), 0.00001); memory = StringMemory.toNumeric("123.45foobar"); Assert.assertEquals(Memory.Type.DOUBLE, memory.type); Assert.assertEquals(123.45, memory.toDouble(), 0.00001); } @Test public void testConcat(){ StringMemory memory = new StringMemory("foo"); Assert.assertEquals("foobar", memory.concat("bar")); Assert.assertEquals("foo123", memory.concat(123)); Assert.assertEquals("foo123", memory.concat(123.0)); Assert.assertEquals("foo1", memory.concat(true)); Assert.assertEquals("foo", memory.concat(false)); Assert.assertEquals("foo", memory.concat(Memory.NULL)); Assert.assertEquals("foo", memory.concat(Memory.FALSE)); Assert.assertEquals("foo1", memory.concat(Memory.TRUE)); Assert.assertEquals("foo123", memory.concat(new LongMemory(123))); Assert.assertEquals("foo123", memory.concat(new DoubleMemory(123))); Assert.assertEquals("foobar", memory.concat(new StringMemory("bar"))); } @Test public void testAppend(){ StringBuilderMemory memory = new StringBuilderMemory("foo"); memory.append("bar"); memory.append(123); memory.append(true); memory.append(false); memory.append(123.0); Assert.assertEquals("foobar1231123.0", memory.toString()); Assert.assertEquals("foobar1231123.0foobar", memory.concat("foobar")); } @Test public void testNegative(){ StringMemory memory = new StringMemory("123"); Assert.assertEquals(-123, memory.negative().toLong()); Assert.assertEquals(Memory.Type.INT, memory.negative().type); memory = new StringMemory("-123"); Assert.assertEquals(123, memory.negative().toLong()); Assert.assertEquals(Memory.Type.INT, memory.negative().type); } @Test public void testInc(){ StringMemory memory = new StringMemory("3"); Assert.assertEquals(4, memory.inc().toLong()); Assert.assertEquals(Memory.Type.INT, memory.inc().type); memory = new StringMemory("2.3"); Assert.assertEquals(3.3, memory.inc().toDouble(), 0.000001); Assert.assertEquals(Memory.Type.DOUBLE, memory.inc().type); } @Test public void testPlus(){ StringMemory memory = new StringMemory("10"); Assert.assertEquals(Memory.Type.INT, memory.plus(2).type); Assert.assertEquals(12, memory.plus(2).toLong()); Assert.assertEquals(Memory.Type.INT, memory.plus(true).type); Assert.assertEquals(11, memory.plus(true).toLong()); Assert.assertEquals(Memory.Type.INT, memory.plus(false).type); Assert.assertEquals(10, memory.plus(false).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.plus(2.0).type); Assert.assertEquals(12, memory.plus(2.0).toDouble(), 0.00001); Assert.assertEquals(Memory.Type.INT, memory.plus("2").type); Assert.assertEquals(12, memory.plus("2").toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.plus("2.0").type); Assert.assertEquals(12.0, memory.plus("2.0").toDouble(), 0.000001); Assert.assertEquals(Memory.Type.INT, memory.plus(Memory.NULL).type); Assert.assertEquals(10, memory.plus(Memory.NULL).toLong()); Assert.assertEquals(Memory.Type.INT, memory.plus(Memory.FALSE).type); Assert.assertEquals(10, memory.plus(Memory.FALSE).toLong()); Assert.assertEquals(Memory.Type.INT, memory.plus(Memory.TRUE).type); Assert.assertEquals(11, memory.plus(Memory.TRUE).toLong()); Assert.assertEquals(Memory.Type.INT, memory.plus(Memory.CONST_INT_2).type); Assert.assertEquals(12, memory.plus(Memory.CONST_INT_2).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.plus(Memory.CONST_DOUBLE_1).type); Assert.assertEquals(11.0, memory.plus(Memory.CONST_DOUBLE_1).toDouble(), 0.000001); } @Test public void testMinus(){ StringMemory memory = new StringMemory("10"); Assert.assertEquals(Memory.Type.INT, memory.minus(2).type); Assert.assertEquals(8, memory.minus(2).toLong()); Assert.assertEquals(Memory.Type.INT, memory.minus(true).type); Assert.assertEquals(9, memory.minus(true).toLong()); Assert.assertEquals(Memory.Type.INT, memory.minus(false).type); Assert.assertEquals(10, memory.minus(false).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.minus(2.0).type); Assert.assertEquals(8, memory.minus(2.0).toDouble(), 0.00001); Assert.assertEquals(Memory.Type.INT, memory.minus("2").type); Assert.assertEquals(8, memory.minus("2").toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.minus("2.0").type); Assert.assertEquals(8.0, memory.minus("2.0").toDouble(), 0.000001); Assert.assertEquals(Memory.Type.INT, memory.minus(Memory.NULL).type); Assert.assertEquals(10, memory.minus(Memory.NULL).toLong()); Assert.assertEquals(Memory.Type.INT, memory.minus(Memory.FALSE).type); Assert.assertEquals(10, memory.minus(Memory.FALSE).toLong()); Assert.assertEquals(Memory.Type.INT, memory.minus(Memory.TRUE).type); Assert.assertEquals(9, memory.minus(Memory.TRUE).toLong()); Assert.assertEquals(Memory.Type.INT, memory.minus(Memory.CONST_INT_2).type); Assert.assertEquals(8, memory.minus(Memory.CONST_INT_2).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.minus(Memory.CONST_DOUBLE_1).type); Assert.assertEquals(9.0, memory.minus(Memory.CONST_DOUBLE_1).toDouble(), 0.000001); } @Test public void testMul(){ StringMemory memory = new StringMemory("10"); Assert.assertEquals(Memory.Type.INT, memory.mul(2).type); Assert.assertEquals(20, memory.mul(2).toLong()); Assert.assertEquals(Memory.Type.INT, memory.mul(true).type); Assert.assertEquals(10, memory.mul(true).toLong()); Assert.assertEquals(Memory.Type.INT, memory.mul(false).type); Assert.assertEquals(0, memory.mul(false).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.mul(2.0).type); Assert.assertEquals(20.0, memory.mul(2.0).toDouble(), 0.00001); Assert.assertEquals(Memory.Type.INT, memory.mul("2").type); Assert.assertEquals(20, memory.mul("2").toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.mul("2.0").type); Assert.assertEquals(20, memory.mul("2.0").toDouble(), 0.000001); Assert.assertEquals(Memory.Type.INT, memory.mul(Memory.NULL).type); Assert.assertEquals(0, memory.mul(Memory.NULL).toLong()); Assert.assertEquals(Memory.Type.INT, memory.mul(Memory.FALSE).type); Assert.assertEquals(0, memory.mul(Memory.FALSE).toLong()); Assert.assertEquals(Memory.Type.INT, memory.mul(Memory.TRUE).type); Assert.assertEquals(10, memory.mul(Memory.TRUE).toLong()); Assert.assertEquals(Memory.Type.INT, memory.mul(Memory.CONST_INT_2).type); Assert.assertEquals(20, memory.mul(Memory.CONST_INT_2).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.mul(Memory.CONST_DOUBLE_1).type); Assert.assertEquals(10.0, memory.mul(Memory.CONST_DOUBLE_1).toDouble(), 0.000001); } @Test public void testPow(){ StringMemory memory = new StringMemory("10"); Assert.assertEquals(Memory.Type.INT, memory.pow(2).type); Assert.assertEquals(100, memory.pow(2).toLong()); Assert.assertEquals(Memory.Type.INT, memory.pow(true).type); Assert.assertEquals(10, memory.pow(true).toLong()); Assert.assertEquals(Memory.Type.INT, memory.pow(false).type); Assert.assertEquals(1, memory.pow(false).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.pow(2.0).type); Assert.assertEquals(100.0, memory.pow(2.0).toDouble(), 0.00001); Assert.assertEquals(Memory.Type.INT, memory.pow("2").type); Assert.assertEquals(100, memory.pow("2").toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.pow("2.0").type); Assert.assertEquals(100, memory.pow("2.0").toDouble(), 0.000001); Assert.assertEquals(Memory.Type.INT, memory.pow(Memory.NULL).type); Assert.assertEquals(1, memory.pow(Memory.NULL).toLong()); Assert.assertEquals(Memory.Type.INT, memory.pow(Memory.FALSE).type); Assert.assertEquals(1, memory.pow(Memory.FALSE).toLong()); Assert.assertEquals(Memory.Type.INT, memory.pow(Memory.TRUE).type); Assert.assertEquals(10, memory.pow(Memory.TRUE).toLong()); Assert.assertEquals(Memory.Type.INT, memory.pow(Memory.CONST_INT_2).type); Assert.assertEquals(100, memory.pow(Memory.CONST_INT_2).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.pow(Memory.CONST_DOUBLE_1).type); Assert.assertEquals(10.0, memory.pow(Memory.CONST_DOUBLE_1).toDouble(), 0.000001); } @Test public void testDiv(){ StringMemory memory = new StringMemory("10"); Assert.assertEquals(Memory.Type.INT, memory.div(2).type); Assert.assertEquals(5, memory.div(2).toLong()); Assert.assertEquals(Memory.Type.INT, memory.div(true).type); Assert.assertEquals(10, memory.div(true).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.div(2.0).type); Assert.assertEquals(5.0, memory.div(2.0).toDouble(), 0.00001); Assert.assertEquals(Memory.Type.INT, memory.div("2").type); Assert.assertEquals(5, memory.div("2").toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.div("2.0").type); Assert.assertEquals(5, memory.div("2.0").toDouble(), 0.000001); Assert.assertEquals(Memory.Type.INT, memory.div(Memory.TRUE).type); Assert.assertEquals(10, memory.div(Memory.TRUE).toLong()); Assert.assertEquals(Memory.Type.INT, memory.div(Memory.CONST_INT_2).type); Assert.assertEquals(5, memory.div(Memory.CONST_INT_2).toLong()); Assert.assertEquals(Memory.Type.DOUBLE, memory.div(Memory.CONST_DOUBLE_1).type); Assert.assertEquals(10.0, memory.div(Memory.CONST_DOUBLE_1).toDouble(), 0.000001); } @Test public void testDivInvalidFalse(){ StringMemory memory = new StringMemory("10"); Assert.assertEquals(Memory.FALSE, memory.div(false)); } @Test public void testDivInvalidFalse2(){ StringMemory memory = new StringMemory("10"); Assert.assertEquals(Memory.FALSE, memory.div(Memory.FALSE)); } @Test public void testDivInvalidNull(){ StringMemory memory = new StringMemory("10"); Assert.assertEquals(Memory.FALSE, memory.div(Memory.NULL)); } @Test public void testEqual(){ StringMemory memory = new StringMemory("foobar"); Assert.assertTrue(memory.equal("foobar")); Assert.assertFalse(memory.notEqual("foobar")); Assert.assertTrue(memory.equal(new StringMemory("foobar"))); Assert.assertFalse(memory.notEqual(new StringMemory("foobar"))); Assert.assertTrue(memory.equal(true)); Assert.assertFalse(memory.equal(false)); Assert.assertFalse(memory.notEqual(true)); Assert.assertTrue(memory.notEqual(false)); Assert.assertFalse(memory.equal(1)); Assert.assertTrue(memory.equal(0)); Assert.assertFalse(memory.equal(1.0)); Assert.assertTrue(memory.equal(0.0)); } @Test public void testSmaller(){ // for non numeric StringMemory memory = new StringMemory("invalid_num"); Assert.assertFalse(memory.smaller("foobar")); Assert.assertFalse(memory.smallerEq("foobar")); Assert.assertFalse(memory.smaller(new StringMemory("foobar"))); Assert.assertFalse(memory.smallerEq(new StringMemory("foobar"))); } @Test public void testGreater(){ // for non numeric StringMemory memory = new StringMemory("invalid_num"); Assert.assertTrue(memory.greater("foobar")); Assert.assertTrue(memory.greaterEq("foobar")); Assert.assertTrue(memory.greater(new StringMemory("foobar"))); Assert.assertTrue(memory.greaterEq(new StringMemory("foobar"))); } }