Example #1
0
def simple_client_test():
    server = wave.server.Server(['z'])
    buf = ConcurrentBuffer()

    client_1 = make_client(server, buf)
    client_1.apply_local_change(wave.operation.Insert, 0, "a")
    client_1.apply_local_change(wave.operation.Insert, 1, "b")

    buf.resolve_events()

    client_2 = make_client(server, buf)

    print "pre-change\nc2:", client_2.value
    client_2.apply_local_change(wave.operation.Delete, 1)

    client_1.apply_local_change(wave.operation.Insert, 1, "x")

    print "pre-resolution\nc1:", client_1.value
    print "c2:", client_2.value, ""

    buf.resolve_events()

    print "c1:", client_1.value
    print "c2:", client_2.value
    print server
Example #2
0
def monte_carlo_test(seed):
    random.seed(seed)

    chars = [ chr(x) for x in xrange(ord('a'), ord('z')+1) ]
    start_len = random.randint(0, 10)
    start_value = [ random.choice(chars) for _ in xrange(start_len)]

    server = wave.server.Server(start_value)
    buf = ConcurrentBuffer()

    num_clients = random.randint(1, 5)
    clients = [ make_client(server, buf) for _ in xrange(num_clients) ]

    num_cycles = random.randint(1, 10)
    for i in xrange(num_cycles):
        for client in clients:
            num_ops = random.randint(0, 10)
            for _ in xrange(num_ops):
                value_len = len(client.value)
                is_insert = (value_len == 0) or random.choice([True, False])
                if is_insert:
                    client.apply_local_change(
                        wave.operation.Insert,
                        random.randint(0, value_len),
                        random.choice(chars))
                else:
                    client.apply_local_change(
                        wave.operation.Delete,
                        random.randint(0, value_len-1))
        num_events = buf.get_num_events()
        if num_events > 0:
            num_to_leave = random.randint(0, num_events - 1)
            buf.resolve_events(num_to_leave)
        # TODO: add some new clients
        # TODO: remove some existing clients

    # resolve the rest of the events
    buf.resolve_events()
    reference_value = clients[0].value
    passed = True
    for client in clients[1:]:
        if client.value != reference_value:
            passed = False
    if not passed:
        raise "Failed test" + seed
    print "passed", seed
    return passed