const QUERY = [
    '<P>',
    '-> <P>',
    'a<"P">',
    '"P" "P"',
    'P "P"',
    '"p" p',
    '"const": p',
    "a<:a>",
    "a<::a>",
    "((a))",
    "(p -> p",
    "::a::b",
    "a::::b",
    "a::b::",
    ":a",
    "a b:",
    "a (b:",
    "_:",
    "a-bb",
    "a>bb",
    "ab'",
    "a->",
    '"p" <a>',
    '"p" a<a>',
    "a,<",
    "aaaaa<>b",
    "fn:aaaaa<>b",
    "->a<>b",
    "a<->",
    "a:: a",
    "a ::a",
    "a<a>:",
    "a<>:",
    "a,:",
    "  a<>  :",
    "mod : :",
    "a!a",
    "a!!",
];

const PARSED = [
    {
        elems: [],
        foundElems: 0,
        original: "<P>",
        returned: [],
        typeFilter: -1,
        userQuery: "<p>",
        error: "Found generics without a path",
    },
    {
        elems: [],
        foundElems: 0,
        original: "-> <P>",
        returned: [],
        typeFilter: -1,
        userQuery: "-> <p>",
        error: "Found generics without a path",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a<\"P\">",
        returned: [],
        typeFilter: -1,
        userQuery: "a<\"p\">",
        error: "`\"` cannot be used in generics",
    },
    {
        elems: [],
        foundElems: 0,
        original: "\"P\" \"P\"",
        returned: [],
        typeFilter: -1,
        userQuery: "\"p\" \"p\"",
        error: "Cannot have more than one literal search element",
    },
    {
        elems: [],
        foundElems: 0,
        original: "P \"P\"",
        returned: [],
        typeFilter: -1,
        userQuery: "p \"p\"",
        error: "Cannot use literal search when there is more than one element",
    },
    {
        elems: [],
        foundElems: 0,
        original: "\"p\" p",
        returned: [],
        typeFilter: -1,
        userQuery: "\"p\" p",
        error: "You cannot have more than one element if you use quotes",
    },
    {
        elems: [],
        foundElems: 0,
        original: "\"const\": p",
        returned: [],
        typeFilter: -1,
        userQuery: "\"const\": p",
        error: "You cannot use quotes on type filter",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a<:a>",
        returned: [],
        typeFilter: -1,
        userQuery: "a<:a>",
        error: "Unexpected `:` after `<`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a<::a>",
        returned: [],
        typeFilter: -1,
        userQuery: "a<::a>",
        error: "Unexpected `::`: paths cannot start with `::`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "((a))",
        returned: [],
        typeFilter: -1,
        userQuery: "((a))",
        error: "Unexpected `(`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "(p -> p",
        returned: [],
        typeFilter: -1,
        userQuery: "(p -> p",
        error: "Unexpected `(`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "::a::b",
        returned: [],
        typeFilter: -1,
        userQuery: "::a::b",
        error: "Paths cannot start with `::`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a::::b",
        returned: [],
        typeFilter: -1,
        userQuery: "a::::b",
        error: "Unexpected `::::`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a::b::",
        returned: [],
        typeFilter: -1,
        userQuery: "a::b::",
        error: "Paths cannot end with `::`",
    },
    {
        elems: [],
        foundElems: 0,
        original: ":a",
        returned: [],
        typeFilter: -1,
        userQuery: ":a",
        error: "Expected type filter before `:`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a b:",
        returned: [],
        typeFilter: -1,
        userQuery: "a b:",
        error: "Unexpected `:`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a (b:",
        returned: [],
        typeFilter: -1,
        userQuery: "a (b:",
        error: "Unexpected `(`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "_:",
        returned: [],
        typeFilter: -1,
        userQuery: "_:",
        error: "Unknown type filter `_`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a-bb",
        returned: [],
        typeFilter: -1,
        userQuery: "a-bb",
        error: "Unexpected `-` (did you mean `->`?)",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a>bb",
        returned: [],
        typeFilter: -1,
        userQuery: "a>bb",
        error: "Unexpected `>` (did you mean `->`?)",
    },
    {
        elems: [],
        foundElems: 0,
        original: "ab'",
        returned: [],
        typeFilter: -1,
        userQuery: "ab'",
        error: "Unexpected `'`",
    },
    {
        elems: [],
        foundElems: 0,
        original: "a->",
        returned: [],
        typeFilter: -1,
        userQuery: "a->",
        error: "Expected at least one item after `->`",
    },
    {
        elems: [],
        foundElems: 0,
        original: '"p" <a>',
        returned: [],
        typeFilter: -1,
        userQuery: '"p" <a>',
        error: "Found generics without a path",
    },
    {
        elems: [],
        foundElems: 0,
        original: '"p" a<a>',
        returned: [],
        typeFilter: -1,
        userQuery: '"p" a<a>',
        error: "You cannot have more than one element if you use quotes",
    },
    {
        elems: [],
        foundElems: 0,
        original: 'a,<',
        returned: [],
        typeFilter: -1,
        userQuery: 'a,<',
        error: 'Found generics without a path',
    },
    {
        elems: [],
        foundElems: 0,
        original: 'aaaaa<>b',
        returned: [],
        typeFilter: -1,
        userQuery: 'aaaaa<>b',
        error: 'Expected `,`, ` `, `:` or `->`, found `b`',
    },
    {
        elems: [],
        foundElems: 0,
        original: 'fn:aaaaa<>b',
        returned: [],
        typeFilter: -1,
        userQuery: 'fn:aaaaa<>b',
        error: 'Expected `,`, ` ` or `->`, found `b`',
    },
    {
        elems: [],
        foundElems: 0,
        original: '->a<>b',
        returned: [],
        typeFilter: -1,
        userQuery: '->a<>b',
        error: 'Expected `,` or ` `, found `b`',
    },
    {
        elems: [],
        foundElems: 0,
        original: 'a<->',
        returned: [],
        typeFilter: -1,
        userQuery: 'a<->',
        error: 'Unexpected `-` after `<`',
    },
    {
        elems: [],
        foundElems: 0,
        original: 'a:: a',
        returned: [],
        typeFilter: -1,
        userQuery: 'a:: a',
        error: 'Paths cannot end with `::`',
    },
    {
        elems: [],
        foundElems: 0,
        original: 'a ::a',
        returned: [],
        typeFilter: -1,
        userQuery: 'a ::a',
        error: 'Paths cannot start with `::`',
    },
    {
        elems: [],
        foundElems: 0,
        original: "a<a>:",
        returned: [],
        typeFilter: -1,
        userQuery: "a<a>:",
        error: 'Unexpected `:`',
    },
    {
        elems: [],
        foundElems: 0,
        original: "a<>:",
        returned: [],
        typeFilter: -1,
        userQuery: "a<>:",
        error: 'Unexpected `<` in type filter',
    },
    {
        elems: [],
        foundElems: 0,
        original: "a,:",
        returned: [],
        typeFilter: -1,
        userQuery: "a,:",
        error: 'Unexpected `,` in type filter',
    },
    {
        elems: [],
        foundElems: 0,
        original: "a<>  :",
        returned: [],
        typeFilter: -1,
        userQuery: "a<>  :",
        error: 'Unexpected `<` in type filter',
    },
    {
        elems: [],
        foundElems: 0,
        original: "mod : :",
        returned: [],
        typeFilter: -1,
        userQuery: "mod : :",
        error: 'Unexpected `:`',
    },
    {
        elems: [],
        foundElems: 0,
        original: "a!a",
        returned: [],
        typeFilter: -1,
        userQuery: "a!a",
        error: '`!` can only be at the end of an ident',
    },
    {
        elems: [],
        foundElems: 0,
        original: "a!!",
        returned: [],
        typeFilter: -1,
        userQuery: "a!!",
        error: 'Cannot have more than one `!` in an ident',
    },
];