-- File [Ivy]<Nelson>Lupine>LupineExerciserPrivate.mesa.
-- Last edited by BZM on 14-Mar-82 13:23:46.
-- LupineExerciser*Impl cooperate to export LupineExerciserPrivate.
DIRECTORY
LupineExerciser USING [
Counter, Handle,
StandardPasses, StandardTrialsPerPass, StandardTestsPerTrial ],
TTY USING [Handle];
LupineExerciserPrivate: DEFINITIONS
= BEGIN OPEN LupineExerciser;
-- Runtime parameters.
TestParameters: TYPE = MACHINE DEPENDENT RECORD [
useDoradoClock (0): BOOLEAN ← FALSE,
countOnlyEmulatorCycles (1): BOOLEAN ← FALSE,
checkResults (2:0..0): BOOLEAN ← TRUE,
testRandomly (2:1..15): BOOLEAN ← FALSE,
passes (3): Counter ← StandardPasses,
trialsPerPass (4), maxTrialsPerPass (5): Counter ← StandardTrialsPerPass,
testsPerTrial (6), maxTestsPerTrial (7): Counter ← StandardTestsPerTrial,
spying (8:0..0): BOOLEAN ← FALSE,
spyOnProcs (8:1..1): BOOLEAN ← TRUE,
showSpyData (8:2..15): {afterEachTest, afterAllTests} ← afterAllTests ];
InitTestParameters: TestParameters = [];
-- Timers (they should be opaque, but that's even more clumsy than this).
SystemTime: TYPE = LONG CARDINAL; -- Same as System.Pulses.
SystemTimer: PUBLIC TYPE = MACHINE DEPENDENT RECORD [
start, event, elapsed: SystemTime ← 0,
lastDelayFinished: SystemTime ← 0 ];
InitSystemTimer: SystemTimer = [];
PrecisionTime: TYPE = LONG CARDINAL;
RingBufferIndex: TYPE = CARDINAL; --[0..tp.testsPerTrial);
SortBufferIndex: TYPE = CARDINAL; --[0..LAST[RingBufferIndex]+2);
RingBuffer: TYPE = LONG DESCRIPTOR FOR ARRAY RingBufferIndex OF PrecisionTime;
SortBuffer: TYPE = RECORD [SEQUENCE length: SortBufferIndex OF PrecisionTime] ;
PrecisionTimer: PUBLIC TYPE = MACHINE DEPENDENT RECORD [
start: PrecisionTime ← 0,
ringIndex: RingBufferIndex ← 0,
ringBuffer: RingBuffer ← NIL,
sortBuffer: LONG POINTER TO SortBuffer ← NIL ];
InitPrecisionTimer: PrecisionTimer = [];
-- Exerciser instance data.
ExerciseHandle: TYPE = POINTER TO ExerciseObject;
ExerciseObject: TYPE = RECORD [
tp: TestParameters ← InitTestParameters,
precisionTimer: PrecisionTimer ← InitPrecisionTimer,
timer: SystemTimer ← InitSystemTimer,
logStream: TTY.Handle ← ,
logPut: PROC [CHARACTER] ← NIL ];
-- Internal operations.
CheckAbort: PROC [self: Handle];
SpyOperation: TYPE = {
startAndWatchProcs, startAndWatchModules,
startSpying, stopSpying, displayStats,
stop, stopAndDisplayStats };
CallSpy: PROCEDURE [
self: Handle,
operation: SpyOperation ];
InitPrecisionTimings: PROCEDURE [self: Handle];
FinishPrecisionTimings: PROCEDURE [self: Handle];
END. -- LupineExerciserPrivate.