1 /*
2  * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 package compiler.types.correctness.scenarios;
25 
26 import compiler.types.correctness.hierarchies.TypeHierarchy;
27 import jdk.test.lib.Asserts;
28 
29 import java.lang.reflect.Array;
30 import java.util.Arrays;
31 
32 /**
33  *  Base class for array scenarios
34  */
35 public abstract class ArrayScenario extends Scenario<TypeHierarchy.I, TypeHierarchy.I> {
36     protected final TypeHierarchy.I[] array;
37     protected final TypeHierarchy.I[][] matrix;
38 
ArrayScenario(String name, ProfilingType profilingType, TypeHierarchy<? extends TypeHierarchy.I, ? extends TypeHierarchy.I> hierarchy)39     protected ArrayScenario(String name, ProfilingType profilingType,
40                             TypeHierarchy<? extends TypeHierarchy.I, ? extends TypeHierarchy.I> hierarchy) {
41         super(name, profilingType, hierarchy);
42         final int x = 20;
43         final int y = 10;
44 
45         TypeHierarchy.I prof = hierarchy.getM();
46         TypeHierarchy.I confl = hierarchy.getN();
47 
48         this.array = (TypeHierarchy.I[]) Array.newInstance(hierarchy.getClassM(), y);
49         Arrays.fill(array, prof);
50 
51         this.matrix = (TypeHierarchy.I[][]) Array.newInstance(hierarchy.getClassM(), x, y);
52         for (int i = 0; i < x; i++) {
53             this.matrix[i] = this.array;
54         }
55 
56         Asserts.assertEquals(array.length, matrix[0].length, "Invariant");
57     }
58 
59     @Override
isApplicable()60     public boolean isApplicable() {
61         return hierarchy.getClassM().isAssignableFrom(hierarchy.getClassN());
62     }
63 
64     @Override
check(TypeHierarchy.I res, TypeHierarchy.I orig)65     public void check(TypeHierarchy.I res, TypeHierarchy.I orig) {
66         Asserts.assertEquals(res, orig, "Check failed");
67     }
68 }
69