1 import jdk.incubator.code.Op;
 2 
 3 import java.lang.reflect.Method;
 4 import jdk.incubator.code.CodeReflection;
 5 import org.junit.jupiter.api.Assertions;
 6 import org.junit.jupiter.api.Test;
 7 
 8 import java.util.Arrays;
 9 import java.util.Optional;
10 import java.util.stream.IntStream;
11 
12 /*
13  * @test
14  * @summary test that invoking Method::getCodeModel returns the same instance.
15  * @modules jdk.incubator.code
16  * @run junit CodeModelSameInstanceTest
17  */
18 public class CodeModelSameInstanceTest {
19 
20     @CodeReflection
21     static int add(int a, int b) {
22         return a + b;
23     }
24 
25     @Test
26     public void test() {
27         Optional<Method> om = Arrays.stream(this.getClass().getDeclaredMethods()).filter(m -> m.getName().equals("add"))
28                 .findFirst();
29         Method m = om.get();
30         Object[] codeModels = IntStream.range(0, 1024).mapToObj(_ -> Op.ofMethod(m)).toArray();
31         for (int i = 1; i < codeModels.length; i++) {
32             Assertions.assertSame(codeModels[i-1], codeModels[i]);
33         }
34     }
35 }