/* * Copyright 2016 higherfrequencytrading.com * * 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 net.openhft.lang.model; import net.openhft.compiler.CachedCompiler; import net.openhft.lang.io.ByteBufferBytes; import net.openhft.lang.io.Bytes; import org.junit.Test; import java.nio.ByteBuffer; import java.util.Date; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * User: peter.lawrey Date: 06/10/13 Time: 20:13 */ public class DataValueGeneratorTest { @Test public void testGenerateJavaCode() { DataValueGenerator dvg = new DataValueGenerator(); //dvg.setDumpCode(true); JavaBeanInterface jbi = dvg.heapInstance(JavaBeanInterface.class); jbi.setByte((byte) 1); jbi.setChar('2'); jbi.setShort((short) 3); jbi.setInt(4); jbi.setFloat(5); jbi.setLong(6); jbi.setDouble(7); jbi.setFlag(true); assertEquals(1, jbi.getByte()); assertEquals('2', jbi.getChar()); assertEquals(3, jbi.getShort()); assertEquals(4, jbi.getInt()); assertEquals(5.0, jbi.getFloat(), 0); assertEquals(6, jbi.getLong()); assertEquals(7.0, jbi.getDouble(), 0.0); assertTrue(jbi.getFlag()); } @Test public void testGenerateJavaCode2() { DataValueGenerator dvg = new DataValueGenerator(); MinimalInterface mi = dvg.heapInstance(MinimalInterface.class); mi.byte$((byte) 1); mi.char$('2'); mi.short$((short) 3); mi.int$(4); mi.float$(5); mi.long$(6); mi.double$(7); mi.flag(true); assertEquals(1, mi.byte$()); assertEquals('2', mi.char$()); assertEquals(3, mi.short$()); assertEquals(4, mi.int$()); assertEquals(5.0, mi.float$(), 0); assertEquals(6, mi.long$()); assertEquals(7.0, mi.double$(), 0.0); assertTrue(mi.flag()); Bytes bbb = ByteBufferBytes.wrap(ByteBuffer.allocate(64)); mi.writeMarshallable(bbb); System.out.println("size: " + bbb.position()); MinimalInterface mi2 = dvg.heapInstance(MinimalInterface.class); bbb.position(0); mi2.readMarshallable(bbb); assertEquals(1, mi2.byte$()); assertEquals('2', mi2.char$()); assertEquals(3, mi2.short$()); assertEquals(4, mi2.int$()); assertEquals(5.0, mi2.float$(), 0); assertEquals(6, mi2.long$()); assertEquals(7.0, mi2.double$(), 0.0); assertTrue(mi2.flag()); } @Test public void testGenerateNativeWithGetUsing() throws ClassNotFoundException, IllegalAccessException, InstantiationException { String actual = new DataValueGenerator().generateNativeObject(JavaBeanInterfaceGetUsing.class); System.out.println(actual); CachedCompiler cc = new CachedCompiler(null, null); Class aClass = cc.loadFromJava(JavaBeanInterfaceGetUsing.class.getName() + "$$Native", actual); JavaBeanInterfaceGetUsing jbi = (JavaBeanInterfaceGetUsing) aClass.asSubclass(JavaBeanInterfaceGetUsing.class).newInstance(); Bytes bytes = ByteBufferBytes.wrap(ByteBuffer.allocate(64)); ((Byteable) jbi).bytes(bytes, 0L); jbi.setString("G'day"); assertEquals("G'day", jbi.getUsingString(new StringBuilder()).toString()); } @Test public void testGenerateNativeWithHasArrays() throws ClassNotFoundException, IllegalAccessException, InstantiationException { String actual = new DataValueGenerator().generateNativeObject(HasArraysInterface.class); System.out.println(actual); CachedCompiler cc = new CachedCompiler(null, null); Class aClass = cc.loadFromJava(HasArraysInterface.class.getName() + "$$Native", actual); HasArraysInterface hai = (HasArraysInterface) aClass.asSubclass(HasArraysInterface.class).newInstance(); Bytes bytes = ByteBufferBytes.wrap(ByteBuffer.allocate(152)); ((Byteable) hai).bytes(bytes, 0L); hai.setStringAt(0, "G'day"); assertEquals("G'day", hai.getStringAt(0)); } @Test public void testGenerateNativeWithGetUsingHeapInstance() { DataValueGenerator dvg = new DataValueGenerator(); JavaBeanInterfaceGetUsingHeap si = dvg.heapInstance(JavaBeanInterfaceGetUsingHeap.class); si.setString("G'day"); assertEquals("G'day", si.getUsingString(new StringBuilder()).toString()); } @Test public void testStringFields() { DataValueGenerator dvg = new DataValueGenerator(); StringInterface si = dvg.heapInstance(StringInterface.class); si.setString("Hello world"); assertEquals("Hello world", si.getString()); StringInterface si2 = dvg.nativeInstance(StringInterface.class); Bytes bytes = ByteBufferBytes.wrap(ByteBuffer.allocate(192)); ((Byteable) si2).bytes(bytes, 0L); si2.setString("Hello world £€"); si2.setText("Hello world £€"); assertEquals("Hello world £€", si2.getString()); assertEquals("Hello world £€", si2.getText()); } @Test public void testGetUsingStringFieldsWithStringBuilderHeapInstance() { DataValueGenerator dvg = new DataValueGenerator(); GetUsingStringInterface si = dvg.heapInstance(GetUsingStringInterface.class); si.setSomeStringField("Hello world"); si.setAnotherStringField("Hello world 2"); assertEquals("Hello world", si.getSomeStringField()); { StringBuilder builder = new StringBuilder(); si.getUsingSomeStringField(builder); assertEquals("Hello world", builder.toString()); } { StringBuilder builder = new StringBuilder(); si.getUsingAnotherStringField(builder); assertEquals("Hello world 2", builder.toString()); } } @Test public void testNested() { DataValueGenerator dvg = new DataValueGenerator(); // dvg.setDumpCode(true); NestedB nestedB1 = dvg.heapInstance(NestedB.class); nestedB1.ask(100); nestedB1.bid(100); NestedB nestedB2 = dvg.heapInstance(NestedB.class); nestedB2.ask(91); nestedB2.bid(92); // dvg.setDumpCode(true); NestedA nestedA = dvg.nativeInstance(NestedA.class); Bytes bytes = ByteBufferBytes.wrap(ByteBuffer.allocate(192)); ((Byteable) nestedA).bytes(bytes, 0L); nestedA.key("key"); nestedA.one(nestedB1); nestedA.two(nestedB2); assertEquals("key", nestedA.key()); assertEquals(nestedB1.ask(), nestedA.one().ask(), 0.0); assertEquals(nestedB1.bid(), nestedA.one().bid(), 0.0); assertEquals(nestedB2.ask(), nestedA.two().ask(), 0.0); assertEquals(nestedB2.bid(), nestedA.two().bid(), 0.0); assertEquals(nestedB1, nestedA.one()); assertEquals(nestedB2, nestedA.two()); assertEquals(nestedB1.hashCode(), nestedA.one().hashCode()); assertEquals(nestedB2.hashCode(), nestedA.two().hashCode()); } @Test public void testGenerateInterfaceWithEnumOnHeap() { DataValueGenerator dvg = new DataValueGenerator(); //dvg.setDumpCode(true); JavaBeanInterfaceGetMyEnum jbie = dvg.heapInstance(JavaBeanInterfaceGetMyEnum.class); jbie.setMyEnum(MyEnum.B); } @Test public void testGenerateInterfaceWithEnumNativeInstance() { DataValueGenerator dvg = new DataValueGenerator(); //dvg.setDumpCode(true); JavaBeanInterfaceGetMyEnum jbie = dvg.nativeInstance(JavaBeanInterfaceGetMyEnum.class); Bytes bytes = ByteBufferBytes.wrap(ByteBuffer.allocate(64)); ((Byteable) jbie).bytes(bytes, 0L); jbie.setMyEnum(MyEnum.C); } @Test public void testGenerateInterfaceWithDateOnHeap() { DataValueGenerator dvg = new DataValueGenerator(); //dvg.setDumpCode(true); JavaBeanInterfaceGetDate jbid = dvg.heapInstance(JavaBeanInterfaceGetDate.class); jbid.setDate(new Date()); } @Test public void testGenerateInterfaceWithDateNativeInstace() { DataValueGenerator dvg = new DataValueGenerator(); //dvg.setDumpCode(true); JavaBeanInterfaceGetDate jbid = dvg.nativeInstance(JavaBeanInterfaceGetDate.class); Bytes bytes = ByteBufferBytes.wrap(ByteBuffer.allocate(64)); ((Byteable) jbid).bytes(bytes, 0L); jbid.setDate(new Date()); assertEquals(new Date(), jbid.getDate()); } }