{
  "tests": [
    {
      "name": "string data",
      "selector": "$[?length(@.a)>=2]",
      "document": [
        {
          "a": "ab"
        },
        {
          "a": "d"
        }
      ],
      "result": [
        {
          "a": "ab"
        }
      ],
      "result_paths": [
        "$[0]"
      ],
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "string data, unicode",
      "selector": "$[?length(@)==2]",
      "document": [
        "☺",
        "☺☺",
        "☺☺☺",
        "ж",
        "жж",
        "жжж",
        "磨",
        "阿美",
        "形声字"
      ],
      "result": [
        "☺☺",
        "жж",
        "阿美"
      ],
      "result_paths": [
        "$[1]",
        "$[4]",
        "$[7]"
      ],
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "array data",
      "selector": "$[?length(@.a)>=2]",
      "document": [
        {
          "a": [
            1,
            2,
            3
          ]
        },
        {
          "a": [
            1
          ]
        }
      ],
      "result": [
        {
          "a": [
            1,
            2,
            3
          ]
        }
      ],
      "result_paths": [
        "$[0]"
      ],
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "missing data",
      "selector": "$[?length(@.a)>=2]",
      "document": [
        {
          "d": "f"
        }
      ],
      "result": [],
      "result_paths": [],
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "number arg",
      "selector": "$[?length(1)>=2]",
      "document": [
        {
          "d": "f"
        }
      ],
      "result": [],
      "result_paths": [],
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "true arg",
      "selector": "$[?length(true)>=2]",
      "document": [
        {
          "d": "f"
        }
      ],
      "result": [],
      "result_paths": [],
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "false arg",
      "selector": "$[?length(false)>=2]",
      "document": [
        {
          "d": "f"
        }
      ],
      "result": [],
      "result_paths": [],
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "null arg",
      "selector": "$[?length(null)>=2]",
      "document": [
        {
          "d": "f"
        }
      ],
      "result": [],
      "result_paths": [],
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "result must be compared",
      "selector": "$[?length(@.a)]",
      "invalid_selector": true,
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "no params",
      "selector": "$[?length()==1]",
      "invalid_selector": true,
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "too many params",
      "selector": "$[?length(@.a,@.b)==1]",
      "invalid_selector": true,
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "non-singular query arg",
      "selector": "$[?length(@.*)<3]",
      "invalid_selector": true,
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "arg is a function expression",
      "selector": "$.values[?length(@.a)==length(value($..c))]",
      "document": {
        "c": "cd",
        "values": [
          {
            "a": "ab"
          },
          {
            "a": "d"
          }
        ]
      },
      "result": [
        {
          "a": "ab"
        }
      ],
      "result_paths": [
        "$['values'][0]"
      ],
      "tags": [
        "function",
        "length"
      ]
    },
    {
      "name": "arg is special nothing",
      "selector": "$[?length(value(@.a))>0]",
      "document": [
        {
          "a": "ab"
        },
        {
          "c": "d"
        },
        {
          "a": null
        }
      ],
      "result": [
        {
          "a": "ab"
        }
      ],
      "result_paths": [
        "$[0]"
      ],
      "tags": [
        "function",
        "length"
      ]
    }
  ]
}