Пример #1
0
def test_coroutine_batch3():
    "Check coroutine batch strategy"
    c = ScriptedController()
    o = coroutine_batch_optimizer([[1, 2], [3, 4]])
    c.strategy = CoroutineBatchStrategy(o)

    # Make trouble for batch [1,2]
    c.reject_eval(args=(1, ))
    c.reject_eval(args=(2, ))
    r1 = c.accept_eval(args=(1, ))
    r2 = c.accept_eval(args=(2, ))
    c.no_proposal()
    r1.kill()
    r1 = c.accept_eval(args=(1, ))
    r2.complete(2)
    c.no_proposal()
    r1.complete(1)

    # Let batch [3,4] go through without incident
    r = c.accept_eval(args=(3, ))
    r.complete(3)
    r = c.accept_eval(args=(4, ))
    r.complete(4)

    c.reject_terminate()
    c.reject_terminate()
    c.accept_terminate()
    c.terminate()
Пример #2
0
 def run(strategy):
     c = ScriptedController()
     c.strategy = strategy
     r1 = c.accept_eval(args=(1, ))
     r2 = c.accept_eval(args=(2, ))
     c.reject_eval(args=(3, ))
     r1.kill()
     r2.running()
     c.accept_eval(args=(3, )).complete(3)
     c.accept_eval(args=(1, )).complete(1)
     c.accept_eval(args=(4, )).complete(4)
     c.no_proposal()
     r2.complete(2)
     c.reject_terminate()
     c.accept_terminate()
     c.terminate()
Пример #3
0
def test_coroutine2():
    "Check coroutine strategy for correct retry behavior"
    c = ScriptedController()
    c.strategy = CoroutineStrategy(coroutine_optimizer([1, 2, 3]))

    # Do we re-try a rejected proposal?
    c.reject_eval(args=(1, ))
    r = c.accept_eval(args=(1, ))
    c.no_proposal()
    r.complete(1)

    # Do we retry on kill?
    r = c.accept_eval(args=(2, ))
    c.no_proposal()
    r.kill()
    r = c.accept_eval(args=(2, ))
    r.running()
    c.no_proposal()
    r.complete(2)

    # And check the simple case where everything goes without incident
    c.accept_eval(args=(3, )).complete(3)
    c.reject_terminate()
    c.reject_terminate()
    c.accept_terminate()
    c.terminate()
Пример #4
0
def test_thread1():
    "Check promise batch strategy"
    c = ScriptedController()
    c.strategy = ThreadStrategy(c, lambda s: thread_optimizer(s, [1, 2], 3))

    # Make some trouble for the first two points
    r1 = c.accept_eval(args=(1, ), skip=True)
    c.reject_eval(args=(2, ), skip=True)
    r2 = c.accept_eval(args=(2, ), skip=True)
    c.no_proposal()
    r1.kill()
    r1 = c.accept_eval(args=(1, ), skip=True)
    c.no_proposal()
    r1.complete(1)
    r2.complete(2)

    # Let the third proposal go through easy
    r3 = c.accept_eval(args=(3, ), skip=True)
    c.no_proposal()
    r3.complete(3)

    # Reject two termination messages before we quit
    c.reject_terminate(skip=True)
    c.reject_terminate(skip=True)
    c.accept_terminate(skip=True)
    c.terminate()
Пример #5
0
def test_check_worker1():
    "Test CheckWorkerStrategy"
    c = ScriptedController()
    strategy = FixedSampleStrategy([1, 2])
    c.strategy = CheckWorkerStrategy(c, strategy)
    r1 = c.accept_eval(args=(1, ))
    c.set_worker(False)
    r2 = c.no_proposal()
    r1.complete(1)
    c.set_worker(True)
    r2 = c.accept_eval(args=(2, ))
    r2.complete(2)
    c.accept_terminate()
    c.terminate()
Пример #6
0
def test_simple_merge1():
    "Test SimpleMergeStrategy"
    c = ScriptedController()
    strategy1 = PromiseStrategy(block=False)
    strategy2 = FixedSampleStrategy([1, 2, 3])
    c.strategy = SimpleMergedStrategy(c, [strategy1, strategy2])

    # Allow strategy2 to get one in, then strategy1 pre-empts
    c.set_worker(False)
    c.no_proposal()
    c.set_worker(True)
    r1 = c.accept_eval(args=(1, ))
    p = strategy1.promise_eval(100)
    r2 = c.accept_eval(args=(100, ))
    r1.complete(1)
    assert not p.ready()
    r2.complete(100)
    assert p.value == 100
    strategy1.terminate()

    c.reject_terminate()
    c.reject_terminate()
    c.accept_terminate()
    c.terminate()