[
	{
		"description": "a schema given for items",
		"schema": {
			"items": {
				"type": "integer"
			}
		},
		"tests": [
			{
				"description": "valid items",
				"data": [
					1,
					2,
					3
				],
				"valid": true
			},
			{
				"description": "wrong type of items",
				"data": [
					1,
					"x"
				],
				"valid": false
			},
			{
				"description": "ignores non-arrays",
				"data": {
					"foo": "bar"
				},
				"valid": true
			},
			{
				"description": "JavaScript pseudo-array is valid",
				"data": {
					"0": "invalid",
					"length": 1
				},
				"valid": true
			}
		]
	},
	{
		"description": "an array of schemas for items",
		"schema": {
			"items": [
				{
					"type": "integer"
				},
				{
					"type": "string"
				}
			]
		},
		"tests": [
			{
				"description": "correct types",
				"data": [
					1,
					"foo"
				],
				"valid": true
			},
			{
				"description": "wrong types",
				"data": [
					"foo",
					1
				],
				"valid": false
			},
			{
				"description": "incomplete array of items",
				"data": [
					1
				],
				"valid": true,
				"skip": {
					"v2": "5 errors in empty disjunction:\nconflicting values [1] and {...} (mismatched types list and struct):\n    generated.cue:2:1\n    generated.cue:2:54\n    instance.json:1:1\nconflicting values bool and [1] (mismatched types bool and list):\n    generated.cue:2:8\n    instance.json:1:1\nconflicting values null and [1] (mismatched types null and list):\n    generated.cue:2:1\n    instance.json:1:1\nconflicting values number and [1] (mismatched types number and list):\n    generated.cue:2:15\n    instance.json:1:1\nconflicting values string and [1] (mismatched types string and list):\n    generated.cue:2:24\n    instance.json:1:1\n",
					"v3": "6 errors in empty disjunction:\nconflicting values [1] and bool (mismatched types list and bool):\n    generated.cue:2:8\n    instance.json:1:1\nconflicting values [1] and null (mismatched types list and null):\n    generated.cue:2:1\n    instance.json:1:1\nconflicting values [1] and number (mismatched types list and number):\n    generated.cue:2:15\n    instance.json:1:1\nconflicting values [1] and string (mismatched types list and string):\n    generated.cue:2:24\n    instance.json:1:1\nconflicting values [1] and {...} (mismatched types list and struct):\n    generated.cue:2:54\n    instance.json:1:1\nincompatible list lengths (1 and 3):\n    generated.cue:2:33\n"
				}
			},
			{
				"description": "array with additional items",
				"data": [
					1,
					"foo",
					true
				],
				"valid": true
			},
			{
				"description": "empty array",
				"data": [],
				"valid": true,
				"skip": {
					"v2": "5 errors in empty disjunction:\nconflicting values [] and {...} (mismatched types list and struct):\n    generated.cue:2:1\n    generated.cue:2:54\n    instance.json:1:1\nconflicting values bool and [] (mismatched types bool and list):\n    generated.cue:2:8\n    instance.json:1:1\nconflicting values null and [] (mismatched types null and list):\n    generated.cue:2:1\n    instance.json:1:1\nconflicting values number and [] (mismatched types number and list):\n    generated.cue:2:15\n    instance.json:1:1\nconflicting values string and [] (mismatched types string and list):\n    generated.cue:2:24\n    instance.json:1:1\n",
					"v3": "6 errors in empty disjunction:\nconflicting values [] and bool (mismatched types list and bool):\n    generated.cue:2:8\n    instance.json:1:1\nconflicting values [] and null (mismatched types list and null):\n    generated.cue:2:1\n    instance.json:1:1\nconflicting values [] and number (mismatched types list and number):\n    generated.cue:2:15\n    instance.json:1:1\nconflicting values [] and string (mismatched types list and string):\n    generated.cue:2:24\n    instance.json:1:1\nconflicting values [] and {...} (mismatched types list and struct):\n    generated.cue:2:54\n    instance.json:1:1\nincompatible list lengths (0 and 3):\n    generated.cue:2:33\n"
				}
			},
			{
				"description": "JavaScript pseudo-array is valid",
				"data": {
					"0": "invalid",
					"1": "valid",
					"length": 2
				},
				"valid": true
			}
		]
	},
	{
		"description": "items and subitems",
		"schema": {
			"definitions": {
				"item": {
					"type": "array",
					"additionalItems": false,
					"items": [
						{
							"$ref": "#/definitions/sub-item"
						},
						{
							"$ref": "#/definitions/sub-item"
						}
					]
				},
				"sub-item": {
					"type": "object",
					"required": [
						"foo"
					]
				}
			},
			"type": "array",
			"additionalItems": false,
			"items": [
				{
					"$ref": "#/definitions/item"
				},
				{
					"$ref": "#/definitions/item"
				},
				{
					"$ref": "#/definitions/item"
				}
			]
		},
		"tests": [
			{
				"description": "valid items",
				"data": [
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					]
				],
				"valid": true
			},
			{
				"description": "too many items",
				"data": [
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					]
				],
				"valid": false
			},
			{
				"description": "too many sub-items",
				"data": [
					[
						{
							"foo": null
						},
						{
							"foo": null
						},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					]
				],
				"valid": false
			},
			{
				"description": "wrong item",
				"data": [
					{
						"foo": null
					},
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					]
				],
				"valid": false
			},
			{
				"description": "wrong sub-item",
				"data": [
					[
						{},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						},
						{
							"foo": null
						}
					]
				],
				"valid": false
			},
			{
				"description": "fewer items is valid",
				"data": [
					[
						{
							"foo": null
						}
					],
					[
						{
							"foo": null
						}
					]
				],
				"valid": true,
				"skip": {
					"v2": "incompatible list lengths (2 and 3)\n0: incompatible list lengths (1 and 2)\n1: incompatible list lengths (1 and 2)\n",
					"v3": "incompatible list lengths (2 and 3):\n    generated.cue:2:1\n0: incompatible list lengths (1 and 2):\n    generated.cue:9:8\n"
				}
			}
		]
	},
	{
		"description": "nested items",
		"schema": {
			"type": "array",
			"items": {
				"type": "array",
				"items": {
					"type": "array",
					"items": {
						"type": "array",
						"items": {
							"type": "number"
						}
					}
				}
			}
		},
		"tests": [
			{
				"description": "valid nested array",
				"data": [
					[
						[
							[
								1
							]
						],
						[
							[
								2
							],
							[
								3
							]
						]
					],
					[
						[
							[
								4
							],
							[
								5
							],
							[
								6
							]
						]
					]
				],
				"valid": true
			},
			{
				"description": "nested array with invalid type",
				"data": [
					[
						[
							[
								"1"
							]
						],
						[
							[
								2
							],
							[
								3
							]
						]
					],
					[
						[
							[
								4
							],
							[
								5
							],
							[
								6
							]
						]
					]
				],
				"valid": false
			},
			{
				"description": "not deep enough",
				"data": [
					[
						[
							1
						],
						[
							2
						],
						[
							3
						]
					],
					[
						[
							4
						],
						[
							5
						],
						[
							6
						]
					]
				],
				"valid": false
			}
		]
	},
	{
		"description": "items with null instance elements",
		"schema": {
			"items": {
				"type": "null"
			}
		},
		"tests": [
			{
				"description": "allows null elements",
				"data": [
					null
				],
				"valid": true
			}
		]
	},
	{
		"description": "array-form items with null instance elements",
		"schema": {
			"items": [
				{
					"type": "null"
				}
			]
		},
		"tests": [
			{
				"description": "allows null elements",
				"data": [
					null
				],
				"valid": true
			}
		]
	}
]
