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