/** * 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.hadoop.hive.ql.udf; import org.apache.hadoop.hive.common.type.HiveDecimal; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.serde2.io.DoubleWritable; import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable; import org.junit.Assert; import org.junit.Test; public class TestUDFMath { private HiveDecimalWritable input = null; @Test public void testAcos() throws HiveException { UDFAcos udf = new UDFAcos(); input = createDecimal("0.716"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(0.7727408115633954, res.get(), 0.000001); } @Test public void testAsin() throws HiveException { UDFAsin udf = new UDFAsin(); input = createDecimal("0.716"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(0.7980555152315012, res.get(), 0.000001); } @Test public void testAtan() throws HiveException { UDFAtan udf = new UDFAtan(); input = createDecimal("1.0"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(0.7853981633974483, res.get(), 0.000001); } @Test public void testCos() throws HiveException { UDFCos udf = new UDFCos(); input = createDecimal("0.7727408115633954"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(0.716, res.get(), 0.000001); } @Test public void testSin() throws HiveException { UDFSin udf = new UDFSin(); input = createDecimal("0.7980555152315012"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(0.716, res.get(), 0.000001); } @Test public void testTan() throws HiveException { UDFTan udf = new UDFTan(); input = createDecimal("0.7853981633974483"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(1.0, res.get(), 0.000001); } @Test public void testExp() throws HiveException { UDFExp udf = new UDFExp(); input = createDecimal("2.0"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(7.38905609893065, res.get(), 0.000001); } @Test public void testLn() throws HiveException { UDFLn udf = new UDFLn(); input = createDecimal("7.38905609893065"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(2.0, res.get(), 0.000001); } @Test public void testLog() throws HiveException { UDFLog udf = new UDFLog(); input = createDecimal("7.38905609893065"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(2.0, res.get(), 0.000001); res = udf.evaluate(createDecimal("3.0"), createDecimal("9.0")); Assert.assertEquals(2.0, res.get(), 0.000001); } @Test public void testLog10() throws HiveException { UDFLog10 udf = new UDFLog10(); input = createDecimal("100.0"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(2.0, res.get(), 0.000001); } @Test public void testLog2() throws HiveException { UDFLog2 udf = new UDFLog2(); input = createDecimal("8.0"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(3.0, res.get(), 0.000001); } @Test public void testRadians() throws HiveException { UDFRadians udf = new UDFRadians(); input = createDecimal("45.0"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(0.7853981633974483, res.get(), 0.000001); } @Test public void testDegrees() throws HiveException { UDFDegrees udf = new UDFDegrees(); input = createDecimal("0.7853981633974483"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(45.0, res.get(), 0.000001); } @Test public void testSqrt() throws HiveException { UDFSqrt udf = new UDFSqrt(); input = createDecimal("49.0"); DoubleWritable res = udf.evaluate(input); Assert.assertEquals(7.0, res.get(), 0.000001); } private HiveDecimalWritable createDecimal(String input) { return new HiveDecimalWritable(HiveDecimal.create(input)); } }