1175dc732c80e6f2afd83209348124df349290ba8Calin Juravle/*
2175dc732c80e6f2afd83209348124df349290ba8Calin Juravle * Copyright (C) 2015 The Android Open Source Project
3175dc732c80e6f2afd83209348124df349290ba8Calin Juravle *
4175dc732c80e6f2afd83209348124df349290ba8Calin Juravle * Licensed under the Apache License, Version 2.0 (the "License");
5175dc732c80e6f2afd83209348124df349290ba8Calin Juravle * you may not use this file except in compliance with the License.
6175dc732c80e6f2afd83209348124df349290ba8Calin Juravle * You may obtain a copy of the License at
7175dc732c80e6f2afd83209348124df349290ba8Calin Juravle *
8175dc732c80e6f2afd83209348124df349290ba8Calin Juravle *      http://www.apache.org/licenses/LICENSE-2.0
9175dc732c80e6f2afd83209348124df349290ba8Calin Juravle *
10175dc732c80e6f2afd83209348124df349290ba8Calin Juravle * Unless required by applicable law or agreed to in writing, software
11175dc732c80e6f2afd83209348124df349290ba8Calin Juravle * distributed under the License is distributed on an "AS IS" BASIS,
12175dc732c80e6f2afd83209348124df349290ba8Calin Juravle * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13175dc732c80e6f2afd83209348124df349290ba8Calin Juravle * See the License for the specific language governing permissions and
14175dc732c80e6f2afd83209348124df349290ba8Calin Juravle * limitations under the License.
15175dc732c80e6f2afd83209348124df349290ba8Calin Juravle */
16175dc732c80e6f2afd83209348124df349290ba8Calin Juravle
17175dc732c80e6f2afd83209348124df349290ba8Calin Juravlepublic class Main extends UnresolvedSuperClass {
18175dc732c80e6f2afd83209348124df349290ba8Calin Juravle
19175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK-START: void Main.callInvokeUnresolvedStatic() register (before)
20175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK:        InvokeUnresolved invoke_type:static
21175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  static public void callInvokeUnresolvedStatic() {
22175dc732c80e6f2afd83209348124df349290ba8Calin Juravle    UnresolvedClass.staticMethod();
23175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  }
24175dc732c80e6f2afd83209348124df349290ba8Calin Juravle
25175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK-START: void Main.callInvokeUnresolvedVirtual(UnresolvedClass) register (before)
26175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK:        InvokeUnresolved invoke_type:virtual
27175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  static public void callInvokeUnresolvedVirtual(UnresolvedClass c) {
28175dc732c80e6f2afd83209348124df349290ba8Calin Juravle    c.virtualMethod();
29175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  }
30175dc732c80e6f2afd83209348124df349290ba8Calin Juravle
31175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK-START: void Main.callInvokeUnresolvedInterface(UnresolvedInterface) register (before)
32175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK:        InvokeUnresolved invoke_type:interface
33175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  static public void callInvokeUnresolvedInterface(UnresolvedInterface c) {
34175dc732c80e6f2afd83209348124df349290ba8Calin Juravle    c.interfaceMethod();
35175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  }
36175dc732c80e6f2afd83209348124df349290ba8Calin Juravle
37175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  static public void callInvokeUnresolvedSuper(Main c) {
38175dc732c80e6f2afd83209348124df349290ba8Calin Juravle    c.superMethod();
39175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  }
40175dc732c80e6f2afd83209348124df349290ba8Calin Juravle
41175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK-START: void Main.superMethod() register (before)
42175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK:        InvokeUnresolved invoke_type:super
43175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  public void superMethod() {
44175dc732c80e6f2afd83209348124df349290ba8Calin Juravle    super.superMethod();
45175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  }
46175dc732c80e6f2afd83209348124df349290ba8Calin Juravle
47e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK-START: void Main.callUnresolvedStaticFieldAccess() register (before)
48e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldSet field_type:PrimByte
49e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldSet field_type:PrimChar
50e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldSet field_type:PrimInt
51e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldSet field_type:PrimLong
52e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldSet field_type:PrimFloat
53e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldSet field_type:PrimDouble
54e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldSet field_type:PrimNot
55e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
56e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldGet field_type:PrimByte
57e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldGet field_type:PrimChar
58e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldGet field_type:PrimInt
59e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldGet field_type:PrimLong
60e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldGet field_type:PrimFloat
61e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldGet field_type:PrimDouble
62e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedStaticFieldGet field_type:PrimNot
63e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  static public void callUnresolvedStaticFieldAccess() {
64e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    Object o = new Object();
65e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    UnresolvedClass.staticByte = (byte)1;
66e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    UnresolvedClass.staticChar = '1';
67e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    UnresolvedClass.staticInt = 123456789;
68e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    UnresolvedClass.staticLong = 123456789123456789l;
69e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    UnresolvedClass.staticFloat = 123456789123456789f;
70e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    UnresolvedClass.staticDouble = 123456789123456789d;
71e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    UnresolvedClass.staticObject = o;
72e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
73e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals((byte)1, UnresolvedClass.staticByte);
74e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals('1', UnresolvedClass.staticChar);
75e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(123456789, UnresolvedClass.staticInt);
76e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(123456789123456789l, UnresolvedClass.staticLong);
77e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(123456789123456789f, UnresolvedClass.staticFloat);
78e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(123456789123456789d, UnresolvedClass.staticDouble);
79e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(o, UnresolvedClass.staticObject);
80e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  }
81e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
82e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK-START: void Main.callUnresolvedInstanceFieldAccess(UnresolvedClass) register (before)
83e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldSet field_type:PrimByte
84e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldSet field_type:PrimChar
85e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldSet field_type:PrimInt
86e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldSet field_type:PrimLong
87e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldSet field_type:PrimFloat
88e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldSet field_type:PrimDouble
89e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldSet field_type:PrimNot
90e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
91e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldGet field_type:PrimByte
92e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldGet field_type:PrimChar
93e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldGet field_type:PrimInt
94e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldGet field_type:PrimLong
95e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldGet field_type:PrimFloat
96e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldGet field_type:PrimDouble
97e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  /// CHECK:        UnresolvedInstanceFieldGet field_type:PrimNot
98e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  static public void callUnresolvedInstanceFieldAccess(UnresolvedClass c) {
99e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    Object o = new Object();
100e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    c.instanceByte = (byte)1;
101e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    c.instanceChar = '1';
102e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    c.instanceInt = 123456789;
103e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    c.instanceLong = 123456789123456789l;
104e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    c.instanceFloat = 123456789123456789f;
105e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    c.instanceDouble = 123456789123456789d;
106e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    c.instanceObject = o;
107e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
108e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals((byte)1, c.instanceByte);
109e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals('1', c.instanceChar);
110e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(123456789, c.instanceInt);
111e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(123456789123456789l, c.instanceLong);
112e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(123456789123456789f, c.instanceFloat);
113e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(123456789123456789d, c.instanceDouble);
114e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    expectEquals(o, c.instanceObject);
115e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  }
116e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
11798893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle  static public void testInstanceOf(Object o) {
11898893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle    if (o instanceof UnresolvedSuperClass) {
11998893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle      System.out.println("instanceof ok");
12098893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle    }
12198893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle  }
12298893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle
12398893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle  static public UnresolvedSuperClass testCheckCast(Object o) {
12498893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle    UnresolvedSuperClass c = (UnresolvedSuperClass) o;
12598893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle    System.out.println("checkcast ok");
12698893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle    return c;
12798893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle  }
128175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK-START: void Main.main(java.lang.String[]) register (before)
129175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  /// CHECK:        InvokeUnresolved invoke_type:direct
130175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  static public void main(String[] args) {
131175dc732c80e6f2afd83209348124df349290ba8Calin Juravle    UnresolvedClass c = new UnresolvedClass();
13298893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle    Main m = new Main();
133175dc732c80e6f2afd83209348124df349290ba8Calin Juravle    callInvokeUnresolvedStatic();
134175dc732c80e6f2afd83209348124df349290ba8Calin Juravle    callInvokeUnresolvedVirtual(c);
135175dc732c80e6f2afd83209348124df349290ba8Calin Juravle    callInvokeUnresolvedInterface(c);
13698893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle    callInvokeUnresolvedSuper(m);
137e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    callUnresolvedStaticFieldAccess();
138e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    callUnresolvedInstanceFieldAccess(c);
13998893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle    testInstanceOf(m);
14098893e146b0ff0e1fd1d7c29252f1d1e75a163f2Calin Juravle    testCheckCast(m);
1410580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray    testLicm(2);
1420580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray  }
1430580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray
1440580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray  /// CHECK-START: void Main.testLicm(int) licm (before)
1450243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray  /// CHECK:      <<Class:l\d+>>        LoadClass                                     loop:B2
1460243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray  /// CHECK-NEXT: <<Clinit:l\d+>>       ClinitCheck [<<Class>>]                       loop:B2
1470243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray  /// CHECK-NEXT: <<New:l\d+>>          NewInstance [<<Clinit>>,<<Method:[i|j]\d+>>]  loop:B2
1480243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray  /// CHECK-NEXT:                       InvokeUnresolved [<<New>>]                    loop:B2
1490243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray
1500243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray  /// CHECK-START: void Main.testLicm(int) licm (after)
1510243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray  /// CHECK:      <<Class:l\d+>>        LoadClass                                     loop:none
1520243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray  /// CHECK-NEXT: <<Clinit:l\d+>>       ClinitCheck [<<Class>>]                       loop:none
1530243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray  /// CHECK:      <<New:l\d+>>          NewInstance [<<Clinit>>,<<Method:[i|j]\d+>>]  loop:B2
1540243a74c7afada20dfbecbeb056696949c5439f0Nicolas Geoffray  /// CHECK-NEXT:                       InvokeUnresolved [<<New>>]                    loop:B2
1550580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray  static public void testLicm(int count) {
1560580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray    // Test to make sure we keep the initialization check after loading an unresolved class.
1570580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray    UnresolvedClass c;
1580580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray    int i = 0;
1590580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray    do {
1600580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray      c = new UnresolvedClass();
1610580d96231c3143f50d14bbc834662715faf6cdfNicolas Geoffray    } while (i++ != count);
162e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  }
163e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
164e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  public static void expectEquals(byte expected, byte result) {
165e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    if (expected != result) {
166e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle      throw new Error("Expected: " + expected + ", found: " + result);
167e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    }
168e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  }
169e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
170e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  public static void expectEquals(char expected, char result) {
171e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    if (expected != result) {
172e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle      throw new Error("Expected: " + expected + ", found: " + result);
173e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    }
174e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  }
175e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
176e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  public static void expectEquals(int expected, int result) {
177e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    if (expected != result) {
178e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle      throw new Error("Expected: " + expected + ", found: " + result);
179e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    }
180e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  }
181e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
182e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  public static void expectEquals(long expected, long result) {
183e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    if (expected != result) {
184e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle      throw new Error("Expected: " + expected + ", found: " + result);
185e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    }
186e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  }
187e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
188e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    public static void expectEquals(float expected, float result) {
189e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    if (expected != result) {
190e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle      throw new Error("Expected: " + expected + ", found: " + result);
191e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    }
192e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  }
193e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
194e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  public static void expectEquals(double expected, double result) {
195e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    if (expected != result) {
196e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle      throw new Error("Expected: " + expected + ", found: " + result);
197e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    }
198e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  }
199e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle
200e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle  public static void expectEquals(Object expected, Object result) {
201e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    if (expected != result) {
202e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle      throw new Error("Expected: " + expected + ", found: " + result);
203e460d1df1f789c7c8bb97024a8efbd713ac175e9Calin Juravle    }
204175dc732c80e6f2afd83209348124df349290ba8Calin Juravle  }
205175dc732c80e6f2afd83209348124df349290ba8Calin Juravle}
206