⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elevatortest.java

📁 Nachos 5 java version
💻 JAVA
字号:
// PART OF THE MACHINE SIMULATION. DO NOT CHANGE.package nachos.machine;import nachos.security.*;import nachos.threads.KThread;import nachos.threads.Semaphore;/** * Tests the <tt>ElevatorBank</tt> module, using a single elevator and a single * rider. */public final class ElevatorTest {    /**     * Allocate a new <tt>ElevatorTest</tt> object.     */    public ElevatorTest() {    }    /**     * Run a test on <tt>Machine.bank()</tt>.     */    public void run() {	Machine.bank().init(1, 2, new ElevatorController());	int[] stops = { 1 };		Machine.bank().addRider(new Rider(), 0, stops);	Machine.bank().run();    }        private class ElevatorController implements ElevatorControllerInterface {	public void initialize(ElevatorControls controls) {	    this.controls = controls;	    eventWait = new Semaphore(0);	    controls.setInterruptHandler(new Runnable() {		    public void run() { interrupt(); }		});	}	public void run() {	    ElevatorEvent e;	    Lib.assert(controls.getFloor(0) == 0);	    	    e = getNextEvent();	    Lib.assert(e.event == ElevatorEvent.eventUpButtonPressed &&		       e.floor == 0);	    controls.setDirectionDisplay(0, dirUp);	    controls.openDoors(0);	    e = getNextEvent();	    Lib.assert(e.event == ElevatorEvent.eventFloorButtonPressed &&		       e.floor == 1);	    controls.closeDoors(0);	    controls.moveTo(1, 0);	    e = getNextEvent();	    Lib.assert(e.event == ElevatorEvent.eventElevatorArrived &&		       e.floor == 1 &&		       e.elevator == 0);	    controls.openDoors(0);	    e = getNextEvent();	    Lib.assert(e.event == ElevatorEvent.eventRidersDone);	    controls.finish();	    Lib.assertNotReached();	}	private void interrupt() {	    eventWait.V();	}	private ElevatorEvent getNextEvent() {	    ElevatorEvent event;	    while (true) {		if ((event = controls.getNextEvent()) != null)		    break;		eventWait.P();	    }	    return event;	}	private ElevatorControls controls;	private Semaphore eventWait;    }    private class Rider implements RiderInterface {	public void initialize(RiderControls controls, int[] stops) {	    this.controls = controls;	    Lib.assert(stops.length == 1 && stops[0] == 1);	    eventWait = new Semaphore(0);	    controls.setInterruptHandler(new Runnable() {		    public void run() { interrupt(); }		});	}	public void run() {	    RiderEvent e;	    Lib.assert(controls.getFloor() == 0);	    controls.pressUpButton();	    e = getNextEvent();	    Lib.assert(e.event == RiderEvent.eventDoorsOpened &&		       e.floor == 0 &&		       e.elevator == 0);	    Lib.assert(controls.getDirectionDisplay(0) == dirUp);	    Lib.assert(controls.enterElevator(0));	    controls.pressFloorButton(1);	    e = getNextEvent();	    Lib.assert(e.event == RiderEvent.eventDoorsClosed &&		       e.floor == 0 &&		       e.elevator == 0);	    e = getNextEvent();	    Lib.assert(e.event == RiderEvent.eventDoorsOpened &&		       e.floor == 1 &&		       e.elevator == 0);	    Lib.assert(controls.exitElevator(1));	    controls.finish();	    Lib.assertNotReached();	}	private void interrupt() {	    eventWait.V();	}	private RiderEvent getNextEvent() {	    RiderEvent event;	    while (true) {		if ((event = controls.getNextEvent()) != null)		    break;		eventWait.P();	    }	    return event;	}	private RiderControls controls;	private Semaphore eventWait;    }}    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -