blob: 83e192c9dbbbcca9d80803b95217217af93f3483 [file] [log] [blame]
/*
* 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.flink.types;
import org.apache.flink.core.memory.DataInputView;
import org.apache.flink.core.memory.DataInputViewStreamWrapper;
import org.apache.flink.core.memory.DataOutputView;
import org.apache.flink.core.memory.DataOutputViewStreamWrapper;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class PrimitiveDataTypeTest {
private PipedInputStream in;
private PipedOutputStream out;
private DataInputView mIn;
private DataOutputView mOut;
@Before
public void setup() throws Exception {
in = new PipedInputStream(1000);
out = new PipedOutputStream(in);
mIn = new DataInputViewStreamWrapper(in);
mOut = new DataOutputViewStreamWrapper(out);
}
@Test
public void testIntValue() {
IntValue int0 = new IntValue(10);
// test value retrieval
Assert.assertEquals(10, int0.getValue());
// test value comparison
IntValue int1 = new IntValue(10);
IntValue int2 = new IntValue(-10);
IntValue int3 = new IntValue(20);
Assert.assertEquals(int0.compareTo(int0), 0);
Assert.assertEquals(int0.compareTo(int1), 0);
Assert.assertEquals(int0.compareTo(int2), 1);
Assert.assertEquals(int0.compareTo(int3), -1);
// test stream output and retrieval
try {
int0.write(mOut);
int2.write(mOut);
int3.write(mOut);
IntValue int1n = new IntValue();
IntValue int2n = new IntValue();
IntValue int3n = new IntValue();
int1n.read(mIn);
int2n.read(mIn);
int3n.read(mIn);
Assert.assertEquals(int0.compareTo(int1n), 0);
Assert.assertEquals(int0.getValue(), int1n.getValue());
Assert.assertEquals(int2.compareTo(int2n), 0);
Assert.assertEquals(int2.getValue(), int2n.getValue());
Assert.assertEquals(int3.compareTo(int3n), 0);
Assert.assertEquals(int3.getValue(), int3n.getValue());
}
catch (Exception e) {
Assert.fail(e.getMessage());
}
}
@Test
public void testDoubleValue() {
DoubleValue double0 = new DoubleValue(10.2);
// test value retrieval
Assert.assertEquals(10.2, double0.getValue(), 0.0001);
// test value comparison
DoubleValue double1 = new DoubleValue(10.2);
DoubleValue double2 = new DoubleValue(-10.5);
DoubleValue double3 = new DoubleValue(20.2);
Assert.assertEquals(double0.compareTo(double0), 0);
Assert.assertEquals(double0.compareTo(double1), 0);
Assert.assertEquals(double0.compareTo(double2), 1);
Assert.assertEquals(double0.compareTo(double3), -1);
// test stream output and retrieval
try {
double0.write(mOut);
double2.write(mOut);
double3.write(mOut);
DoubleValue double1n = new DoubleValue();
DoubleValue double2n = new DoubleValue();
DoubleValue double3n = new DoubleValue();
double1n.read(mIn);
double2n.read(mIn);
double3n.read(mIn);
Assert.assertEquals(double0.compareTo(double1n), 0);
Assert.assertEquals(double0.getValue(), double1n.getValue(), 0.0001);
Assert.assertEquals(double2.compareTo(double2n), 0);
Assert.assertEquals(double2.getValue(), double2n.getValue(), 0.0001);
Assert.assertEquals(double3.compareTo(double3n), 0);
Assert.assertEquals(double3.getValue(), double3n.getValue(), 0.0001);
} catch (Exception e) {
Assert.assertTrue(false);
}
}
@Test
public void testStringValue() {
StringValue string0 = new StringValue("This is a test");
StringValue stringThis = new StringValue("This");
StringValue stringIsA = new StringValue("is a");
// test value retrieval
Assert.assertEquals("This is a test", string0.toString());
// test value comparison
StringValue string1 = new StringValue("This is a test");
StringValue string2 = new StringValue("This is a tesa");
StringValue string3 = new StringValue("This is a tesz");
StringValue string4 = new StringValue("Ünlaut ßtring µ avec é y ¢");
CharSequence chars5 = string1.subSequence(0, 4);
StringValue string5 = (StringValue) chars5;
StringValue string6 = (StringValue) string0.subSequence(0, string0.length());
StringValue string7 = (StringValue) string0.subSequence(5, 9);
StringValue string8 = (StringValue) string0.subSequence(0, 0);
Assert.assertTrue(string0.compareTo(string0) == 0);
Assert.assertTrue(string0.compareTo(string1) == 0);
Assert.assertTrue(string0.compareTo(string2) > 0);
Assert.assertTrue(string0.compareTo(string3) < 0);
Assert.assertTrue(stringThis.equals(chars5));
Assert.assertTrue(stringThis.compareTo(string5) == 0);
Assert.assertTrue(string0.compareTo(string6) == 0);
Assert.assertTrue(stringIsA.compareTo(string7) == 0);
string7.setValue("This is a test");
Assert.assertTrue(stringIsA.compareTo(string7) > 0);
Assert.assertTrue(string0.compareTo(string7) == 0);
string7.setValue("is a");
Assert.assertTrue(stringIsA.compareTo(string7) == 0);
Assert.assertTrue(string0.compareTo(string7) < 0);
Assert.assertEquals(stringIsA.hashCode(), string7.hashCode());
Assert.assertEquals(string7.length(), 4);
Assert.assertEquals("is a", string7.getValue());
Assert.assertEquals(string8.length(), 0);
Assert.assertEquals("", string8.getValue());
Assert.assertEquals('s', string7.charAt(1));
try {
string7.charAt(5);
Assert.fail("Exception should have been thrown when accessing characters out of bounds.");
} catch (IndexOutOfBoundsException iOOBE) {
// expected
}
// test stream out/input
try {
string0.write(mOut);
string4.write(mOut);
string2.write(mOut);
string3.write(mOut);
string7.write(mOut);
StringValue string1n = new StringValue();
StringValue string2n = new StringValue();
StringValue string3n = new StringValue();
StringValue string4n = new StringValue();
StringValue string7n = new StringValue();
string1n.read(mIn);
string4n.read(mIn);
string2n.read(mIn);
string3n.read(mIn);
string7n.read(mIn);
Assert.assertEquals(string0.compareTo(string1n), 0);
Assert.assertEquals(string0.toString(), string1n.toString());
Assert.assertEquals(string4.compareTo(string4n), 0);
Assert.assertEquals(string4.toString(), string4n.toString());
Assert.assertEquals(string2.compareTo(string2n), 0);
Assert.assertEquals(string2.toString(), string2n.toString());
Assert.assertEquals(string3.compareTo(string3n), 0);
Assert.assertEquals(string3.toString(), string3n.toString());
Assert.assertEquals(string7.compareTo(string7n), 0);
Assert.assertEquals(string7.toString(), string7n.toString());
try {
string7n.charAt(5);
Assert.fail("Exception should have been thrown when accessing characters out of bounds.");
}
catch (IndexOutOfBoundsException iOOBE) {
// expected
}
} catch (Exception e) {
Assert.assertTrue(false);
}
}
@Test
public void testPactNull() {
final NullValue pn1 = new NullValue();
final NullValue pn2 = new NullValue();
Assert.assertEquals("PactNull not equal to other PactNulls.", pn1, pn2);
Assert.assertEquals("PactNull not equal to other PactNulls.", pn2, pn1);
Assert.assertFalse("PactNull equal to other null.", pn1.equals(null));
// test serialization
final NullValue pn = new NullValue();
final int numWrites = 13;
try {
// write it multiple times
for (int i = 0; i < numWrites; i++) {
pn.write(mOut);
}
// read it multiple times
for (int i = 0; i < numWrites; i++) {
pn.read(mIn);
}
Assert.assertEquals("Reading PactNull does not consume the same data as was written.", 0, in.available());
}
catch (IOException ioex) {
Assert.fail("An exception occurred in the testcase: " + ioex.getMessage());
}
}
}