Skip to content

Commit fdbbab3

Browse files
committed
fix(component validation): Fix validation of motor number of poles parameter
1 parent bff1ad1 commit fdbbab3

File tree

2 files changed

+10
-25
lines changed

2 files changed

+10
-25
lines changed

ardupilot_methodic_configurator/data_model_vehicle_components_validation.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -627,11 +627,12 @@ def validate_all_data(self, entry_values: dict[ComponentPath, str]) -> tuple[boo
627627

628628
def _validate_motor_poles(self, errors: list, path: ComponentPath, value: str, paths_str: str) -> None:
629629
if path == ("Motors", "Specifications", "Poles"):
630-
# Nr of magnetic rotor poles + 1 must be a multiple of 3
630+
# Number of magnetic rotor poles must be even
631+
# On a common 12N14P BLDC/PMSM motor this is 14, the P number
631632
try:
632633
poles = int(value)
633-
if (poles + 1) % 3 != 0:
634-
error_msg = _("Number of magnetic rotor poles + 1 must be a multiple of 3 for {paths_str}")
634+
if poles % 2 != 0:
635+
error_msg = _("Number of magnetic rotor poles must be even for {paths_str}")
635636
errors.append(error_msg.format(paths_str=paths_str))
636637
except ValueError:
637638
error_msg = _("Invalid integer value for {paths_str}")

tests/test_data_model_vehicle_components_validation.py

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -821,17 +821,13 @@ def test_validate_all_data_motor_poles_valid_values(self, realistic_model) -> No
821821
Test validate_all_data with valid motor poles values.
822822
823823
GIVEN: A model with motor component data
824-
WHEN: Validating motor poles values where (poles + 1) % 3 == 0
824+
WHEN: Validating motor poles values where even
825825
THEN: Validation should pass with no errors
826826
"""
827827
model = realistic_model
828828
model.init_possible_choices({})
829829

830-
# Valid motor poles: (poles + 1) % 3 == 0
831-
# poles = 2: (2+1) % 3 = 0 ✓
832-
# poles = 5: (5+1) % 3 = 0 ✓
833-
# poles = 8: (8+1) % 3 = 0 ✓
834-
# poles = 11: (11+1) % 3 = 0 ✓
830+
# Valid motor poles: even
835831
valid_entries = {
836832
("Motors", "Specifications", "Poles"): "2",
837833
}
@@ -841,7 +837,7 @@ def test_validate_all_data_motor_poles_valid_values(self, realistic_model) -> No
841837
assert len(errors) == 0
842838

843839
valid_entries = {
844-
("Motors", "Specifications", "Poles"): "5",
840+
("Motors", "Specifications", "Poles"): "40",
845841
}
846842

847843
is_valid, errors = model.validate_all_data(valid_entries)
@@ -853,33 +849,21 @@ def test_validate_all_data_motor_poles_invalid_values(self, realistic_model) ->
853849
Test validate_all_data with invalid motor poles values.
854850
855851
GIVEN: A model with motor component data
856-
WHEN: Validating motor poles values where (poles + 1) % 3 != 0
852+
WHEN: Validating motor poles values where poles is an odd number
857853
THEN: Validation should fail with error messages about motor poles requirement
858854
"""
859855
model = realistic_model
860856
model.init_possible_choices({})
861857

862-
# Invalid motor poles: (poles + 1) % 3 != 0
863-
# poles = 3: (3+1) % 3 = 1 ≠ 0 ✗
864-
# poles = 4: (4+1) % 3 = 2 ≠ 0 ✗
865-
# poles = 6: (6+1) % 3 = 1 ≠ 0 ✗
858+
# Invalid number of motor poles: 3
866859
invalid_entries = {
867860
("Motors", "Specifications", "Poles"): "3",
868861
}
869862

870863
is_valid, errors = model.validate_all_data(invalid_entries)
871864
assert is_valid is False
872865
assert len(errors) > 0
873-
assert "must be a multiple of 3" in errors[0]
874-
875-
invalid_entries = {
876-
("Motors", "Specifications", "Poles"): "4",
877-
}
878-
879-
is_valid, errors = model.validate_all_data(invalid_entries)
880-
assert is_valid is False
881-
assert len(errors) > 0
882-
assert "must be a multiple of 3" in errors[0]
866+
assert "must be even" in errors[0]
883867

884868
def test_validate_all_data_motor_poles_invalid_string(self, realistic_model) -> None:
885869
"""

0 commit comments

Comments
 (0)