44 import java.lang.reflect.Modifier;
45 import java.util.ArrayList;
46 import java.util.List;
47 import java.util.stream.Collectors;
48 import java.util.stream.Stream;
49
50 public class MethodOverideTest {
51
52 @DataProvider
53 public static Object[][] vectorClassesProvider() {
54 return Stream.of(
55 ByteVector.class,
56 ShortVector.class,
57 IntVector.class,
58 FloatVector.class,
59 DoubleVector.class).
60 map(c -> new Object[]{c}).
61 toArray(Object[][]::new);
62 }
63
64 @DataProvider
65 public static Object[][] speciesClassesProvider() {
66 return Stream.of(
67 ByteVector.ByteSpecies.class,
68 ShortVector.ShortSpecies.class,
69 IntVector.IntSpecies.class,
70 FloatVector.FloatSpecies.class,
71 DoubleVector.DoubleSpecies.class).
72 map(c -> new Object[]{c}).
73 toArray(Object[][]::new);
74 }
75
76 static List<Object> getConcreteSpeciesInstances(Class<?> primitiveVectorClass) {
77 try {
78 Method species = primitiveVectorClass.getMethod("species", Shape.class);
79
80 List<Object> csis = new ArrayList<>();
81 for (Field sf : Shape.class.getFields()) {
82 if (Shape.class.isAssignableFrom(sf.getType())) {
83 Shape s = (Shape) sf.get(null);
84 Object speciesInstance = species.invoke(null, s);
85
86 csis.add(speciesInstance);
87 }
88 }
89 return csis;
90 }
91 catch (ReflectiveOperationException e) {
92 throw new InternalError(e);
93 }
94 }
95
96 static List<Class<?>> getConcreteSpeciesClasses(Class<?> primitiveSpeciesClass) {
97 return getConcreteSpeciesInstances(primitiveSpeciesClass.getEnclosingClass()).stream().
98 map(Object::getClass).
99 collect(Collectors.toList());
100 }
101
102 static List<Class<?>> getConcreteVectorClasses(Class<?> primitiveVectorClass) {
103 try {
104 List<Class<?>> cvcs = new ArrayList<>();
105 for (Object speciesInstance : getConcreteSpeciesInstances(primitiveVectorClass)) {
106 Method zero = speciesInstance.getClass().getSuperclass().getMethod("zero");
107 Object vectorInstance = zero.invoke(speciesInstance);
108
109 cvcs.add(vectorInstance.getClass());
110 }
111 return cvcs;
112 }
113 catch (ReflectiveOperationException e) {
114 throw new InternalError(e);
115 }
116 }
117
118 static List<Method> getDeclaredPublicAndNonAbstractMethods(Class<?> c) {
119 return Stream.of(c.getDeclaredMethods()).
120 filter(cc -> Modifier.isPublic(cc.getModifiers())).
121 filter(cc -> !Modifier.isAbstract(cc.getModifiers())).
122 filter(cc -> !Modifier.isFinal(cc.getModifiers())).
123 filter(cc -> !cc.isSynthetic()).
124 collect(Collectors.toList());
125 }
126
127 static int checkMethods(Class<?> primitiveClass, List<Class<?>> concreteClasses) {
147 }
148
149 System.out.println(cc.getName() + " <- " + primitiveClass.getName());
150 System.out.println("--Methods overridden that can be abstract");
151 overriddenMethods.stream().forEach(m -> System.out.println(" " + m));
152
153 System.out.println("--Methods not overridden that may need to be so and use intrinsics");
154 notOverriddenMethods.stream().forEach(m -> System.out.println(" " + m));
155 notOverriddenMethodsCount += notOverriddenMethods.size();
156 }
157
158 return notOverriddenMethodsCount;
159 }
160
161 @Test(dataProvider = "vectorClassesProvider")
162 public void checkMethodsOnPrimitiveVector(Class<?> primitiveVector) {
163 int nonIntrinsicMethods = checkMethods(primitiveVector, getConcreteVectorClasses(primitiveVector));
164
165 // Assert.assertEquals(nonIntrinsicMethods, 0);
166 }
167
168 @Test(dataProvider = "speciesClassesProvider")
169 public void checkMethodsOnPrimitiveSpecies(Class<?> primitiveSpecies) {
170 int nonIntrinsicMethods = checkMethods(primitiveSpecies, getConcreteSpeciesClasses(primitiveSpecies));
171
172 // Assert.assertEquals(nonIntrinsicMethods, 0);
173 }
174
175 }
|
44 import java.lang.reflect.Modifier;
45 import java.util.ArrayList;
46 import java.util.List;
47 import java.util.stream.Collectors;
48 import java.util.stream.Stream;
49
50 public class MethodOverideTest {
51
52 @DataProvider
53 public static Object[][] vectorClassesProvider() {
54 return Stream.of(
55 ByteVector.class,
56 ShortVector.class,
57 IntVector.class,
58 FloatVector.class,
59 DoubleVector.class).
60 map(c -> new Object[]{c}).
61 toArray(Object[][]::new);
62 }
63
64 static List<Object> getConcreteSpeciesInstances(Class<?> primitiveVectorClass) {
65 try {
66 List<Object> csis = new ArrayList<>();
67 for (Field sf : primitiveVectorClass.getFields()) {
68 if (Vector.Species.class.isAssignableFrom(sf.getType())) {
69 csis.add(sf.get(null));
70 }
71 }
72 return csis;
73 }
74 catch (ReflectiveOperationException e) {
75 throw new InternalError(e);
76 }
77 }
78
79 static List<Class<?>> getConcreteVectorClasses(Class<?> primitiveVectorClass) {
80 try {
81 List<Class<?>> cvcs = new ArrayList<>();
82 for (Object speciesInstance : getConcreteSpeciesInstances(primitiveVectorClass)) {
83 Method zero = primitiveVectorClass.getMethod("zero", Vector.Species.class);
84 Object vectorInstance = zero.invoke(null, speciesInstance);
85
86 cvcs.add(vectorInstance.getClass());
87 }
88 return cvcs;
89 }
90 catch (ReflectiveOperationException e) {
91 throw new InternalError(e);
92 }
93 }
94
95 static List<Method> getDeclaredPublicAndNonAbstractMethods(Class<?> c) {
96 return Stream.of(c.getDeclaredMethods()).
97 filter(cc -> Modifier.isPublic(cc.getModifiers())).
98 filter(cc -> !Modifier.isAbstract(cc.getModifiers())).
99 filter(cc -> !Modifier.isFinal(cc.getModifiers())).
100 filter(cc -> !cc.isSynthetic()).
101 collect(Collectors.toList());
102 }
103
104 static int checkMethods(Class<?> primitiveClass, List<Class<?>> concreteClasses) {
124 }
125
126 System.out.println(cc.getName() + " <- " + primitiveClass.getName());
127 System.out.println("--Methods overridden that can be abstract");
128 overriddenMethods.stream().forEach(m -> System.out.println(" " + m));
129
130 System.out.println("--Methods not overridden that may need to be so and use intrinsics");
131 notOverriddenMethods.stream().forEach(m -> System.out.println(" " + m));
132 notOverriddenMethodsCount += notOverriddenMethods.size();
133 }
134
135 return notOverriddenMethodsCount;
136 }
137
138 @Test(dataProvider = "vectorClassesProvider")
139 public void checkMethodsOnPrimitiveVector(Class<?> primitiveVector) {
140 int nonIntrinsicMethods = checkMethods(primitiveVector, getConcreteVectorClasses(primitiveVector));
141
142 // Assert.assertEquals(nonIntrinsicMethods, 0);
143 }
144 }
|