summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Marchese <maffblaster@gentoo.org>2017-06-28 18:59:22 +0000
committerMatthew Marchese <maffblaster@gentoo.org>2017-06-28 18:59:22 +0000
commite7a61952befa65579b61761bf6e8695537086ac9 (patch)
tree0dfbaa55b06ae97c22cd11c6eee5591c053b4947
parent/* QA check logic */ describe helpers (diff)
downloadglep-e7a61952befa65579b61761bf6e8695537086ac9.tar.gz
glep-e7a61952befa65579b61761bf6e8695537086ac9.tar.bz2
glep-e7a61952befa65579b61761bf6e8695537086ac9.zip
/* QA check logic */ Add whitespace in attempt to correct margins around the lists.
-rw-r--r--GLEP:73.mw26
1 files changed, 17 insertions, 9 deletions
diff --git a/GLEP:73.mw b/GLEP:73.mw
index c3caa26..73e51ad 100644
--- a/GLEP:73.mw
+++ b/GLEP:73.mw
@@ -195,35 +195,42 @@ It should be noted that for the purpose of distinguishing separate branches, all
apply the logic for an any-of (||) group
apply the logic for an at-most-one of (??) group
-====QA check logic====
+==== QA check logic ====
+
The logic for the reference algorithm is split into four split functions:
-# verifying that the constraints do not alter immutable flags,
-# verifying that the conditions for the constraints are not self-conflicting,
-# verifying that no two constraints will attempt to force opposite values for a single flag,
-# verifying that no constraint will meaningfully enable any of the constraints preceding it.
+
+# Verifying that the constraints do not alter immutable flags,
+# Verifying that the conditions for the constraints are not self-conflicting,
+# Verifying that no two constraints will attempt to force opposite values for a single flag,
+# Verifying that no constraint will meaningfully enable any of the constraints preceding it.
In the following descriptions, ''C'' will indicate zero or more conditions (''c<sub>i</sub>'' being the sub-conditions) of the flat constraint, and ''E'' will indicate the enforcement.
The check for alteration of immutable flags is done for every constraint separately. A flat constraint is determined to alter immutable flags if both of the following conditions occur:
+
* ''C'' can evaluate to true — that is, none of ''c<sub>i'' refer to an immutable flag whose value is ''¬c<sub>i</sub>'',
* ''E'' references an immutable flag whose immutable state is ''¬E''.
The check for self-conflicting constraints is performed for every constraint separately. A flat constraint is determined to be self-conflicting if the following condition occurs:
-* for any pair of sub-conditions ''c<sub>i</sub>'', ''c<sub>j</sub>'' (''i ≠ j''), ''c<sub>i</sub> = ¬c<sub>j</sub>.
+
+* For any pair of sub-conditions ''c<sub>i</sub>'', ''c<sub>j</sub>'' (''i ≠ j''), ''c<sub>i</sub> = ¬c<sub>j</sub>.
The check for attempting to force opposite values for a single flag is performed for every pair of constraints. Since it is symmetric, it is only necessary to perform it for unique pairs. For practical reasons, let's assume it is performed for every pair ''((C<sub>i</sub>, E<sub>i</sub>), (C<sub>j</sub>, E<sub>j</sub>))'', where ''j > i''. The pair is determined to force opposite values for a single flag if all of the following conditions are met:
+
* ''E<sub>i</sub> = ¬E<sub>j</sub>'',
* ''C<sub>i</sub>'' and ''C<sub>j</sub>'' can simultaneously evaluate to true,
* ''C<sub>i</sub>'' can evaluate to true after applying all the constraints preceding it, with flags ''F = C<sub>i</sub> ∪ C<sub>j</sub>'',
* ''C<sub>j</sub>'' can evaluate to true after applying all the constraints preceding it, with flags ''F = C<sub>i</sub> ∪ C<sub>j</sub>''.
The check for enabling the previous constraints is performed for every pair ''((C<sub>i</sub>, E<sub>i</sub>), (C<sub>j</sub>, E<sub>j</sub>))'', where ''j > i''. The constraint ''(C<sub>j</sub>, E<sub>j</sub>)'' is determined to meaningfully enable the constraint ''(C<sub>i</sub>, E<sub>i</sub>)'' if all of the following conditions are met:
+
* ''E<sub>j</sub>'' matches any of the conditions in ''C<sub>i</sub>'' (''E<sub>j</sub> = c<sub>i,k</sub>'', for any ''k''),
* ''C<sub>i</sub>'' and ''C<sub>j</sub>'' can simultaneously evaluate to true,
* ''E<sub>i</sub>'' does not always evaluate to true after applying all of the constraints, with flags ''F = C<sub>j</sub>''.
Two flat constraints ''C<sub>i</sub>'' and ''C<sub>j</sub>'' can simultaneously evaluate to true if the following condition is met:
-* for every ''c<sub>i,k</sub>'', ''c<sub>j,l</sub>'' (where ''k'' and ''l'' are all possible indexes of the condition of the first and second constraint appropriately), ''c<sub>i,k</sub> ≠ ¬c<sub>j,l</sub>''.
+
+* For every ''c<sub>i,k</sub>'', ''c<sub>j,l</sub>'' (where ''k'' and ''l'' are all possible indexes of the condition of the first and second constraint appropriately), ''c<sub>i,k</sub> ≠ ¬c<sub>j,l</sub>''.
A constraint ''C'' can evaluate to true if and only if all sub-constraints can evaluate to true. A sub-constraint ''c<sub>i</sub>'' can evaluate to true if the current set of flags does not include its negation (for every ''f<sub>j</sub>'', ''f<sub>j</sub> ≠ c<sub>i</sub>'').
@@ -234,8 +241,9 @@ In order to determine whether a condition ''C<sub>i</sub>'' can evaluate to true
In order to determine whether a condition ''C<sub>i</sub>'' always evaluates to true after applying a specific set of constraints, with initial flags ''F<sub>1</sub>'', determine the final set of flags ''F<sub>n</sub>'' and afterwards test if the constraint always evaluates to true with flags ''F<sub>n</sub>''.
In order to determine the final set of flags ''F<sub>n</sub>'', with specific set of constraints ''(C<sub>i</sub>, E<sub>i</sub>)'' and initial flags ''F<sub>1</sub>'':
-* for every flat constraint ''(C<sub>i</sub>, E<sub>i</sub>)'' in the set:
-** if the condition ''C<sub>i</sub>'' always evaluates to true, update ''F'' with ''E<sub>i</sub>'' (''F<sub>i+1</sub> = F<sub>i</sub> ∪ {E<sub>i</sub>} ∖ {¬E<sub>i</sub>}'').
+
+* For every flat constraint ''(C<sub>i</sub>, E<sub>i</sub>)'' in the set:
+** If the condition ''C<sub>i</sub>'' always evaluates to true, update ''F'' with ''E<sub>i</sub>'' (''F<sub>i+1</sub> = F<sub>i</sub> ∪ {E<sub>i</sub>} ∖ {¬E<sub>i</sub>}'').
==Rationale==
===Restrictions for allowed REQUIRED_USE syntax===