public void testTimers() { var timers = new Timers <double>(); O.freezeNow("2008/11/11 11:11:11"); timers.add(0.0, millisAhead(100), () => call(0)); O.wait(() => didCall(0)); IsFalse(timers.has(0.0)); timers.add(0.0, millisAhead(100), () => call(0)); timers.add(1.0, millisAhead(100), () => call(1)); O.wait(() => didCall(0)); O.wait(() => didCall(1)); timers.add(0.0, millisAhead(1000), () => call(0)); Bombs(() => timers.add(0.0, millisAhead(100), () => call(1)), "value exists"); timers.replace(0.0, millisAhead(100), () => call(1)); O.wait(() => didCall(1)); IsFalse(timers.remove(0.0)); timers.replace(0.0, millisAhead(200), () => call(1)); IsTrue(timers.remove(0.0)); O.sleep(300); IsFalse(didCall(1)); timers.add(0.0, millisAhead(800), () => call(0)); // adding removeOne tracking to Timers::clear method added timers.add(1.0, millisAhead(800), () => call(1)); // enough overhead to require loosening this deadline by 400 millis. timers.clear(); O.sleep(300); IsFalse(didCall(0)); IsFalse(didCall(1)); timers.add(1.0, Objects.now().AddMilliseconds(100), d => call((int)d)); O.wait(() => didCall(1)); IsFalse(didCall(0)); }
public static void waitMatches <T>(T expected, Producer <T> actual) { var actual_ = default(T); try { O.wait(() => (actual_ = actual()).Equals(expected)); } catch (Exception e) { if (actual_.ToString().Equals(expected.ToString())) { Bomb.toss( "actual != but string matched\n" + expected + "\n" + "actual Type:" + actual_.GetType().FullName + "\n" + "expected type:" + expected.GetType().FullName, e); } Bomb.toss(actual_ + "\n Did not match\n" + expected, e); } }
public void testTimerSequence() { Objects.freezeNow("2008/11/11 11:11:11"); double currentState = -1; var sequence = new TimerSequence <double>(d => { currentState = d; }); sequence.add(1.1, 500); sequence.add(2.2, 500); sequence.add(3.3); IsFalse(sequence.running()); // starts in 1.1 sequence.startAsOf(O.now()); O.wait(() => currentState == 1.1); IsTrue(sequence.running()); Objects.advanceNow(500); O.wait(() => currentState == 2.2); Objects.advanceNow(500); O.wait(() => currentState == 3.3); IsFalse(sequence.running()); sequence.startAsOf(O.now()); O.wait(() => currentState == 1.1); Objects.advanceNow(500); O.wait(() => currentState == 2.2); sequence.startAsOf(O.now()); O.wait(() => currentState == 1.1); Objects.advanceNow(500); O.wait(() => currentState == 2.2); Objects.advanceNow(500); O.wait(() => currentState == 3.3); // starts in 2.2 var asOf = O.now(); Objects.advanceNow(500); sequence.startAsOf(asOf); O.wait(() => currentState == 2.2); Objects.advanceNow(500); O.wait(() => currentState == 3.3); // starts in 3.3 asOf = O.now(); currentState = -1; Objects.advanceNow(1000); sequence.startAsOf(asOf); O.wait(() => currentState == 3.3); }