@Test
public void testROUND() throws Exception {
Double dbl = 0.987654321d;
Float flt = 0.987654321f;
EvalFunc<Long> rounder = new ROUND();
Tuple tup = TupleFactory.getInstance().newTuple(1);
long expected, lng_out;
tup.set(0, dbl);
expected = Math.round(dbl);
lng_out = rounder.exec(tup);
assertEquals(expected, lng_out);
tup.set(0, flt);
expected = Math.round(flt);
lng_out = rounder.exec(tup);
assertEquals(expected, lng_out);
tup.set(0, 4.6d); assertEquals( 5l, lng_out = rounder.exec(tup));
tup.set(0, 2.4d); assertEquals( 2l, lng_out = rounder.exec(tup));
tup.set(0, 1.0d); assertEquals( 1l, lng_out = rounder.exec(tup));
tup.set(0, -1.0d); assertEquals(-1l, lng_out = rounder.exec(tup));
tup.set(0, -2.4d); assertEquals(-2l, lng_out = rounder.exec(tup));
tup.set(0, -4.6d); assertEquals(-5l, lng_out = rounder.exec(tup));
// Rounds towards positive infinity: round(x) = floor(x + 0.5)
tup.set(0, 3.5d); assertEquals( 4l, lng_out = rounder.exec(tup));
tup.set(0, -3.5d); assertEquals(-3l, lng_out = rounder.exec(tup));
tup.set(0, 2.5d); assertEquals( 3l, lng_out = rounder.exec(tup));
tup.set(0, -2.5d); assertEquals(-2l, lng_out = rounder.exec(tup));
// we don't need to test null input because of SKIP_UDF_CALL_FOR_NULL behavior
}