Package org.voltdb

Source Code of org.voltdb.TestVoltType

/* This file is part of VoltDB.
* Copyright (C) 2008-2010 VoltDB L.L.C.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/

package org.voltdb;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;

import junit.framework.TestCase;

import org.voltdb.types.TimestampType;

public class TestVoltType extends TestCase {

    public void testGet() {
        boolean caught = false;
        try {
            VoltType.get(Byte.MAX_VALUE);
        } catch (AssertionError ex) {
            caught = true;
        }
        assertTrue(caught);

        VoltType vt = VoltType.get((byte)3);
        assertTrue(vt.getValue() == VoltType.TINYINT.getValue());
    }

    public void testTypeFromString() {
        assertEquals(VoltType.TINYINT, VoltType.typeFromString("TINYINT"));
        assertEquals(VoltType.SMALLINT, VoltType.typeFromString("SMALLINT"));
        assertEquals(VoltType.INTEGER, VoltType.typeFromString("INTEGER"));
        assertEquals(VoltType.BIGINT, VoltType.typeFromString("BIGINT"));
        assertEquals(VoltType.FLOAT, VoltType.typeFromString("FLOAT"));
        assertEquals(VoltType.FLOAT, VoltType.typeFromString("DOUBLE"));      // also floats
        assertEquals(VoltType.TIMESTAMP, VoltType.typeFromString("TIMESTAMP"));
        assertEquals(VoltType.STRING, VoltType.typeFromString("STRING"));
        assertEquals(VoltType.VOLTTABLE, VoltType.typeFromString("VOLTTABLE"));
        assertEquals(VoltType.STRING, VoltType.typeFromString("CHAR"));
        assertEquals(VoltType.STRING, VoltType.typeFromString("VARCHAR"));
        assertEquals(VoltType.TIMESTAMP, VoltType.typeFromString("TIMESTAMP"));
        assertEquals(VoltType.DECIMAL, VoltType.typeFromString("DECIMAL"));
        boolean caught = false;
        try {
            VoltType.typeFromString("Muhahaha");
        } catch (RuntimeException ex) {
           caught = true;
        }
        assertTrue(caught);
    }

    public void testGetLengthInBytesForFixedTypes() {
        assertEquals(1, VoltType.TINYINT.getLengthInBytesForFixedTypes());
        assertEquals(2, VoltType.SMALLINT.getLengthInBytesForFixedTypes());
        assertEquals(4, VoltType.INTEGER.getLengthInBytesForFixedTypes());
        assertEquals(8, VoltType.BIGINT.getLengthInBytesForFixedTypes());
        assertEquals(8, VoltType.FLOAT.getLengthInBytesForFixedTypes());
        assertEquals(8, VoltType.TIMESTAMP.getLengthInBytesForFixedTypes());
        assertEquals(16, VoltType.DECIMAL.getLengthInBytesForFixedTypes());
        boolean caught = false;
        try {
            VoltType.STRING.getLengthInBytesForFixedTypes();
        } catch (RuntimeException ex) {
            caught = true;
        }
        assertTrue(caught);
    }

    public void testToSQLString() {
        assertEquals("tinyint", VoltType.TINYINT.toSQLString());
        assertEquals("smallint", VoltType.SMALLINT.toSQLString());
        assertEquals("integer", VoltType.INTEGER.toSQLString());
        assertEquals("bigint", VoltType.BIGINT.toSQLString());
        assertEquals("float", VoltType.FLOAT.toSQLString());
        assertEquals("timestamp", VoltType.TIMESTAMP.toSQLString());
        assertEquals("decimal", VoltType.DECIMAL.toSQLString());
        assertEquals("varchar", VoltType.STRING.toSQLString());
        assertNull(VoltType.VOLTTABLE.toSQLString());
    }

    public void testTypeFromObject() {
        VoltType vt;
        vt = VoltType.typeFromObject(new Byte((byte) 0));
        assertTrue(vt.getValue() == VoltType.TINYINT.getValue());

        vt = VoltType.typeFromObject(new Short((short) 0));
        assertTrue(vt.getValue() == VoltType.SMALLINT.getValue());

        boolean caught = false;
        try {
            VoltType.typeFromClass(Class.class);
        } catch (RuntimeException ex) {
            caught = true;
        }
        assertTrue(caught);
    }

    public void testEquivalences() {

        assertEquals(VoltType.typeFromString("TINYINT"), VoltType.typeFromClass(Byte.class));
        assertEquals(VoltType.typeFromString("SMALLINT"), VoltType.typeFromClass(Short.class));
        assertEquals(VoltType.typeFromString("INTEGER"), VoltType.typeFromClass(Integer.class));
        assertEquals(VoltType.typeFromString("BIGINT"), VoltType.typeFromClass(Long.class));
        assertEquals(VoltType.typeFromString("FLOAT"), VoltType.typeFromClass(Float.class));
        assertEquals(VoltType.typeFromString("DOUBLE"), VoltType.typeFromClass(Double.class));
        assertEquals(VoltType.typeFromString("TIMESTAMP"), VoltType.typeFromClass(TimestampType.class));
        assertEquals(VoltType.typeFromString("STRING"), VoltType.typeFromClass(String.class));
        assertEquals(VoltType.typeFromString("VOLTTABLE"), VoltType.typeFromClass(VoltTable.class));
        assertEquals(VoltType.typeFromString("DECIMAL"), VoltType.typeFromClass(BigDecimal.class));
    }

    /* round trip the constructors */
    public void testTimestampCreation() {
        long usec = 999999999;
        TimestampType ts1 = new TimestampType(usec);
        assertEquals(usec, ts1.getTime());

        usec = 999999000;
        ts1 = new TimestampType(usec);
        assertEquals(usec, ts1.getTime());
    }

    /* Compare some values that differ by microseconds and by full millis */
    public void testTimestampEquality() {
        TimestampType ts1 = new TimestampType(150000);
        TimestampType ts2 = new TimestampType(150000);
        TimestampType ts3 = new TimestampType(150001);
        TimestampType ts4 = new TimestampType(160000);

        assertTrue(ts1.equals(ts2));
        assertTrue(ts2.equals(ts1));
        assertFalse(ts1.equals(ts3));
        assertFalse(ts3.equals(ts1));
        assertFalse(ts1.equals(ts4));
        assertFalse(ts4.equals(ts1));

        assertTrue(ts1.compareTo(ts2) == 0);
        assertTrue(ts2.compareTo(ts1) == 0);
        assertTrue(ts1.compareTo(ts3) < 0);
        assertTrue(ts3.compareTo(ts1) > 0);
        assertTrue(ts1.compareTo(ts4) < 0);
        assertTrue(ts4.compareTo(ts1) > 0);
    }

    public void testTimestampToString() {
        // I suppose these could fall across minute boundaries and fail the
        // test.. but that would seem exceedingly unlikely? Do this a few times
        // to try to avoid the false negative.
        for (int ii=0; ii < 5; ++ii) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
            TimestampType now = new TimestampType();
            Date date = new Date();
            if (now.toString().startsWith(sdf.format(date))) {
                assertTrue(now.toString().startsWith(sdf.format(date)));
                return;
            }
        }
        fail();
    }

}
TOP

Related Classes of org.voltdb.TestVoltType

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.