You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: query_test.rs
    path of file: ./repos/tree-sitter/cli/src/tests
    
    the code of the file until where you have to start completion: use super::helpers::{
    allocations,
    fixtures::{get_language, get_test_language},
    query_helpers::{assert_query_matches, Match, Pattern},
    ITERATION_COUNT,
};
use crate::{
    generate::generate_parser_for_grammar,
    tests::helpers::query_helpers::{collect_captures, collect_matches},
};
use indoc::indoc;
use lazy_static::lazy_static;
use rand::{prelude::StdRng, SeedableRng};
use std::{env, fmt::Write};
use tree_sitter::{
    CaptureQuantifier, Language, Node, Parser, Point, Query, QueryCursor, QueryError,
    QueryErrorKind, QueryPredicate, QueryPredicateArg, QueryProper
    
fn test_query_matches_with_different_tokens_with_the_same_string_value() {
    allocations::record(|| {
        // In Rust, there are two '<' tokens: one for the binary operator,
        // and one with higher precedence for generics.
        let language = get_language("rust");
        let query = Query::new(
            &language,
            r#"
                "<" @less
                ">" @greater
                "#,
        )
        .unwrap();

        assert_query_matches(
            &language,
            &query,
            "const A: B<C> = d < e || f > g;",
            &[
                (0, vec![("less", "<")]),
                (1, vec![("greater", ">")]),
                (0, vec![("less", "<")]),
                (1, vec![("greater", ">")]),
            ],
        );
    });
}