blob: a4b6812e38fedec8033c47a5a586032103abcf58 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package org.apache.tajo.datum;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.conf.TajoConf.ConfVars;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@RunWith(Parameterized.class)
public class TestArithmeticOperator {
String option;
public TestArithmeticOperator(String option) {
this.option = option;
}
@Parameters(name = "{index}: {0}")
public static Collection<Object[]> generateParameters() {
return Arrays.asList(new Object[][]{
{"Zero_Null"},
{"Zero_Exception"},
});
}
@Before
public void setUp() {
TajoConf tajoConf = new TajoConf();
if ("Zero_Exception".equals(option)) {
tajoConf.setBoolVar(ConfVars.$BEHAVIOR_ARITHMETIC_ABORT, true);
} else {
tajoConf.setBoolVar(ConfVars.$BEHAVIOR_ARITHMETIC_ABORT, false);
}
Datum.initAbortWhenDivideByZero(tajoConf);
}
@Test
public void testInt2Datum() throws Exception {
//plus
runAndAssert("plus", new Int2Datum((short)10), new Int2Datum((short)5), new Int2Datum((short)15));
runAndAssert("plus", new Int2Datum((short)10), new Int4Datum(5), new Int4Datum(15));
runAndAssert("plus", new Int2Datum((short)10), new Int8Datum(5), new Int8Datum(15));
runAndAssert("plus", new Int2Datum((short)10), new Float4Datum(5.0f), new Float4Datum(15.0f));
runAndAssert("plus", new Int2Datum((short)10), new Float8Datum(5.0), new Float8Datum(15.0));
//minus
runAndAssert("minus", new Int2Datum((short)10), new Int2Datum((short)5), new Int2Datum((short)5));
runAndAssert("minus", new Int2Datum((short)10), new Int4Datum(5), new Int4Datum(5));
runAndAssert("minus", new Int2Datum((short)10), new Int8Datum(5), new Int8Datum(5));
runAndAssert("minus", new Int2Datum((short)10), new Float4Datum(5.0f), new Float4Datum(5.0f));
runAndAssert("minus", new Int2Datum((short)10), new Float8Datum(5.0), new Float8Datum(5.0));
runAndAssert("minus", new Int2Datum((short)5), new Int2Datum((short)10), new Int2Datum((short)-5));
runAndAssert("minus", new Int2Datum((short)5), new Int4Datum(10), new Int4Datum(-5));
runAndAssert("minus", new Int2Datum((short)5), new Int8Datum(10), new Int8Datum(-5));
runAndAssert("minus", new Int2Datum((short)5), new Float4Datum(10.0f), new Float4Datum(-5.0f));
runAndAssert("minus", new Int2Datum((short)5), new Float8Datum(10.0), new Float8Datum(-5.0));
//multiply
runAndAssert("multiply", new Int2Datum((short)10), new Int2Datum((short)5), new Int4Datum(50));
runAndAssert("multiply", new Int2Datum((short)10), new Int4Datum(5), new Int4Datum(50));
runAndAssert("multiply", new Int2Datum((short)10), new Int8Datum(5), new Int8Datum(50));
runAndAssert("multiply", new Int2Datum((short)10), new Float4Datum(5.0f), new Float4Datum(50.0f));
runAndAssert("multiply", new Int2Datum((short)10), new Float8Datum(5.0), new Float8Datum(50.0));
//divide
runAndAssert("divide", new Int2Datum((short)10), new Int2Datum((short)5), new Int2Datum((short)2));
runAndAssert("divide", new Int2Datum((short)10), new Int4Datum(5), new Int4Datum(2));
runAndAssert("divide", new Int2Datum((short)10), new Int8Datum(5), new Int8Datum(2));
runAndAssert("divide", new Int2Datum((short)10), new Float4Datum(5.0f), new Float4Datum(2.0f));
runAndAssert("divide", new Int2Datum((short)10), new Float8Datum(5.0), new Float8Datum(2.0));
runAndAssert("divide", new Int2Datum((short)10), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("divide", new Int2Datum((short)10), new Int4Datum(0), NullDatum.get());
runAndAssert("divide", new Int2Datum((short)10), new Int8Datum(0), NullDatum.get());
runAndAssert("divide", new Int2Datum((short)10), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("divide", new Int2Datum((short)10), new Float8Datum(0.0), NullDatum.get());
//modular
runAndAssert("modular", new Int2Datum((short)10), new Int2Datum((short)3), new Int2Datum((short)1));
runAndAssert("modular", new Int2Datum((short)10), new Int4Datum(3), new Int4Datum(1));
runAndAssert("modular", new Int2Datum((short)10), new Int8Datum(3), new Int8Datum(1));
runAndAssert("modular", new Int2Datum((short)10), new Float4Datum(3.0f), new Float4Datum(1.0f));
runAndAssert("modular", new Int2Datum((short)10), new Float8Datum(3.0), new Float8Datum(1.0));
runAndAssert("modular", new Int2Datum((short)10), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("modular", new Int2Datum((short)10), new Int4Datum(0), NullDatum.get());
runAndAssert("modular", new Int2Datum((short)10), new Int8Datum(0), NullDatum.get());
runAndAssert("modular", new Int2Datum((short)10), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("modular", new Int2Datum((short)10), new Float8Datum(0.0), NullDatum.get());
}
@Test
public void testInt4Datum() throws Exception {
//plus
runAndAssert("plus", new Int4Datum(10), new Int2Datum((short)5), new Int4Datum(15));
runAndAssert("plus", new Int4Datum(10), new Int4Datum(5), new Int4Datum(15));
runAndAssert("plus", new Int4Datum(10), new Int8Datum(5), new Int8Datum(15));
runAndAssert("plus", new Int4Datum(10), new Float4Datum(5.0f), new Float4Datum(15.0f));
runAndAssert("plus", new Int4Datum(10), new Float8Datum(5.0), new Float8Datum(15.0));
//minus
runAndAssert("minus", new Int4Datum(10), new Int2Datum((short)5), new Int4Datum(5));
runAndAssert("minus", new Int4Datum(10), new Int4Datum(5), new Int4Datum(5));
runAndAssert("minus", new Int4Datum(10), new Int8Datum(5), new Int8Datum(5));
runAndAssert("minus", new Int4Datum(10), new Float4Datum(5.0f), new Float4Datum(5.0f));
runAndAssert("minus", new Int4Datum(10), new Float8Datum(5.0), new Float8Datum(5.0));
runAndAssert("minus", new Int4Datum(5), new Int2Datum((short)10), new Int4Datum(-5));
runAndAssert("minus", new Int4Datum(5), new Int4Datum(10), new Int4Datum(-5));
runAndAssert("minus", new Int4Datum(5), new Int8Datum(10), new Int8Datum(-5));
runAndAssert("minus", new Int4Datum(5), new Float4Datum(10.0f), new Float4Datum(-5.0f));
runAndAssert("minus", new Int4Datum(5), new Float8Datum(10.0), new Float8Datum(-5.0));
//multiply
runAndAssert("multiply", new Int4Datum(10), new Int2Datum((short)5), new Int4Datum(50));
runAndAssert("multiply", new Int4Datum(10), new Int4Datum(5), new Int4Datum(50));
runAndAssert("multiply", new Int4Datum(10), new Int8Datum(5), new Int8Datum(50));
runAndAssert("multiply", new Int4Datum(10), new Float4Datum(5.0f), new Float4Datum(50.0f));
runAndAssert("multiply", new Int4Datum(10), new Float8Datum(5.0), new Float8Datum(50.0));
//divide
runAndAssert("divide", new Int4Datum(10), new Int2Datum((short)5), new Int4Datum(2));
runAndAssert("divide", new Int4Datum(10), new Int4Datum(5), new Int4Datum(2));
runAndAssert("divide", new Int4Datum(10), new Int8Datum(5), new Int8Datum(2));
runAndAssert("divide", new Int4Datum(10), new Float4Datum(5.0f), new Float4Datum(2.0f));
runAndAssert("divide", new Int4Datum(10), new Float8Datum(5.0), new Float8Datum(2.0));
runAndAssert("divide", new Int4Datum(10), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("divide", new Int4Datum(10), new Int4Datum(0), NullDatum.get());
runAndAssert("divide", new Int4Datum(10), new Int8Datum(0), NullDatum.get());
runAndAssert("divide", new Int4Datum(10), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("divide", new Int4Datum(10), new Float8Datum(0.0), NullDatum.get());
//modular
runAndAssert("modular", new Int4Datum(10), new Int2Datum((short)3), new Int4Datum(1));
runAndAssert("modular", new Int4Datum(10), new Int4Datum(3), new Int4Datum(1));
runAndAssert("modular", new Int4Datum(10), new Int8Datum(3), new Int8Datum(1));
runAndAssert("modular", new Int4Datum(10), new Float4Datum(3.0f), new Float4Datum(1.0f));
runAndAssert("modular", new Int4Datum(10), new Float8Datum(3.0), new Float8Datum(1.0));
runAndAssert("modular", new Int4Datum(10), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("modular", new Int4Datum(10), new Int4Datum(0), NullDatum.get());
runAndAssert("modular", new Int4Datum(10), new Int8Datum(0), NullDatum.get());
runAndAssert("modular", new Int4Datum(10), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("modular", new Int4Datum(10), new Float8Datum(0.0), NullDatum.get());
}
@Test
public void testInt8Datum() throws Exception {
//plus
runAndAssert("plus", new Int8Datum(10), new Int2Datum((short)5), new Int8Datum(15));
runAndAssert("plus", new Int8Datum(10), new Int4Datum(5), new Int8Datum(15));
runAndAssert("plus", new Int8Datum(10), new Int8Datum(5), new Int8Datum(15));
runAndAssert("plus", new Int8Datum(10), new Float4Datum(5.0f), new Float8Datum(15.0f));
runAndAssert("plus", new Int8Datum(10), new Float8Datum(5.0), new Float8Datum(15.0));
//minus
runAndAssert("minus", new Int8Datum(10), new Int2Datum((short)5), new Int8Datum(5));
runAndAssert("minus", new Int8Datum(10), new Int4Datum(5), new Int8Datum(5));
runAndAssert("minus", new Int8Datum(10), new Int8Datum(5), new Int8Datum(5));
runAndAssert("minus", new Int8Datum(10), new Float4Datum(5.0f), new Float8Datum(5.0f));
runAndAssert("minus", new Int8Datum(10), new Float8Datum(5.0), new Float8Datum(5.0));
runAndAssert("minus", new Int8Datum(5), new Int2Datum((short)10), new Int8Datum(-5));
runAndAssert("minus", new Int8Datum(5), new Int4Datum(10), new Int8Datum(-5));
runAndAssert("minus", new Int8Datum(5), new Int8Datum(10), new Int8Datum(-5));
runAndAssert("minus", new Int8Datum(5), new Float4Datum(10.0f), new Float8Datum(-5.0f));
runAndAssert("minus", new Int8Datum(5), new Float8Datum(10.0), new Float8Datum(-5.0));
//multiply
runAndAssert("multiply", new Int8Datum(10), new Int2Datum((short)5), new Int8Datum(50));
runAndAssert("multiply", new Int8Datum(10), new Int4Datum(5), new Int8Datum(50));
runAndAssert("multiply", new Int8Datum(10), new Int8Datum(5), new Int8Datum(50));
runAndAssert("multiply", new Int8Datum(10), new Float4Datum(5.0f), new Float8Datum(50.0f));
runAndAssert("multiply", new Int8Datum(10), new Float8Datum(5.0), new Float8Datum(50.0));
//divide
runAndAssert("divide", new Int8Datum(10), new Int2Datum((short)5), new Int8Datum(2));
runAndAssert("divide", new Int8Datum(10), new Int4Datum(5), new Int8Datum(2));
runAndAssert("divide", new Int8Datum(10), new Int8Datum(5), new Int8Datum(2));
runAndAssert("divide", new Int8Datum(10), new Float4Datum(5.0f), new Float8Datum(2.0f));
runAndAssert("divide", new Int8Datum(10), new Float8Datum(5.0), new Float8Datum(2.0));
runAndAssert("divide", new Int8Datum(10), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("divide", new Int8Datum(10), new Int4Datum(0), NullDatum.get());
runAndAssert("divide", new Int8Datum(10), new Int8Datum(0), NullDatum.get());
runAndAssert("divide", new Int8Datum(10), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("divide", new Int8Datum(10), new Float8Datum(0.0), NullDatum.get());
//modular
runAndAssert("modular", new Int8Datum(10), new Int2Datum((short)3), new Int8Datum(1));
runAndAssert("modular", new Int8Datum(10), new Int4Datum(3), new Int8Datum(1));
runAndAssert("modular", new Int8Datum(10), new Int8Datum(3), new Int8Datum(1));
runAndAssert("modular", new Int8Datum(10), new Float4Datum(3.0f), new Float8Datum(1.0f));
runAndAssert("modular", new Int8Datum(10), new Float8Datum(3.0), new Float8Datum(1.0));
runAndAssert("modular", new Int8Datum(10), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("modular", new Int8Datum(10), new Int4Datum(0), NullDatum.get());
runAndAssert("modular", new Int8Datum(10), new Int8Datum(0), NullDatum.get());
runAndAssert("modular", new Int8Datum(10), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("modular", new Int8Datum(10), new Float8Datum(0.0), NullDatum.get());
}
@Test
public void testFloat4Datum() throws Exception {
//plus
runAndAssert("plus", new Float4Datum(10.0f), new Int2Datum((short)5), new Float4Datum(15.0f));
runAndAssert("plus", new Float4Datum(10.0f), new Int4Datum(5), new Float4Datum(15.0f));
runAndAssert("plus", new Float4Datum(10.0f), new Int8Datum(5), new Float4Datum(15.0f));
runAndAssert("plus", new Float4Datum(10.0f), new Float4Datum(5.0f), new Float4Datum(15.0f));
runAndAssert("plus", new Float4Datum(10.0f), new Float8Datum(5.0), new Float8Datum(15.0));
//minus
runAndAssert("minus", new Float4Datum(10.0f), new Int2Datum((short)5), new Float4Datum(5.0f));
runAndAssert("minus", new Float4Datum(10.0f), new Int4Datum(5), new Float4Datum(5.0f));
runAndAssert("minus", new Float4Datum(10.0f), new Int8Datum(5), new Float4Datum(5.0f));
runAndAssert("minus", new Float4Datum(10.0f), new Float4Datum(5.0f), new Float4Datum(5.0f));
runAndAssert("minus", new Float4Datum(10.0f), new Float8Datum(5.0), new Float8Datum(5.0));
runAndAssert("minus", new Float4Datum(5.0f), new Int2Datum((short)10), new Float4Datum(-5.0f));
runAndAssert("minus", new Float4Datum(5.0f), new Int4Datum(10), new Float4Datum(-5.0f));
runAndAssert("minus", new Float4Datum(5.0f), new Float4Datum(10.0f), new Float4Datum(-5.0f));
runAndAssert("minus", new Float4Datum(5.0f), new Float4Datum(10.0f), new Float4Datum(-5.0f));
runAndAssert("minus", new Float4Datum(5.0f), new Float8Datum(10.0), new Float8Datum(-5.0));
//multiply
runAndAssert("multiply", new Float4Datum(10.0f), new Int2Datum((short)5), new Float4Datum(50.0f));
runAndAssert("multiply", new Float4Datum(10.0f), new Int4Datum(5), new Float4Datum(50.0f));
runAndAssert("multiply", new Float4Datum(10.0f), new Int8Datum(5), new Float4Datum(50.0f));
runAndAssert("multiply", new Float4Datum(10.0f), new Float4Datum(5.0f), new Float4Datum(50.0f));
runAndAssert("multiply", new Float4Datum(10.0f), new Float8Datum(5.0), new Float8Datum(50.0));
//divide
runAndAssert("divide", new Float4Datum(10.0f), new Int2Datum((short)5), new Float4Datum(2.0f));
runAndAssert("divide", new Float4Datum(10.0f), new Int4Datum(5), new Float4Datum(2.0f));
runAndAssert("divide", new Float4Datum(10.0f), new Int8Datum(5), new Float4Datum(2.0f));
runAndAssert("divide", new Float4Datum(10.0f), new Float4Datum(5.0f), new Float4Datum(2.0f));
runAndAssert("divide", new Float4Datum(10.0f), new Float8Datum(5.0), new Float8Datum(2.0));
runAndAssert("divide", new Float4Datum(10.0f), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("divide", new Float4Datum(10.0f), new Int4Datum(0), NullDatum.get());
runAndAssert("divide", new Float4Datum(10.0f), new Int8Datum(0), NullDatum.get());
runAndAssert("divide", new Float4Datum(10.0f), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("divide", new Float4Datum(10.0f), new Float8Datum(0.0), NullDatum.get());
//modular
runAndAssert("modular", new Float4Datum(10.0f), new Int2Datum((short)3), new Float4Datum(1.0f));
runAndAssert("modular", new Float4Datum(10.0f), new Int4Datum(3), new Float4Datum(1.0f));
runAndAssert("modular", new Float4Datum(10.0f), new Int8Datum(3), new Float4Datum(1.0f));
runAndAssert("modular", new Float4Datum(10.0f), new Float4Datum(3.0f), new Float4Datum(1.0f));
runAndAssert("modular", new Float4Datum(10.0f), new Float8Datum(3.0), new Float8Datum(1.0));
runAndAssert("modular", new Float4Datum(10.0f), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("modular", new Float4Datum(10.0f), new Int4Datum(0), NullDatum.get());
runAndAssert("modular", new Float4Datum(10.0f), new Int8Datum(0), NullDatum.get());
runAndAssert("modular", new Float4Datum(10.0f), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("modular", new Float4Datum(10.0f), new Float8Datum(0.0), NullDatum.get());
}
@Test
public void testFloat8Datum() throws Exception {
//plus
runAndAssert("plus", new Float8Datum(10.0), new Int2Datum((short)5), new Float8Datum(15.0));
runAndAssert("plus", new Float8Datum(10.0), new Int4Datum(5), new Float8Datum(15.0));
runAndAssert("plus", new Float8Datum(10.0), new Int8Datum(5), new Float8Datum(15.0));
runAndAssert("plus", new Float8Datum(10.0), new Float4Datum(5.0f), new Float8Datum(15.0));
runAndAssert("plus", new Float8Datum(10.0), new Float8Datum(5.0), new Float8Datum(15.0));
//minus
runAndAssert("minus", new Float8Datum(10.0), new Int2Datum((short)5), new Float8Datum(5.0));
runAndAssert("minus", new Float8Datum(10.0), new Int4Datum(5), new Float8Datum(5.0));
runAndAssert("minus", new Float8Datum(10.0), new Int8Datum(5), new Float8Datum(5.0));
runAndAssert("minus", new Float8Datum(10.0), new Float4Datum(5.0f), new Float8Datum(5.0));
runAndAssert("minus", new Float8Datum(10.0), new Float8Datum(5.0), new Float8Datum(5.0));
runAndAssert("minus", new Float8Datum(5.0), new Int2Datum((short)10), new Float8Datum(-5.0));
runAndAssert("minus", new Float8Datum(5.0), new Int4Datum(10), new Float8Datum(-5.0));
runAndAssert("minus", new Float8Datum(5.0), new Float8Datum(10.0), new Float8Datum(-5.0));
runAndAssert("minus", new Float8Datum(5.0), new Float8Datum(10.0), new Float8Datum(-5.0));
runAndAssert("minus", new Float8Datum(5.0), new Float8Datum(10.0), new Float8Datum(-5.0));
//multiply
runAndAssert("multiply", new Float8Datum(10.0), new Int2Datum((short)5), new Float8Datum(50.0));
runAndAssert("multiply", new Float8Datum(10.0), new Int4Datum(5), new Float8Datum(50.0));
runAndAssert("multiply", new Float8Datum(10.0), new Int8Datum(5), new Float8Datum(50.0));
runAndAssert("multiply", new Float8Datum(10.0), new Float4Datum(5.0f), new Float8Datum(50.0));
runAndAssert("multiply", new Float8Datum(10.0), new Float8Datum(5.0), new Float8Datum(50.0));
//divide
runAndAssert("divide", new Float8Datum(10.0), new Int2Datum((short)5), new Float8Datum(2.0));
runAndAssert("divide", new Float8Datum(10.0), new Int4Datum(5), new Float8Datum(2.0));
runAndAssert("divide", new Float8Datum(10.0), new Int8Datum(5), new Float8Datum(2.0));
runAndAssert("divide", new Float8Datum(10.0), new Float4Datum(5.0f), new Float8Datum(2.0));
runAndAssert("divide", new Float8Datum(10.0), new Float8Datum(5.0), new Float8Datum(2.0));
runAndAssert("divide", new Float8Datum(10.0), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("divide", new Float8Datum(10.0), new Int4Datum(0), NullDatum.get());
runAndAssert("divide", new Float8Datum(10.0), new Int8Datum(0), NullDatum.get());
runAndAssert("divide", new Float8Datum(10.0), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("divide", new Float8Datum(10.0), new Float8Datum(0.0), NullDatum.get());
//modular
runAndAssert("modular", new Float8Datum(10.0), new Int2Datum((short)3), new Float8Datum(1.0));
runAndAssert("modular", new Float8Datum(10.0), new Int4Datum(3), new Float8Datum(1.0));
runAndAssert("modular", new Float8Datum(10.0), new Int8Datum(3), new Float8Datum(1.0));
runAndAssert("modular", new Float8Datum(10.0), new Float4Datum(3.0f), new Float8Datum(1.0));
runAndAssert("modular", new Float8Datum(10.0), new Float8Datum(3.0), new Float8Datum(1.0));
//modular by zero
runAndAssert("modular", new Float8Datum(10.0), new Int2Datum((short) 0), NullDatum.get());
runAndAssert("modular", new Float8Datum(10.0), new Int4Datum(0), NullDatum.get());
runAndAssert("modular", new Float8Datum(10.0), new Int8Datum(0), NullDatum.get());
runAndAssert("modular", new Float8Datum(10.0), new Float4Datum(0.0f), NullDatum.get());
runAndAssert("modular", new Float8Datum(10.0), new Float8Datum(0.0), NullDatum.get());
}
private void runAndAssert(String op, Datum left, Datum right, Datum expected) throws Exception {
Datum result = null;
try {
if ("plus".equals(op)) {
result = left.plus(right);
} else if ("minus".equals(op)) {
result = left.minus(right);
} else if ("multiply".equals(op)) {
result = left.multiply(right);
} else if ("divide".equals(op)) {
result = left.divide(right);
if (right.asFloat8() == 0) {
if (Datum.abortWhenDivideByZero) {
fail("should throw DivideByZeroException in the case of nullIfZero false");
}
}
} else if ("modular".equals(op)) {
result = left.modular(right);
if (right.asFloat8() == 0) {
if (Datum.abortWhenDivideByZero) {
fail("should throw DivideByZeroException in the case of nullIfZero false");
}
}
}
assertEquals(expected.type(), result.type());
assertEquals(expected, result);
} catch (ArithmeticException e) {
if (!Datum.abortWhenDivideByZero) {
fail(op + " throws DivideByZeroException");
} else {
//success
}
}
}
}