/* HeliDB -- A simple database for Java, http://www.helidb.org
* Copyright (C) 2008, 2009 Karl Gustafsson
*
* This file is a part of HeliDB.
*
* HeliDB is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* HeliDB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.helidb.lang.serializer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.io.ByteArrayInputStream;
import org.entityfs.util.io.ByteArrayRandomAccess;
import org.junit.Test;
public class FloatSerializerTest
{
@Test
public void testSerializeAndInterpret()
{
FloatSerializer fser = FloatSerializer.INSTANCE;
assertEquals(Float.valueOf(0.0f), fser.interpret(fser.serialize(Float.valueOf(0.0f))));
assertEquals(Float.valueOf(1.0f), fser.interpret(fser.serialize(Float.valueOf(1.0f))));
assertEquals(Float.valueOf(-1.0f), fser.interpret(fser.serialize(Float.valueOf(-1.0f))));
assertEquals(Float.valueOf(Float.MAX_VALUE), fser.interpret(fser.serialize(Float.valueOf(Float.MAX_VALUE))));
assertEquals(Float.valueOf(Float.MIN_VALUE), fser.interpret(fser.serialize(Float.valueOf(Float.MIN_VALUE))));
// Only works for JDK 6+
// assertEquals(Float.valueOf(Float.MIN_NORMAL),
// fser.interpret(fser.serialize(Float.valueOf(Float.MIN_NORMAL))));
assertEquals(Float.valueOf(Float.NaN), fser.interpret(fser.serialize(Float.valueOf(Float.NaN))));
assertEquals(Float.valueOf(Float.NEGATIVE_INFINITY), fser.interpret(fser.serialize(Float.valueOf(Float.NEGATIVE_INFINITY))));
assertEquals(Float.valueOf(Float.POSITIVE_INFINITY), fser.interpret(fser.serialize(Float.valueOf(Float.POSITIVE_INFINITY))));
byte[] barr = new byte[7];
for (int i = 0; i < 3; i++)
{
assertEquals(4, fser.serialize(12f, barr, i));
assertEquals(12f, fser.interpret(barr, i, 4).floatValue(), 0.01f);
assertEquals(4, fser.serialize(14321f, barr, i));
assertEquals(14321f, fser.interpret(barr, i, 4).floatValue(), 0.01f);
}
try
{
// Invalid length
fser.interpret(barr, 0, 3);
fail();
}
catch (SerializationException e)
{
// ok
}
try
{
fser.serialize(null);
fail();
}
catch (NullPointerException e)
{
// ok
}
try
{
fser.interpret(null);
fail();
}
catch (NullPointerException e)
{
// ok
}
}
@Test
public void testReadFloat()
{
byte[] barr = FloatSerializer.INSTANCE.serialize(0.0f);
assertEquals(0.0f, FloatSerializer.INSTANCE.readFloat(new ByteArrayInputStream(barr)).floatValue(), 0.00001f);
assertEquals(0.0f, FloatSerializer.INSTANCE.readFloat(new ByteArrayRandomAccess(barr)).floatValue(), 0.00001f);
barr = FloatSerializer.INSTANCE.serialize(1.0f);
assertEquals(1.0f, FloatSerializer.INSTANCE.readFloat(new ByteArrayInputStream(barr)).floatValue(), 0.00001f);
assertEquals(1.0f, FloatSerializer.INSTANCE.readFloat(new ByteArrayRandomAccess(barr)).floatValue(), 0.00001f);
barr = FloatSerializer.INSTANCE.serialize(-1.2034f);
assertEquals(-1.2034f, FloatSerializer.INSTANCE.readFloat(new ByteArrayInputStream(barr)).floatValue(), 0.00001f);
assertEquals(-1.2034f, FloatSerializer.INSTANCE.readFloat(new ByteArrayRandomAccess(barr)).floatValue(), 0.00001f);
barr = FloatSerializer.INSTANCE.serialize(Float.MAX_VALUE);
assertEquals(Float.MAX_VALUE, FloatSerializer.INSTANCE.readFloat(new ByteArrayInputStream(barr)).floatValue(), 0.00001f);
assertEquals(Float.MAX_VALUE, FloatSerializer.INSTANCE.readFloat(new ByteArrayRandomAccess(barr)).floatValue(), 0.00001f);
barr = FloatSerializer.INSTANCE.serialize(Float.MIN_VALUE);
assertEquals(Float.MIN_VALUE, FloatSerializer.INSTANCE.readFloat(new ByteArrayInputStream(barr)).floatValue(), 0.00001f);
assertEquals(Float.MIN_VALUE, FloatSerializer.INSTANCE.readFloat(new ByteArrayRandomAccess(barr)).floatValue(), 0.00001f);
}
}