package org.nd4j.bytebuddy.arrays.retrieve.relative;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import net.bytebuddy.implementation.Implementation;
import net.bytebuddy.matcher.ElementMatchers;
import org.junit.Test;
import org.nd4j.bytebuddy.method.reference.LoadReferenceParamImplementation;
import org.nd4j.bytebuddy.returnref.ReturnAppender;
import org.nd4j.bytebuddy.returnref.ReturnAppenderImplementation;
import static org.junit.Assert.assertEquals;
/**
* @author Adam Gibson
*/
public class RelativeRetrieveTest {
@Test
public void testRetrieveFromArray() throws Exception {
DynamicType.Unloaded<RetrieveFromArray> arr = new ByteBuddy().subclass(RetrieveFromArray.class)
.method(ElementMatchers.isDeclaredBy(RetrieveFromArray.class))
.intercept(new Implementation.Compound(new LoadReferenceParamImplementation(1),
new RelativeRetrieveArrayImplementation(1),
new ReturnAppenderImplementation(ReturnAppender.ReturnType.INT)))
.make();
Class<?> dynamicType = arr.load(RetrieveFromArray.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();
RetrieveFromArray test = (RetrieveFromArray) dynamicType.newInstance();
int result = test.returnVal(0, 1);
assertEquals(1, result);
}
public interface RetrieveFromArray {
int returnVal(int... array);
}
}