diff options
| author | Brian S. O'Neill <bronee@gmail.com> | 2008-07-22 09:19:51 +0000 | 
|---|---|---|
| committer | Brian S. O'Neill <bronee@gmail.com> | 2008-07-22 09:19:51 +0000 | 
| commit | 4311256bbfdcc051cc1bfc5874ea260ffe482b8e (patch) | |
| tree | 0ea096cc9eccce001f448f073afcf8f2204ccde9 /src/test/java/com/amazon/carbonado/util | |
| parent | 6e54671ace39adb30f0b6179eaba6c3aaa958496 (diff) | |
Added advanced conversion capability when setting query filter properties. This is used to ensure that BigDecimal values are properly normalized.
Diffstat (limited to 'src/test/java/com/amazon/carbonado/util')
| -rw-r--r-- | src/test/java/com/amazon/carbonado/util/TestConversionComparator.java | 177 | 
1 files changed, 177 insertions, 0 deletions
diff --git a/src/test/java/com/amazon/carbonado/util/TestConversionComparator.java b/src/test/java/com/amazon/carbonado/util/TestConversionComparator.java new file mode 100644 index 0000000..bb4cb7f --- /dev/null +++ b/src/test/java/com/amazon/carbonado/util/TestConversionComparator.java @@ -0,0 +1,177 @@ +/*
 + * Copyright 2006 Amazon Technologies, Inc. or its affiliates.
 + * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks
 + * of Amazon Technologies, Inc. or its affiliates.  All rights reserved.
 + *
 + * 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.amazon.carbonado.util;
 +
 +import junit.framework.TestCase;
 +import junit.framework.TestSuite;
 +
 +/**
 + * Test cases for {@link ConversionComparator}.
 + *
 + * @author Brian S O'Neill
 + */
 +public class TestConversionComparator extends TestCase {
 +    private static final int BOOLEAN_CODE = 0;
 +    private static final int BYTE_CODE = 1;
 +    private static final int SHORT_CODE = 2;
 +    private static final int CHAR_CODE = 3;
 +    private static final int INT_CODE = 4;
 +    private static final int FLOAT_CODE = 5;
 +    private static final int LONG_CODE = 6;
 +    private static final int DOUBLE_CODE = 7;
 +
 +    private static final Class[] PRIMITIVE_CLASSES = {
 +        boolean.class, byte.class, short.class, char.class,
 +        int.class, float.class, long.class, double.class
 +    };
 +
 +    private static final Class[] BOXED_PRIMITIVE_CLASSES = {
 +        Boolean.class, Byte.class, Short.class, Character.class,
 +        Integer.class, Float.class, Long.class, Double.class
 +    };
 +
 +    // States which primitive conversions are allowed.
 +    private static final boolean[][] PRIMITIVE_MATRIX = {
 +        // from...
 +        // boolean  byte   short  char   int    float  long   double
 +        {  true,    false, false, false, false, false, false, false }, // to boolean
 +        {  false,   true,  false, false, false, false, false, false }, // to byte
 +        {  false,   true,  true,  false, false, false, false, false }, // to short
 +        {  false,   false, false, true,  false, false, false, false }, // to char
 +        {  false,   true,  true,  false, true,  false, false, false }, // to int
 +        {  false,   true,  true,  false, false, true,  false, false }, // to float
 +        {  false,   true,  true,  false, true,  false, true,  false }, // to long
 +        {  false,   true,  true,  false, true,  true,  false, true  }, // to double
 +    };
 +
 +    public static void main(String[] args) {
 +        junit.textui.TestRunner.run(suite());
 +    }
 +
 +    public static TestSuite suite() {
 +        return new TestSuite(TestConversionComparator.class);
 +    }
 +
 +    public TestConversionComparator(String name) {
 +        super(name);
 +    }
 +
 +    public void test_isConversionPossible_basics() {
 +        ConversionComparator cc = new ConversionComparator(Object.class);
 +        assertEquals(true, cc.isConversionPossible(Object.class));
 +        assertEquals(false, cc.isConversionPossible(String.class));
 +        assertEquals(false, cc.isConversionPossible(boolean.class));
 +        assertEquals(false, cc.isConversionPossible(Integer.class));
 +        assertEquals(false, cc.isConversionPossible(int.class));
 +
 +        cc = new ConversionComparator(String.class);
 +        assertEquals(true, cc.isConversionPossible(Object.class));
 +        assertEquals(true, cc.isConversionPossible(String.class));
 +        assertEquals(false, cc.isConversionPossible(boolean.class));
 +        assertEquals(false, cc.isConversionPossible(Integer.class));
 +        assertEquals(false, cc.isConversionPossible(int.class));
 +
 +        cc = new ConversionComparator(boolean.class);
 +        assertEquals(true, cc.isConversionPossible(Object.class));
 +        assertEquals(false, cc.isConversionPossible(String.class));
 +        assertEquals(true, cc.isConversionPossible(boolean.class));
 +        assertEquals(false, cc.isConversionPossible(Integer.class));
 +        assertEquals(false, cc.isConversionPossible(int.class));
 +
 +        cc = new ConversionComparator(Integer.class);
 +        assertEquals(true, cc.isConversionPossible(Object.class));
 +        assertEquals(false, cc.isConversionPossible(String.class));
 +        assertEquals(false, cc.isConversionPossible(boolean.class));
 +        assertEquals(true, cc.isConversionPossible(Integer.class));
 +        assertEquals(true, cc.isConversionPossible(int.class));
 +
 +        cc = new ConversionComparator(int.class);
 +        assertEquals(true, cc.isConversionPossible(Object.class));
 +        assertEquals(false, cc.isConversionPossible(String.class));
 +        assertEquals(false, cc.isConversionPossible(boolean.class));
 +        assertEquals(true, cc.isConversionPossible(Integer.class));
 +        assertEquals(true, cc.isConversionPossible(int.class));
 +    }
 +
 +    public void test_isConversionPossible_primitives() {
 +        test_isConversionPossible_primitives(false, false);
 +        test_isConversionPossible_primitives(false, true);
 +        test_isConversionPossible_primitives(true, false);
 +        test_isConversionPossible_primitives(true, true);
 +    }
 +
 +    private void test_isConversionPossible_primitives(boolean fromBoxed, boolean toBoxed) {
 +        for (int fromCode = BOOLEAN_CODE; fromCode <= DOUBLE_CODE; fromCode++) {
 +            ConversionComparator cc = new ConversionComparator
 +                (fromBoxed ? BOXED_PRIMITIVE_CLASSES[fromCode] : PRIMITIVE_CLASSES[fromCode]);
 +            for (int toCode = BOOLEAN_CODE; toCode <= DOUBLE_CODE; toCode++) {
 +                boolean expected = PRIMITIVE_MATRIX[toCode][fromCode];
 +                Class toType = toBoxed ? BOXED_PRIMITIVE_CLASSES[toCode] : PRIMITIVE_CLASSES[toCode];
 +                assertEquals(expected, cc.isConversionPossible(toType));
 +            }
 +        }
 +    }
 +
 +    public void test_compare() {
 +        ConversionComparator cc = new ConversionComparator(Object.class);
 +        assertEquals(true, cc.compare(Object.class, String.class) < 0);
 +        assertEquals(true, cc.compare(String.class, Object.class) > 0);
 +        assertEquals(0, cc.compare(Object.class, Object.class));
 +        assertEquals(0, cc.compare(String.class, String.class));
 +        assertEquals(0, cc.compare(String.class, String.class));
 +        assertEquals(0, cc.compare(int.class, Number.class));
 +
 +        cc = new ConversionComparator(String.class);
 +        assertEquals(true, cc.compare(String.class, Object.class) < 0);
 +        assertEquals(true, cc.compare(Object.class, String.class) > 0);
 +        assertEquals(0, cc.compare(String.class, String.class));
 +        assertEquals(true, cc.compare(int.class, String.class) > 0);
 +
 +        cc = new ConversionComparator(Integer.class);
 +        assertEquals(true, cc.compare(String.class, Object.class) > 0);
 +        assertEquals(true, cc.compare(Object.class, String.class) < 0);
 +        assertEquals(true, cc.compare(Object.class, Number.class) > 0);
 +        assertEquals(true, cc.compare(Integer.class, Number.class) < 0);
 +        assertEquals(true, cc.compare(int.class, Number.class) > 0);
 +        assertEquals(true, cc.compare(long.class, Number.class) > 0);
 +        assertEquals(true, cc.compare(long.class, Long.class) < 0);
 +
 +        cc = new ConversionComparator(int.class);
 +        assertEquals(true, cc.compare(String.class, Object.class) > 0);
 +        assertEquals(true, cc.compare(Object.class, String.class) < 0);
 +        assertEquals(true, cc.compare(Object.class, Number.class) > 0);
 +        assertEquals(true, cc.compare(Integer.class, Number.class) < 0);
 +        assertEquals(true, cc.compare(int.class, Number.class) < 0);
 +        assertEquals(true, cc.compare(long.class, Number.class) < 0);
 +        assertEquals(true, cc.compare(long.class, Long.class) < 0);
 +
 +        cc = new ConversionComparator(Byte.class);
 +        assertEquals(true, cc.compare(int.class, Number.class) > 0);
 +        assertEquals(true, cc.compare(long.class, Number.class) > 0);
 +        assertEquals(true, cc.compare(long.class, Integer.class) < 0);
 +
 +        cc = new ConversionComparator(byte.class);
 +        assertEquals(true, cc.compare(short.class, int.class) < 0);
 +        assertEquals(true, cc.compare(long.class, int.class) > 0);
 +
 +        cc = new ConversionComparator(java.util.Date.class);
 +        assertEquals(true, cc.compare(Object.class, Comparable.class) > 0);
 +        assertEquals(0, cc.compare(java.io.Serializable.class, Comparable.class));
 +    }
 +}
  | 
