diff --git a/multi-pathogen-sampling.R b/multi-pathogen-sampling.R index c1ca4a5b87914c1fafe98f301be637803f14966c..11fc350292d9b0f69e79730fe1c5cc5e947de472 100644 --- a/multi-pathogen-sampling.R +++ b/multi-pathogen-sampling.R @@ -77,7 +77,7 @@ matches <- function(requirement, action) { equivalent_matrices <- FALSE - if (action$pest == "Xanthomonas citri" || action$pest == "Aleurocanthus citriperdus") { + if (!same_matrix && (action$pest == "Xanthomonas citri" || action$pest == "Aleurocanthus citriperdus")) { if (action$matrix_ == "shoots" || action$matrix_ == "fruits") { if (requirement$matrix_ == "shoots" || requirement$matrix_ == "fruits") { equivalent_matrices <- TRUE @@ -87,7 +87,7 @@ matches <- function(requirement, action) { reusable_sample <- FALSE - if (action$matrix_ == "shoots" || action$matrix_ == "fruits") { + if (!same_pest && (action$matrix_ == "shoots" || action$matrix_ == "fruits")) { if (action$pest == "Trioza erytreae" || action$pest == "Citrus leprosis") { if (requirement$pest == "Trioza erytreae" || requirement$pest == "Citrus leprosis") { reusable_sample <- TRUE diff --git a/src/main.rs b/src/main.rs index bcaafbfbd6a1f848baaa15e4363a257945dd9f82..7a436133c57be6374b08cf4dc1cbf1f1b3164580 100644 --- a/src/main.rs +++ b/src/main.rs @@ -252,8 +252,8 @@ fn matches( let same_matrix = requirement.matrix == action.matrix; // Does the pest implied by the action have equivalent matrices matching the requirement? - let equivalent_matrices = - problem + let equivalent_matrices = !same_matrix + && problem .equivalent_matrices .iter() .any(|equivalent_matrices| { @@ -263,11 +263,12 @@ fn matches( }); // Is the matrix implied by the action resuable for sampling a pest matching the requirement? - let reusable_sample = problem.reusable_samples.iter().any(|reusable_sample| { - reusable_sample.matrix.contains(action.matrix.0) - && reusable_sample.pests.contains(action.pest.0) - && reusable_sample.pests.contains(requirement.pest.0) - }); + let reusable_sample = !same_pest + && problem.reusable_samples.iter().any(|reusable_sample| { + reusable_sample.matrix.contains(action.matrix.0) + && reusable_sample.pests.contains(action.pest.0) + && reusable_sample.pests.contains(requirement.pest.0) + }); let matches = (same_pest || reusable_sample) && (same_matrix || equivalent_matrices);