(
full_object: object,
message_data: Sequence[Tuple[str, str, str]],
number_of_elements: int,
different_ids: Sequence[object],
max_abs_diff: float,
max_rel_diff: float,
)
| 41 | |
| 42 | |
| 43 | def _compare_approx( |
| 44 | full_object: object, |
| 45 | message_data: Sequence[Tuple[str, str, str]], |
| 46 | number_of_elements: int, |
| 47 | different_ids: Sequence[object], |
| 48 | max_abs_diff: float, |
| 49 | max_rel_diff: float, |
| 50 | ) -> List[str]: |
| 51 | message_list = list(message_data) |
| 52 | message_list.insert(0, ("Index", "Obtained", "Expected")) |
| 53 | max_sizes = [0, 0, 0] |
| 54 | for index, obtained, expected in message_list: |
| 55 | max_sizes[0] = max(max_sizes[0], len(index)) |
| 56 | max_sizes[1] = max(max_sizes[1], len(obtained)) |
| 57 | max_sizes[2] = max(max_sizes[2], len(expected)) |
| 58 | explanation = [ |
| 59 | f"comparison failed. Mismatched elements: {len(different_ids)} / {number_of_elements}:", |
| 60 | f"Max absolute difference: {max_abs_diff}", |
| 61 | f"Max relative difference: {max_rel_diff}", |
| 62 | ] + [ |
| 63 | f"{indexes:<{max_sizes[0]}} | {obtained:<{max_sizes[1]}} | {expected:<{max_sizes[2]}}" |
| 64 | for indexes, obtained, expected in message_list |
| 65 | ] |
| 66 | return explanation |
| 67 | |
| 68 | |
| 69 | # builtin pytest.approx helper |
no test coverage detected