/*
* Licensed 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 com.facebook.presto.type;
import com.facebook.presto.operator.scalar.AbstractTestFunctions;
import org.testng.annotations.Test;
public class TestDecimalToDecimalCasts
extends AbstractTestFunctions
{
@Test
public void testShortDecimalToShortDecimalCasts()
{
assertDecimalFunction("CAST(DECIMAL '0' AS DECIMAL(1, 0))", decimal("0"));
assertDecimalFunction("CAST(DECIMAL '0' AS DECIMAL(2, 0))", decimal("00"));
assertDecimalFunction("CAST(DECIMAL '0' AS DECIMAL(3, 2))", decimal("0.00"));
assertDecimalFunction("CAST(DECIMAL '2' AS DECIMAL(1, 0))", decimal("2"));
assertDecimalFunction("CAST(DECIMAL '-2' AS DECIMAL(1, 0))", decimal("-2"));
assertDecimalFunction("CAST(DECIMAL '2.0' AS DECIMAL(2, 1))", decimal("2.0"));
assertDecimalFunction("CAST(DECIMAL '-2.0' AS DECIMAL(2, 1))", decimal("-2.0"));
assertDecimalFunction("CAST(DECIMAL '2.0' AS DECIMAL(2, 0))", decimal("02"));
assertDecimalFunction("CAST(DECIMAL '-2.0' AS DECIMAL(2, 0))", decimal("-02"));
assertDecimalFunction("CAST(DECIMAL '2.0' AS DECIMAL(3, 2))", decimal("2.00"));
assertDecimalFunction("CAST(DECIMAL '-2.0' AS DECIMAL(3, 2))", decimal("-2.00"));
assertDecimalFunction("CAST(DECIMAL '1.449' AS DECIMAL(2, 1))", decimal("1.4"));
assertDecimalFunction("CAST(DECIMAL '1.459' AS DECIMAL(2, 1))", decimal("1.5"));
assertDecimalFunction("CAST(DECIMAL '-1.449' AS DECIMAL(2, 1))", decimal("-1.4"));
assertDecimalFunction("CAST(DECIMAL '-1.459' AS DECIMAL(2, 1))", decimal("-1.5"));
assertInvalidCast("CAST(DECIMAL '12345.6' AS DECIMAL(4,0))", "Cannot cast DECIMAL '12345.6' to DECIMAL(4, 0)");
assertInvalidCast("CAST(DECIMAL '-12345.6' AS DECIMAL(4,0))", "Cannot cast DECIMAL '-12345.6' to DECIMAL(4, 0)");
assertInvalidCast("CAST(DECIMAL '12345.6' AS DECIMAL(4,2))", "Cannot cast DECIMAL '12345.6' to DECIMAL(4, 2)");
assertInvalidCast("CAST(DECIMAL '-12345.6' AS DECIMAL(4,2))", "Cannot cast DECIMAL '-12345.6' to DECIMAL(4, 2)");
}
@Test
public void testShortDecimalToLongDecimalCasts()
{
assertDecimalFunction("CAST(DECIMAL '1.2345' AS DECIMAL(21, 20))", decimal("1.23450000000000000000"));
assertDecimalFunction("CAST(DECIMAL '-1.2345' AS DECIMAL(21, 20))", decimal("-1.23450000000000000000"));
}
@Test
public void testLongDecimalToShortDecimalCasts()
{
assertDecimalFunction("CAST(DECIMAL '1.23450000000000000000' AS DECIMAL(5, 4))", decimal("1.2345"));
assertDecimalFunction("CAST(DECIMAL '-1.23450000000000000000' AS DECIMAL(5, 4))", decimal("-1.2345"));
}
@Test
public void testLongDecimalToLongDecimalCasts()
{
assertDecimalFunction("CAST(DECIMAL '0.00000000000000000000' AS DECIMAL(21, 20))", decimal("0.00000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '0.00000000000000000000' AS DECIMAL(22, 20))", decimal("00.00000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '0.00000000000000000000' AS DECIMAL(23, 20))", decimal("000.00000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '2.00000000000000000000' AS DECIMAL(20, 19))", decimal("2.0000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '-2.00000000000000000000' AS DECIMAL(20, 19))", decimal("-2.0000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '2.00000000000000000000' AS DECIMAL(21, 20))", decimal("2.00000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '-2.00000000000000000000' AS DECIMAL(21, 20))", decimal("-2.00000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '2.00000000000000000000' AS DECIMAL(22, 20))", decimal("02.00000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '-2.00000000000000000000' AS DECIMAL(22, 20))", decimal("-02.00000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '2.00000000000000000000' AS DECIMAL(22, 21))", decimal("2.000000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '-2.00000000000000000000' AS DECIMAL(22, 21))", decimal("-2.000000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '1.000000000000000000004' AS DECIMAL(21, 20))", decimal("1.00000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '1.000000000000000000005' AS DECIMAL(21, 20))", decimal("1.00000000000000000001"));
assertDecimalFunction("CAST(DECIMAL '-1.000000000000000000004' AS DECIMAL(21, 20))", decimal("-1.00000000000000000000"));
assertDecimalFunction("CAST(DECIMAL '-1.000000000000000000005' AS DECIMAL(21, 20))", decimal("-1.00000000000000000001"));
assertInvalidCast("CAST(DECIMAL '1234500000000000000000000.6' AS DECIMAL(20,0))", "Cannot cast DECIMAL '1234500000000000000000000.6' to DECIMAL(20, 0)");
assertInvalidCast("CAST(DECIMAL '-1234500000000000000000000.6' AS DECIMAL(20,0))", "Cannot cast DECIMAL '-1234500000000000000000000.6' to DECIMAL(20, 0)");
assertInvalidCast("CAST(DECIMAL '1234500000000000000000000.6' AS DECIMAL(22,2))", "Cannot cast DECIMAL '1234500000000000000000000.6' to DECIMAL(22, 2)");
assertInvalidCast("CAST(DECIMAL '-1234500000000000000000000.6' AS DECIMAL(22,2))", "Cannot cast DECIMAL '-1234500000000000000000000.6' to DECIMAL(22, 2)");
}
}