Own-Programming-Language-Tu.../test/com/annimon/ownlang/parser/ast/OperatorExpressionTest.java

79 lines
2.9 KiB
Java
Raw Normal View History

package com.annimon.ownlang.parser.ast;
import static com.annimon.ownlang.parser.ast.ASTHelper.*;
import static com.annimon.ownlang.parser.ast.BinaryExpression.Operator.*;
import org.junit.Test;
/**
* @author aNNiMON
*/
public class OperatorExpressionTest {
@Test
public void testAddition() {
assertValue(number(4), operator(ADD, value(2), value(2)).eval());
assertValue(number(6), operator(ADD, value(1), operator(ADD, value(2), value(3))).eval());
assertValue(string("ABCD"), operator(ADD, value("AB"), value("CD")).eval());
assertValue(string("AB12"), operator(ADD, value("AB"), operator(ADD, value(10), value(2))).eval());
}
@Test
public void testSubtraction() {
assertValue(number(0), operator(SUBTRACT, value(2), value(2)).eval());
assertValue(number(110), operator(SUBTRACT, value(100), operator(SUBTRACT, value(20), value(30))).eval());
}
@Test
public void testMultiplication() {
assertValue(number(4), operator(MULTIPLY, value(2), value(2)).eval());
assertValue(number(30), operator(MULTIPLY, value(5), operator(MULTIPLY, value(-2), value(-3))).eval());
assertValue(string("ABABAB"), operator(MULTIPLY, value("AB"), value(3)).eval());
}
@Test
public void testDivision() {
assertValue(number(3), operator(DIVIDE, value(6), value(2)).eval());
assertValue(number(30), operator(DIVIDE, value(-900), operator(DIVIDE, value(60), value(-2))).eval());
}
@Test()
public void testDivisionZero() {
assertValue(number(Double.POSITIVE_INFINITY), operator(DIVIDE, value(2.0), value(0.0)).eval());
}
@Test(expected = RuntimeException.class)
public void testDivisionZeroOnIntegers() {
operator(DIVIDE, value(2), value(0)).eval();
}
@Test
public void testRemainder() {
assertValue(number(2), operator(REMAINDER, value(10), value(4)).eval());
assertValue(number(5), operator(REMAINDER, value(15), operator(REMAINDER, value(40), value(30))).eval());
}
@Test()
public void testRemainderZero() {
assertValue(number(Double.NaN), operator(REMAINDER, value(2.0), value(0.0)).eval());
}
@Test(expected = RuntimeException.class)
public void testRemainderZeroOnIntegers() {
operator(REMAINDER, value(2), value(0)).eval();
}
@Test
public void testAND() {
assertValue(number(0x04), operator(AND, value(0x04), value(0x0F)).eval());
assertValue(number(0x00), operator(AND, value(0x04), value(0x08)).eval());
assertValue(number(8), operator(AND, value(12), value(9)).eval());
}
@Test
public void testOR() {
assertValue(number(12), operator(OR, value(4), value(8)).eval());
assertValue(number(0x0F), operator(OR, value(3), value(12)).eval());
assertValue(number(0x0E), operator(OR, value(10), value(4)).eval());
}
}