def test_sequence_pair_operators(example_pair_horizontally, example_pair_vertically): # noqa: F811 seqpair_1 = rps.SequencePair(pair=example_pair_horizontally) seqpair_2 = rps.SequencePair(pair=example_pair_horizontally) seqpair_3 = rps.SequencePair(pair=example_pair_vertically) assert id(seqpair_1) != id(seqpair_2) != id(seqpair_3) assert seqpair_1 == seqpair_2 assert seqpair_1 != seqpair_3
def test_sequence_pair_init_vertically(example_pair_vertically): # noqa: F811 seqpair = rps.SequencePair(pair=example_pair_vertically) assert seqpair.pair == example_pair_vertically assert seqpair.gp == example_pair_vertically[0] assert seqpair.gn == example_pair_vertically[1] assert seqpair.n == 4 assert seqpair.oblique_grid.grid == [[-1, -1, -1, 0], [-1, -1, 1, -1], [-1, 2, -1, -1], [3, -1, -1, -1]] assert seqpair.oblique_grid.coordinates == [{"a": 0, "b": 3}, {"a": 1, "b": 2}, {"a": 2, "b": 1}, {"a": 3, "b": 0}]
def test_solution_str(example_pair, example_floorplan): # noqa: F811 seqpair = rps.SequencePair(pair=example_pair) floorplan = rps.Floorplan( positions=example_floorplan["positions"], bounding_box=example_floorplan["bounding_box"], ) solution = rps.Solution(sequence_pair=seqpair, floorplan=floorplan) assert isinstance(solution.__str__(), str) assert ( "Solution({'sequence_pair': SequencePair(([0, 1, 3, 2], [3, 0, 2, 1])), " "'floorplan': Floorplan({'positions': [{'id': 0, 'x': 0, 'y': 1}, " "{'id': 1, 'x': 4, 'y': 3.2}, {'id': 2, 'x': 5.0, 'y': 0.0}, {'id': 3, 'x': 0, 'y': 0}], " "'bounding_box': (8, 7.2), 'area': 57.6})})" in solution.__str__())
def test_sequence_pair_decode_vertically(example_problem, example_pair_vertically): # noqa: F811 seqpair = rps.SequencePair(pair=example_pair_vertically) floorplan = seqpair.decode(problem=rps.Problem(rectangles=example_problem)) assert isinstance(floorplan, rps.Floorplan) assert isinstance(floorplan.positions, list) assert len(floorplan.positions) == 4 assert isinstance(floorplan.bounding_box, tuple) assert len(floorplan.bounding_box) == 2 assert isinstance(floorplan.area, float) # Positions assert floorplan.positions[0]["id"] == 0 assert math.isclose(floorplan.positions[0]["x"], 0.0) assert math.isclose(floorplan.positions[0]["y"], 12.2) assert math.isclose(floorplan.positions[0]["width"], 4.0) assert math.isclose(floorplan.positions[0]["height"], 6.0) assert floorplan.positions[1]["id"] == 1 assert math.isclose(floorplan.positions[1]["x"], 0.0) assert math.isclose(floorplan.positions[1]["y"], 8.2) assert math.isclose(floorplan.positions[1]["width"], 4.0) assert math.isclose(floorplan.positions[1]["height"], 4.0) assert floorplan.positions[2]["id"] == 2 assert math.isclose(floorplan.positions[2]["x"], 0.0) assert math.isclose(floorplan.positions[2]["y"], 5.0) assert math.isclose(floorplan.positions[2]["width"], 2.1) assert math.isclose(floorplan.positions[2]["height"], 3.2) assert floorplan.positions[3]["id"] == 3 assert math.isclose(floorplan.positions[3]["x"], 0.0) assert math.isclose(floorplan.positions[3]["y"], 0.0) assert math.isclose(floorplan.positions[3]["width"], 1.0) assert math.isclose(floorplan.positions[3]["height"], 5.0) # Bounding box assert floorplan.bounding_box == (4.0, 18.2) # Area assert floorplan.area == 72.8
def test_solution_init_invalid_floorplan(example_pair): # noqa: F811 seqpair = rps.SequencePair(pair=example_pair) with pytest.raises(TypeError): rps.Solution(sequence_pair=seqpair, floorplan="Invalid floorplan")