201 lines
7.2 KiB
Python
201 lines
7.2 KiB
Python
from marker_sets import WORLDS
|
|
from lib_marker import Point, Track
|
|
|
|
|
|
def validate_marker_data() -> None:
|
|
for test_name, test_f in _tests.items():
|
|
results = test_f()
|
|
if len(results) > 0:
|
|
print(f"[X] {test_name}")
|
|
for result in results:
|
|
print(f" {result}")
|
|
else:
|
|
print(f"[✓] {test_name}")
|
|
|
|
|
|
def validate_no_non_included_files() -> list:
|
|
# TODO: Implement this function
|
|
return []
|
|
|
|
|
|
def validate_no_invalid_y_values() -> list:
|
|
result = []
|
|
|
|
for world_name, marker_sets in WORLDS.items():
|
|
for marker_set in marker_sets:
|
|
for marker in marker_set.markers:
|
|
if isinstance(marker, Point):
|
|
if marker.y < 0 or marker.y > 255:
|
|
result.append(
|
|
{
|
|
"error_type": "invalid_y_value",
|
|
"full_marker_name": (
|
|
world_name,
|
|
marker_set.name,
|
|
marker.name,
|
|
),
|
|
"y_value": marker.y,
|
|
}
|
|
)
|
|
elif isinstance(marker, Track):
|
|
for i, point in enumerate(marker.points):
|
|
_, y, _ = point
|
|
if y < 0 or y > 255:
|
|
result.append(
|
|
{
|
|
"error_type": "invalid_y_value",
|
|
"full_marker_name": (
|
|
world_name,
|
|
marker_set.name,
|
|
marker.name,
|
|
),
|
|
"index": i,
|
|
"y_value": y,
|
|
}
|
|
)
|
|
|
|
return result
|
|
|
|
|
|
def validate_no_duplicate_points_in_tracks() -> list:
|
|
result = []
|
|
|
|
for world_name, marker_sets in WORLDS.items():
|
|
for marker_set in marker_sets:
|
|
for marker in marker_set.markers:
|
|
if isinstance(marker, Track):
|
|
points = {}
|
|
for point in marker.points:
|
|
if point in points:
|
|
result.append(
|
|
{
|
|
"error_type": "duplicate_point",
|
|
"point_a": points[point],
|
|
"point_b": (
|
|
world_name,
|
|
marker_set.name,
|
|
marker.name,
|
|
),
|
|
"coordinates": point,
|
|
}
|
|
)
|
|
points[point] = (world_name, marker_set.name, marker.name)
|
|
|
|
return result
|
|
|
|
|
|
def validate_no_duplicate_marker_names() -> list:
|
|
result = []
|
|
|
|
marker_names = set()
|
|
for world_name, marker_sets in WORLDS.items():
|
|
for marker_set in marker_sets:
|
|
for marker in marker_set.markers:
|
|
full_name = (world_name, marker_set.name, marker.name)
|
|
if full_name in marker_names:
|
|
result.append(
|
|
{
|
|
"error_type": "duplicate_marker_name",
|
|
"full_marker_name": full_name,
|
|
}
|
|
)
|
|
marker_names.add(full_name)
|
|
|
|
return result
|
|
|
|
|
|
def validate_no_duplicate_marker_set_names() -> list:
|
|
result = []
|
|
|
|
marker_set_names = set()
|
|
for world_name, marker_sets in WORLDS.items():
|
|
for marker_set in marker_sets:
|
|
if (world_name, marker_set.name) in marker_set_names:
|
|
result.append(
|
|
{
|
|
"error_type": "duplicate_marker_set_name",
|
|
"full_marker_set_name": (world_name, marker_set.name),
|
|
}
|
|
)
|
|
marker_set_names.add((world_name, marker_set.name))
|
|
|
|
return result
|
|
|
|
|
|
def validate_no_unused_icons() -> list:
|
|
# TODO: Implement this function
|
|
return []
|
|
|
|
|
|
def validate_no_duplicate_points() -> list:
|
|
result = []
|
|
|
|
for world_name, marker_sets in WORLDS.items():
|
|
points = {}
|
|
for marker_set in marker_sets:
|
|
for marker in marker_set.markers:
|
|
if isinstance(marker, Point):
|
|
point = (marker.x, marker.y, marker.z)
|
|
if point in points:
|
|
result.append(
|
|
{
|
|
"error_type": "duplicate_point",
|
|
"point_a": points[point],
|
|
"point_b": (world_name, marker_set.name, marker.name),
|
|
"coordinates": point,
|
|
}
|
|
)
|
|
points[point] = (world_name, marker_set.name, marker.name)
|
|
elif isinstance(marker, Track):
|
|
for i, point in enumerate(marker.points):
|
|
if point in points:
|
|
result.append(
|
|
{
|
|
"error_type": "duplicate_point",
|
|
"point_a": points[point],
|
|
"point_b": (
|
|
world_name,
|
|
marker_set.name,
|
|
marker.name,
|
|
),
|
|
"index": i,
|
|
"coordinates": point,
|
|
}
|
|
)
|
|
points[point] = (world_name, marker_set.name, marker.name)
|
|
|
|
return result
|
|
|
|
|
|
def validate_all_tracks_have_at_least_two_points() -> list:
|
|
result = []
|
|
|
|
for world_name, marker_sets in WORLDS.items():
|
|
for marker_set in marker_sets:
|
|
for marker in marker_set.markers:
|
|
if isinstance(marker, Track) and len(marker.points) < 2:
|
|
result.append(
|
|
{
|
|
"error_type": "track_too_short",
|
|
"full_marker_name": (
|
|
world_name,
|
|
marker_set.name,
|
|
marker.name,
|
|
),
|
|
}
|
|
)
|
|
|
|
return result
|
|
|
|
|
|
_tests = {
|
|
"No non-included files": validate_no_non_included_files,
|
|
"No invalid y coordinates": validate_no_invalid_y_values,
|
|
"No duplicate points in tracks": validate_no_duplicate_points_in_tracks,
|
|
"No duplicate marker names": validate_no_duplicate_marker_names,
|
|
"No duplicate marker-set names": validate_no_duplicate_marker_set_names,
|
|
"No unused icons": validate_no_unused_icons,
|
|
"No duplicate points": validate_no_duplicate_points,
|
|
"All tracks have at least two points": validate_all_tracks_have_at_least_two_points,
|
|
}
|