def test_action_mask_tsu(): state = State(13, 6, 2, 1, tsu_rules=True) stack = [_, _, _, _, _, _, _, _] * state.field.offset stack += [ R, _, R, G, _, G, _, _, ] state.field = TallField.from_list(stack, num_layers=state.num_layers, tsu_rules=state.tsu_rules) state.render() mask = state.get_action_mask() print(mask) assert (len(mask) == 5 + 5 + 6 + 6) for i, (x, orientation) in enumerate(state.actions): if x in (1, 4): assert (mask[i]) elif orientation in (0, 2) and x in (0, 3): assert (mask[i]) else: assert (not mask[i])
def test_gravity(): _ = None stack = [_] * 8 * 6 stack += [ 1, 2, _, 1, _, _, _, _, 3, _, _, _, _, _, _, _, ] state = State(8, 4, 4, deals=[]) state.field = BottomField.from_list(stack) state = AnimationState(state) assert state.step_gravity() stack = [_] * 4 * 6 stack += [ 1, _, _, _, 3, 2, _, 1, ] assert state.to_list() == stack assert not state.step_gravity()
def test_action_mask(): state = State(8, 7, 2, 1) stack = [ R, _, R, _, _, _, G, _, ] state.field = BottomField.from_list(stack, num_layers=state.num_layers) state.render() mask = state.get_action_mask() print(mask) assert (len(mask) == 6 + 6 + 7 + 7) for i, (x, orientation) in enumerate(state.actions): if x in (3, 4): assert (mask[i]) elif orientation in (1, 3) and x in (1, 5): assert (mask[i]) else: assert (not mask[i])
def test_resolve(): state = State(8, 7, 2, 1) state.deals[0] = (0, 0) stack = [ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, G, G, G, _, _, _, _, _, R, R, R, G, G, G, _, ] state.field = BottomField.from_list(stack, num_layers=state.num_layers) state.render() reward = state.step(0, 1) state.render() assert (reward == 4)
def test_garbage_tsu(): state = State(13, 6, 5, 1, tsu_rules=True, has_garbage=True) stack = [_, _, _, _, _, _, _, _] * state.field.offset stack += [ _, R, _, _, _, _, _, _, B, R, _, _, _, _, _, _, Y, B, _, _, _, _, _, _, G, B, _, _, _, _, _, _, G, R, _, _, _, _, _, _, Y, R, _, _, _, _, _, _, B, G, _, _, _, _, _, _, B, R, _, _, _, _, _, _, B, R, _, _, _, _, _, _, Y, B, _, _, _, _, _, _, G, B, _, _, _, _, _, _, G, R, _, _, _, _, _, _, Y, R, _, _, _, _, _, _, ] state.field = TallField.from_list(stack, num_layers=state.num_layers, tsu_rules=state.tsu_rules, has_garbage=state.has_garbage) state.render() state.add_garbage(39) state.render() state.field.resolve() assert (state.field.popcount == 51)
def test_has_moves_tsu(): state = State(13, 2, 4, 1, tsu_rules=True) stack = [_, _, _, _, _, _, _, _] * state.field.offset stack += [ _, R, _, _, _, _, _, _, B, R, _, _, _, _, _, _, Y, B, _, _, _, _, _, _, G, B, _, _, _, _, _, _, G, R, _, _, _, _, _, _, Y, R, _, _, _, _, _, _, B, G, _, _, _, _, _, _, B, R, _, _, _, _, _, _, B, R, _, _, _, _, _, _, Y, B, _, _, _, _, _, _, G, B, _, _, _, _, _, _, G, R, _, _, _, _, _, _, Y, R, _, _, _, _, _, _, ] state.field = TallField.from_list(stack, num_layers=state.num_layers, tsu_rules=state.tsu_rules) state.render() assert (state.get_children())
def test_no_moves(): state = State(8, 2, 4, 1) stack = [ _, R, _, _, _, _, _, _, B, R, _, _, _, _, _, _, Y, B, _, _, _, _, _, _, G, B, _, _, _, _, _, _, G, R, _, _, _, _, _, _, Y, R, _, _, _, _, _, _, B, G, _, _, _, _, _, _, B, R, _, _, _, _, _, _, ] state.field = BottomField.from_list(stack, num_layers=state.num_layers) state.render() assert (not state.get_children())
def test_resolve_large(): state = State(16, 7, 2, 1) state.deals[0] = (0, 0) stack = [ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, G, G, G, _, _, _, _, _, R, R, R, G, G, G, _, ] state.field = TallField.from_list(stack, num_layers=state.num_layers) state.render() reward = state.step(0, 1) assert (reward == 8500 + 760)