1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/* 2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more 3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * contributor license agreements. See the NOTICE file distributed with 4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * this work for additional information regarding copyright ownership. 5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0 6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * (the "License"); you may not use this file except in compliance with 7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the License. You may obtain a copy of the License at 8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Unless required by applicable law or agreed to in writing, software 12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * See the License for the specific language governing permissions and 15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * limitations under the License. 16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 17ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.lang; 18cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class ObjectTest extends junit.framework.TestCase { 20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Test objects. 23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Object obj1 = new Object(); 25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Object obj2 = new Object(); 27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Generic state indicator. 30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int status = 0; 32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int ready = 0; 34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#Object() 37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_Constructor() { 39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.Object() 40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull("Constructor failed !!!", new Object()); 41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#equals(java.lang.Object) 45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_equalsLjava_lang_Object() { 47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method boolean java.lang.Object.equals(java.lang.Object) 48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Same object should be equal", obj1.equals(obj1)); 49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Different objects should not be equal", !obj1.equals(obj2)); 50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#getClass() 54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getClass() throws Exception { 56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.Class java.lang.Object.getClass() 57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath String classNames[] = { "java.lang.Object", "java.lang.Throwable", 58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "java.lang.StringBuffer" }; 59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Class<?> classToTest = null; 60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Object instanceToTest = null; 61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = 0; 63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < classNames.length; ++i) { 64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath classToTest = Class.forName(classNames[i]); 65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath instanceToTest = classToTest.newInstance(); 66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Instance didn't match creator class.", 67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath instanceToTest.getClass() == classToTest); 68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Instance didn't match class with matching name.", 69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath instanceToTest.getClass() == Class 70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .forName(classNames[i])); 71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#hashCode() 76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_hashCode() { 78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method int java.lang.Object.hashCode() 79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Same object should have same hash.", 80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.hashCode() == obj1.hashCode()); 81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Same object should have same hash.", 82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj2.hashCode() == obj2.hashCode()); 83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#notify() 87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_notify() { 89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Object.notify() 90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Inner class to run test thread. 92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class TestThread implements Runnable { 93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (obj1) { 95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ready += 1; 97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait();// Wait for ever. 98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status += 1; 99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException ex) { 100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = -1000; 101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ; 106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Start of test code. 108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Warning: 110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // This code relies on each thread getting serviced within 111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // 200 mSec of when it is notified. Although this 112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // seems reasonable, it could lead to false-failures. 113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ready = 0; 115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = 0; 116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final int readyWaitSecs = 3; 117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final int threadCount = 20; 119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < threadCount; ++i) { 120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Thread(new TestThread()).start(); 121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (obj1) { 123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Wait up to readyWaitSeconds for all threads to be waiting on 126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // monitor 127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < readyWaitSecs; i++) { 128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(1000, 0); 129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (ready == threadCount) { 130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath break; 131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Check pre-conditions of testing notifyAll 135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Not all launched threads are waiting. (ready = " 136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ready + ")", ready == threadCount); 137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread woke too early. (status = " + status + ")", 138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status == 0); 139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 1; i <= threadCount; ++i) { 141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.notify(); 142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(200, 0); 143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Out of sync. (expected " + i + " but got " 144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + status + ")", status == i); 145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException ex) { 148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail( 149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "Unexpectedly got an InterruptedException. (status = " 150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + status + ")"); 151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#notifyAll() 157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_notifyAll() { 159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Object.notifyAll() 160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Inner class to run test thread. 162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class TestThread implements Runnable { 163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (obj1) { 165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ready += 1; 167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait();// Wait for ever. 168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status += 1; 169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException ex) { 170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = -1000; 171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ; 176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Start of test code. 178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Warning: 180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // This code relies on all threads getting serviced within 181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // 5 seconds of when they are notified. Although this 182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // seems reasonable, it could lead to false-failures. 183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = 0; 185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ready = 0; 186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final int readyWaitSecs = 3; 187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final int threadCount = 20; 188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < threadCount; ++i) { 189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Thread(new TestThread()).start(); 190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (obj1) { 193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Wait up to readyWaitSeconds for all threads to be waiting on 197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // monitor 198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < readyWaitSecs; i++) { 199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(1000, 0); 200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (ready == threadCount) { 201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath break; 202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Check pre-conditions of testing notifyAll 206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Not all launched threads are waiting. (ready = " 207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ready + ")", ready == threadCount); 208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("At least one thread woke too early. (status = " 209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + status + ")", status == 0); 210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.notifyAll(); 212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(5000, 0); 214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue( 216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "At least one thread did not get notified. (status = " 217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + status + ")", status == threadCount); 218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException ex) { 220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail( 221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "Unexpectedly got an InterruptedException. (status = " 222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + status + ")"); 223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#toString() 230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_toString() { 232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.String java.lang.Object.toString() 233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull("Object toString returned null.", obj1.toString()); 234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#wait() 238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_wait() { 240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Object.wait() 241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Inner class to run test thread. 243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class TestThread implements Runnable { 244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (obj1) { 246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait();// Wait for ever. 248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = 1; 249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException ex) { 250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = -1; 251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ; 256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Start of test code. 258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Warning: 260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // This code relies on threads getting serviced within 261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // 1 second of when they are notified. Although this 262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // seems reasonable, it could lead to false-failures. 263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = 0; 265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Thread(new TestThread()).start(); 266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (obj1) { 267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(1000, 0); 269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread woke too early. (status = " + status + ")", 270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status == 0); 271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.notifyAll(); 272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(1000, 0); 273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread did not get notified. (status = " + status 274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ")", status == 1); 275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException ex) { 276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail( 277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "Unexpectedly got an InterruptedException. (status = " 278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + status + ")"); 279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#wait(long) 285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_waitJ() { 287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Object.wait(long) 288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Start of test code. 290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final int loopCount = 20; 292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final int allowableError = 100; // millesconds 293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final int delay = 200; // milliseconds 294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (obj1) { 295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int count = 0; 297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long[][] toLong = new long[3][3]; 298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < loopCount; ++i) { 299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long before = System.currentTimeMillis(); 300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(delay, 0); 301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long after = System.currentTimeMillis(); 302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long error = (after - before - delay); 303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (error < 0) 304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath error = -error; 305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (i > 0 && error > allowableError) { 306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Allow jit to warm up before testing 307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (count < toLong.length) { 308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath toLong[count][0] = i; 309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath toLong[count][1] = before; 310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath toLong[count][2] = after; 311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath count++; 312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (error > (1000 + delay) || count == toLong.length) { 314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath StringBuffer sb = new StringBuffer(); 315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int j = 0; j < count; j++) { 316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb 317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .append("wakeup time too inaccurate, iteration "); 318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append(toLong[j][0]); 319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append(", before: "); 320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append(toLong[j][1]); 321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append(" after: "); 322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append(toLong[j][2]); 323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append(" diff: "); 324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append(toLong[j][2] - toLong[j][1]); 325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append("\n"); 326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(sb.toString()); 328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException ex) { 332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail( 333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "Unexpectedly got an InterruptedException. (status = " 334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + status + ")"); 335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Object#wait(long, int) 341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_waitJI() { 343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Object.wait(long, int) 344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Inner class to run test thread. 346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class TestThread implements Runnable { 347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (obj1) { 349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(0, 1); // Don't wait very long. 351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = 1; 352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(0, 0); // Wait for ever. 353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = 2; 354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException ex) { 355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = -1; 356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ; 361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Start of test code. 363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Warning: 365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // This code relies on threads getting serviced within 366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // 1 second of when they are notified. Although this 367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // seems reasonable, it could lead to false-failures. 368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath status = 0; 370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Thread(new TestThread()).start(); 371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (obj1) { 372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(1000, 0); 374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread did not wake after 1 ms. (status = " 375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + status + ")", status == 1); 376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.notifyAll(); 377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj1.wait(1000, 0); 378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread did not get notified. (status = " + status 379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ")", status == 2); 380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException ex) { 381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail( 382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "Unexpectedly got an InterruptedException. (status = " 383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + status + ")"); 384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath} 389