Skip to content

Commit

Permalink
Fix faulty constraint cardinality and require flag
Browse files Browse the repository at this point in the history
  • Loading branch information
Aonokishi committed Sep 13, 2024
1 parent 29f9d98 commit 6d37399
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 18 deletions.
16 changes: 9 additions & 7 deletions cfmtoolbox/plugins/featureide_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,25 +138,27 @@ def parse_constraints(
eliminated_constraints.add(rule)
continue

is_require = first_feature_value == second_feature_value

constraint = (
Constraint(
require=True,
require=is_require,
first_feature=first_feature,
first_cardinality=first_feature.instance_cardinality,
first_cardinality=Cardinality([Interval(1, 1)]),
second_feature=second_feature,
second_cardinality=second_feature.instance_cardinality,
second_cardinality=Cardinality([Interval(1, 1)]),
)
if (first_feature_value or second_feature_value)
else Constraint(
require=True,
require=is_require,
first_feature=second_feature,
first_cardinality=second_feature.instance_cardinality,
first_cardinality=Cardinality([Interval(1, 1)]),
second_feature=first_feature,
second_cardinality=first_feature.instance_cardinality,
second_cardinality=Cardinality([Interval(1, 1)]),
)
)

if first_feature_value == second_feature_value:
if is_require:
require_constraints.append(constraint)
else:
exclude_constraints.append(constraint)
Expand Down
14 changes: 7 additions & 7 deletions tests/plugins/test_featureide_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,9 +344,9 @@ def test_parse_constraint_can_parse_constraint_with_one_require_rule():
constraint = Constraint(
True,
feature,
feature.instance_cardinality,
Cardinality([Interval(1, 1)]),
feature,
feature.instance_cardinality,
Cardinality([Interval(1, 1)]),
)

require, exclude, eliminated = parse_constraints(constraints, cfm)
Expand All @@ -369,11 +369,11 @@ def test_parse_constraint_can_parse_constraint_with_one_exclude_rule():
cfm = CFM([feature], [], [])

constraint = Constraint(
True,
False,
feature,
feature.instance_cardinality,
Cardinality([Interval(1, 1)]),
feature,
feature.instance_cardinality,
Cardinality([Interval(1, 1)]),
)

require, exclude, eliminated = parse_constraints(constraints, cfm)
Expand Down Expand Up @@ -403,9 +403,9 @@ def test_parse_constraint_can_parse_constraint_with_both_formulas_negative():
constraint = Constraint(
True,
cheese_feature,
cheese_feature.instance_cardinality,
Cardinality([Interval(1, 1)]),
bread_feature,
bread_feature.instance_cardinality,
Cardinality([Interval(1, 1)]),
)

cfm = CFM([bread_feature, cheese_feature], [], [])
Expand Down
8 changes: 4 additions & 4 deletions tests/plugins/test_uvl_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -544,9 +544,9 @@ def test_export_uvl_from_featureide_cfm():
\t\t\t\t\tTomato cardinality [0..1]
constraints
\t((Sourdough >= 0) & (Sourdough <= 1)) => ((Cheddar >= 0) & (Cheddar <= 1))
\t((Tomato >= 0) & (Tomato <= 1)) => ((Gouda >= 0) & (Gouda <= 1))
\t((Swiss >= 0) & (Swiss <= 1)) => ((Lettuce >= 0) & (Lettuce <= 1))
\t!(((Wheat >= 0) & (Wheat <= 1)) & ((Tomato >= 0) & (Tomato <= 1)))"""
\t(Sourdough = 1) => (Cheddar = 1)
\t(Tomato = 1) => (Gouda = 1)
\t(Swiss = 1) => (Lettuce = 1)
\t!((Wheat = 1) & (Tomato = 1))\n"""

assert expectation in export.decode()

0 comments on commit 6d37399

Please sign in to comment.