/* * Copyright (C) 2015 SoftIndex LLC. * * 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 io.datakernel.serializer; import com.carrotsearch.hppc.*; import io.datakernel.bytebuf.ByteBuf; import io.datakernel.serializer.annotations.Serialize; import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; public class CodeGenSerializerGenHppcSetTest { private static <T> T doTest(T testData1, BufferSerializer<T> serializer) { byte[] array = new byte[1000]; ByteBuf buf = ByteBuf.wrapForWriting(array); serializer.serialize(buf, testData1); return serializer.deserialize(buf); } private static <T> BufferSerializer<T> getBufferSerializer(Class<T> collectionType) { return SerializerBuilder .create(ClassLoader.getSystemClassLoader()) .withHppcSupport() .build(collectionType); } @Test public void testByteSet() throws Exception { BufferSerializer<ByteSet> serializer = getBufferSerializer(ByteSet.class); ByteSet test1 = new ByteOpenHashSet(); ByteSet test2 = doTest(test1, serializer); assertNotNull(test2); assertEquals(test1, test2); test1.add((byte) 10); test1.add((byte) 11); ByteSet test3 = doTest(test1, serializer); assertNotNull(test3); assertEquals(test1, test3); } @Test public void testCharSet() throws Exception { BufferSerializer<CharSet> serializer = getBufferSerializer(CharSet.class); CharSet test1 = new CharOpenHashSet(); CharSet test2 = doTest(test1, serializer); assertNotNull(test2); assertEquals(test1, test2); test1.add('a'); test1.add('b'); CharSet test3 = doTest(test1, serializer); assertNotNull(test3); assertEquals(test1, test3); } @Test public void testShortSet() throws Exception { BufferSerializer<ShortSet> serializer = getBufferSerializer(ShortSet.class); ShortSet test1 = new ShortOpenHashSet(); ShortSet test2 = doTest(test1, serializer); assertNotNull(test2); assertEquals(test1, test2); test1.add((short) 10); test1.add((short) 11); ShortSet test3 = doTest(test1, serializer); assertNotNull(test3); assertEquals(test1, test3); } @Test public void testIntSet() throws Exception { BufferSerializer<IntSet> serializer = getBufferSerializer(IntSet.class); IntSet test1 = new IntOpenHashSet(); IntSet test2 = doTest(test1, serializer); assertNotNull(test2); assertEquals(test1, test2); test1.add(10); test1.add(11); IntSet test3 = doTest(test1, serializer); assertNotNull(test3); assertEquals(test1, test3); } @Test public void testLongSet() throws Exception { BufferSerializer<LongSet> serializer = getBufferSerializer(LongSet.class); LongSet test1 = new LongOpenHashSet(); LongSet test2 = doTest(test1, serializer); assertNotNull(test2); assertEquals(test1, test2); test1.add(10); test1.add(11); LongSet test3 = doTest(test1, serializer); assertNotNull(test3); assertEquals(test1, test3); } @Test public void testFloatSet() throws Exception { BufferSerializer<FloatSet> serializer = getBufferSerializer(FloatSet.class); FloatSet test1 = new FloatOpenHashSet(); FloatSet test2 = doTest(test1, serializer); assertNotNull(test2); assertEquals(test1, test2); test1.add(10); test1.add(11); FloatSet test3 = doTest(test1, serializer); assertNotNull(test3); assertEquals(test1, test3); } @Test public void testDoubleSet() throws Exception { BufferSerializer<DoubleSet> serializer = getBufferSerializer(DoubleSet.class); DoubleSet test1 = new DoubleOpenHashSet(); DoubleSet test2 = doTest(test1, serializer); assertNotNull(test2); assertEquals(test1, test2); test1.add(10); test1.add(11); DoubleSet test3 = doTest(test1, serializer); assertNotNull(test3); assertEquals(test1, test3); } public static class ObjectSetStringHolder { @Serialize(order = 0) public ObjectSet<String> set; } @Test public void testObjectSet() throws Exception { BufferSerializer<ObjectSetStringHolder> bufferSerializer = SerializerBuilder .create(ClassLoader.getSystemClassLoader()) .withHppcSupport() .build(ObjectSetStringHolder.class); ObjectSetStringHolder testData1 = new ObjectSetStringHolder(); testData1.set = new ObjectOpenHashSet<>(); ObjectSetStringHolder testData2 = doTest(testData1, bufferSerializer); assertNotNull(testData2.set); assertEquals(testData1.set, testData2.set); } public static class TestObject { @Serialize(order = 0) public String i; public TestObject(String i) { this.i = i; } public TestObject() {} @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; TestObject that = (TestObject) o; return !(i != null ? !i.equals(that.i) : that.i != null); } @Override public int hashCode() { return i != null ? i.hashCode() : 0; } } public static class ManyMapHolder { @Serialize(order = 0) public ObjectSet<String> set; @Serialize(order = 1) public ObjectSet<Integer> setI; @Serialize(order = 2) public ObjectSet<TestObject> setO; } @Test public void testMult() { BufferSerializer<ManyMapHolder> bufferSerializer = SerializerBuilder .create(ClassLoader.getSystemClassLoader()) .withHppcSupport() .build(ManyMapHolder.class); ManyMapHolder testMap1 = new ManyMapHolder(); testMap1.set = new ObjectOpenHashSet<>(); testMap1.setI = new ObjectOpenHashSet<>(); testMap1.setO = new ObjectOpenHashSet<>(); ManyMapHolder testMap2 = doTest(testMap1, bufferSerializer); assertNotNull(testMap1.set); assertNotNull(testMap1.setI); assertNotNull(testMap1.setO); assertEquals(testMap1.set, testMap2.set); assertEquals(testMap1.setI, testMap2.setI); assertEquals(testMap1.setO, testMap2.setO); testMap1.set.add("123"); testMap1.set.add("345"); testMap1.setI.add(5); testMap1.setI.add(25); testMap1.setO.add(new TestObject("2")); testMap1.setO.add(new TestObject("22")); ManyMapHolder testMap3 = doTest(testMap1, bufferSerializer); assertNotNull(testMap3.set); assertNotNull(testMap3.setI); assertNotNull(testMap3.setO); assertEquals(testMap1.set, testMap3.set); assertEquals(testMap1.setI, testMap3.setI); assertEquals(testMap1.setO, testMap3.setO); } @Ignore // TODO(vsavchuk): exception should be thrown when there is no appropriate serializer for class @Test(expected = Exception.class) public void throwsExceptionWhereThereIsNoAppropriateSerializerForClass() throws Exception { BufferSerializer<ObjectSetStringHolder> bufferSerializer = SerializerBuilder .create(ClassLoader.getSystemClassLoader()) .build(ObjectSetStringHolder.class); ObjectSetStringHolder testData1 = new ObjectSetStringHolder(); testData1.set = new ObjectOpenHashSet<>(); byte[] array = new byte[1000]; ByteBuf buf = ByteBuf.wrapForWriting(array); bufferSerializer.serialize(buf, testData1); bufferSerializer.deserialize(buf); } }