private static void AssertParsesTo(string expected, string query)
        {
            // Verify Parse
            IExpression expression = ExpressionParser.ParseExpression(query);
            string      actual     = expression.ToString();

            Assert.Equal(expected, actual);

            // Verify Expression.ToString() value parses back to itself correctly
            expression = ExpressionParser.ParseExpression(actual);
            Assert.Equal(actual, expression.ToString());
        }
        private static void Run <T>(int expectedCount, string query, IList <T> values, Func <TermExpression, IExpressionEvaluator <T> > converter)
        {
            // Parse the Query
            IExpression expression = ExpressionParser.ParseExpression(query);

            // Build an Evaluator against the int array
            IExpressionEvaluator <T> evaluator = expression.ToEvaluator <T>(converter);

            // Ask for matches from the array
            BitArray matches = new BitArray(values.Count);

            evaluator.Evaluate(values, matches);

            // Verify the match count is correct
            Assert.Equal(expectedCount, matches.TrueCount());
        }
 private void AssertThrows(string query)
 {
     Assert.Throws <QueryParseException>(() => ExpressionParser.ParseExpression(query));
 }