blob: 597aa364ba50b0e821ae1abf0e9b33f3913c55de [file] [log] [blame]
/*
* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
*
* @summary converted from VM Testbase jit/t/t013.
* VM Testbase keywords: [jit, quick]
*
* @library /vmTestbase
* /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @build jit.t.t013.t013
* @run driver ExecDriver --java jit.t.t013.t013
*/
package jit.t.t013;
import nsk.share.TestFailure;
import nsk.share.GoldChecker;
class Globals {
static public int NumDisks;
static public int MaxDisks = 64; // this will do!
}
class t013 {
public static final GoldChecker goldChecker = new GoldChecker( "t013" );
static Peg peg1 = new Peg(1),
peg2 = new Peg(2),
peg3 = new Peg(3);
public static void main(String args[]) {
Globals.NumDisks = 4;
t013.goldChecker.println("moving " + Globals.NumDisks + " disks...");
if (Globals.NumDisks > Globals.MaxDisks)
Globals.NumDisks = Globals.MaxDisks;
for (int i = Globals.NumDisks; i > 0; i--)
peg1.addDisk(i);
long start = System.currentTimeMillis();
moveDisks(Globals.NumDisks, peg1, peg3, peg2);
long stop = System.currentTimeMillis();
long t = (stop - start) / 100;
t013.goldChecker.println("finished, but I won't tell you how long it took");
t013.goldChecker.check();
}
public static void moveDisks(int numDisks, Peg fromPeg, Peg toPeg, Peg usingPeg) {
t013.goldChecker.println
(
"moveDisks(" +
numDisks +
", " +
fromPeg.pegNum +
", " +
toPeg.pegNum +
", " +
usingPeg.pegNum +
")"
);
if (numDisks == 1) {
int disk;
toPeg.addDisk(disk = fromPeg.removeDisk());
} else {
moveDisks(numDisks - 1, fromPeg, usingPeg, toPeg);
moveDisks(1, fromPeg, toPeg, usingPeg);
moveDisks(numDisks - 1, usingPeg, toPeg, fromPeg);
}
}
}
class Peg {
int pegNum;
int disks[] = new int[64];
int nDisks;
public Peg(int n) {
t013.goldChecker.println("Peg(" + n + ")");
pegNum = n;
for (int i = 0; i < Globals.NumDisks; i++)
disks[i] = 0;
nDisks = 0;
}
public int pegNum() {
return pegNum;
}
public void addDisk(int diskNum) {
t013.goldChecker.println("addDisk(" + diskNum + ", " + pegNum() +")");
disks[nDisks++] = diskNum;
}
public int removeDisk() {
t013.goldChecker.println("removeDisk(" + pegNum() + ")");
return disks[--nDisks];
}
}