public HashSet <int> Process(string input, int numberOfDocs) { var wordsWithPlusSign = RegexOperator.AssortTheWords(input, PLUS_REGEX, 2); var wordsWithMinusSign = RegexOperator.AssortTheWords(input, MINUS_REGEX, 2); var noneSignWords = RegexOperator.AssortTheWords(input, NONE_SIGN_REGEX, 2); var and = new And(); var or = new Or(); var sub = new Subtract(); var beforeMinus = and.Apply(and.ApplyOnAll(noneSignWords, tokens), or.ApplyOnAll(wordsWithPlusSign, tokens)); if (noneSignWords.Count == 0 && wordsWithPlusSign.Count == 0) { for (int i = 0; i < numberOfDocs; i++) { beforeMinus.Add(i); } } return(sub.Apply(beforeMinus, or.ApplyOnAll(wordsWithMinusSign, tokens))); }
public void SimpleApplyOnAllTestForOrOperation() { initTokens(); var words = new List <string> { "sky", "phone", "bye", "five" }; var expectedValue = new HashSet <int> { 1, 4, 6, 9, 11, 3, 8, 2, 7 }; var operation = new Or(); var actualValue = operation.ApplyOnAll(words, tokens); Assert.Equal(expectedValue, actualValue); }