package com.oracle.truffle.object.basic.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.junit.Ignore;
import org.junit.Test;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.object.DynamicObjectLibrary;
import com.oracle.truffle.api.object.Shape;
import com.oracle.truffle.api.test.AbstractLibraryTest;
public class CachedFallbackTest extends AbstractLibraryTest {
@Test
public void testMixedReceiverTypeSameShape() {
Shape shape = Shape.newBuilder().build();
DynamicObject o1 = new TestDynamicObjectMinimal(shape);
DynamicObject o2 = new TestDynamicObjectDefault(shape);
String key = "key";
String val = "value";
CachedPutNode writeNode = adopt(CachedPutNodeGen.create());
writeNode.execute(o1, key, val);
writeNode.execute(o2, key, val);
assertSame("expected same shape", o1.getShape(), o2.getShape());
CachedGetNode readNode = adopt(CachedGetNodeGen.create());
assertEquals(val, readNode.execute(o1, key));
assertEquals(val, readNode.execute(o2, key));
}
@Test
public void testTransition() {
Shape shape = Shape.newBuilder().build();
DynamicObject o1 = new TestDynamicObjectDefault(shape);
DynamicObject o2 = new TestDynamicObjectDefault(shape);
String key1 = "key1";
String val1 = "value1";
String key2 = "key2";
String val2 = "value2";
DynamicObjectLibrary library = adopt(DynamicObjectLibrary.getFactory().create(o1));
assertTrue(library.accepts(o1));
assertTrue(library.accepts(o2));
library.put(o1, key1, val1);
library.put(o2, key1, val1);
library.put(o1, key2, val2);
library.put(o2, key2, val2);
assertSame("expected same shape", o1.getShape(), o2.getShape());
CachedGetNode readNode = adopt(CachedGetNodeGen.create());
assertEquals(val1, readNode.execute(o1, key1));
assertEquals(val1, readNode.execute(o2, key1));
assertEquals(val2, readNode.execute(o1, key2));
assertEquals(val2, readNode.execute(o2, key2));
}
@Ignore
@Test
public void testMixedReceiverTypeSameShapeWithFallback() {
Shape shape = Shape.newBuilder().build();
DynamicObject o1 = new TestDynamicObjectMinimal(shape);
DynamicObject o2 = new TestDynamicObjectDefault(shape);
String key1 = "key1";
String val1 = "value1";
String key2 = "key2";
String val2 = "value2";
DynamicObjectLibrary library1 = adopt(DynamicObjectLibrary.getFactory().create(o1));
library1.put(o1, key1, val1);
library1.put(o2, key1, val1);
DynamicObjectLibrary library2 = adopt(DynamicObjectLibrary.getFactory().create(o1));
library2.put(o1, key2, val2);
library2.put(o2, key2, val2);
assertSame("expected same shape", o1.getShape(), o2.getShape());
CachedGetNode readNode = adopt(CachedGetNodeGen.create());
assertEquals(val1, readNode.execute(o1, key1));
assertEquals(val1, readNode.execute(o2, key1));
assertEquals(val2, readNode.execute(o1, key2));
assertEquals(val2, readNode.execute(o2, key2));
}
}