package tests_test

import (
	"testing"

	"git.urbach.dev/cli/q/src/config"
)

var tests = []run{
	{"empty", "", "", 0},
	{"assert", "", "", 1},
	{"binary", "", "", 0},
	{"octal", "", "", 0},
	{"hexadecimal", "", "", 0},
	{"rune", "", "", 0},
	{"variables", "", "", 0},
	{"reassign", "", "", 0},
	{"reuse", "", "", 0},
	{"return", "", "", 0},
	{"add", "", "", 0},
	{"sub", "", "", 0},
	{"mul", "", "", 0},
	{"div", "", "", 0},
	{"sum", "", "", 0},
	{"square-sum", "", "", 0},
	{"math", "", "", 0},
	{"bitwise-and", "", "", 0},
	{"bitwise-or", "", "", 0},
	{"bitwise-xor", "", "", 0},
	{"unsigned", "", "", 0},
	{"shift", "", "", 0},
	{"shift-register", "", "", 0},
	{"shift-sign", "", "", 0},
	{"modulo", "", "", 0},
	{"negative", "", "", 0},
	{"negation", "", "", 0},
	{"not", "", "", 0},
	{"assign", "", "", 0},
	{"limits", "", "127\n-128\n32767\n-32768\n2147483647\n-2147483648\n9223372036854775807\n-9223372036854775808\n", 0},
	{"overflow", "", "", 0},
	{"underflow", "", "", 0},
	{"param", "", "", 0},
	{"param-multi", "", "", 0},
	{"param-order", "", "", 0},
	{"branch", "", "", 0},
	{"branch-and", "", "", 0},
	{"branch-or", "", "", 0},
	{"branch-both", "", "", 0},
	{"jump-near", "", "", 0},
	{"switch", "", "", 0},
	{"phi", "", "", 0},
	{"phi-simple", "", "", 0},
	{"phi-advanced", "", "", 0},
	{"phi-reassign", "", "", 0},
	{"phi-reassign-output", "", "12345", 0},
	{"hello", "", "Hello\nHello\nHello\n", 0},
	{"escape", "", "a\tb\nc\td\n", 0},
	{"script", "", "Hello\n", 0},
	{"loop", "", "..........", 0},
	{"loop-stacked", "", "..........", 0},
	{"loop-count", "", "", 0},
	{"loop-write", "", "..........", 0},
	{"loop-optimize-single-iterator", "", "", 0},
	{"loop-limit", "", "", 0},
	{"loop-limit-dynamic", "", "", 0},
	{"loop-keepalive-outside", "", "", 0},
	{"loop-keepalive-inside", "", "", 0},
	{"loop-copy-from", "", "", 0},
	{"loop-copy-until", "", "", 0},
	{"loop-modify-struct", "", "12345", 0},
	{"loop-infinite-lifetime", "", "", -1},
	{"loop-next", "", "0\n2\n4\n6\n8\n", 0},
	{"factorial", "", "", 0},
	{"fibonacci", "", "", 0},
	{"memory", "", "Hello\n", 0},
	{"out-of-memory", "", "", 1},
	{"index-static", "", "", 0},
	{"index-dynamic", "", "", 0},
	{"struct-by-reference", "", "", 0},
	{"struct-by-value", "", "", 0},
	{"struct-return-reference", "", "", 0},
	{"struct-return-value", "", "", 0},
	{"struct-copy", "", "", 0},
	{"struct-pointer-deref", "", "", 0},
	{"struct-modify-branch", "", "", 0},
	{"string-by-value", "", "Hello\n", 0},
	{"circle", "", "", 0},
	{"circle-by-reference", "", "", 0},
	{"color-8", "", "", 0},
	{"color-16", "", "", 0},
	{"color-32", "", "", 0},
	{"color-64", "", "", 0},
	{"return-2", "", "", 0},
	{"return-3", "", "", 0},
	{"return-4", "", "", 0},
	{"return-string", "", "Hello\n", 0},
	{"multi-define-assign", "", "", 0},
	{"ignore-error", "", "", 0},
	{"ignore-unused-field", "", "", 0},
	{"slice", "", "Hello World", 0},
	{"file-read", "", "", 0},
	{"strings-equal", "", "", 0},
	{"strings-index", "", "", 0},
	{"strings-cut", "", "", 0},
	{"strings-trim", "", "", 0},
	{"strings-prefix", "", "", 0},
	{"strings-suffix", "", "", 0},
	{"strings-concat", "", "", 0},
	{"reorder-add", "", "", 0},
	{"free-registers", "", "", 0},
	{"overload", "", "", 0},
	{"resource", "", "", 0},
	{"function-pointer", "", "", 0},
	{"type-cast", "", "", 0},
	{"array-int", "", "", 0},
	{"array-int-custom", "", "", 0},
	{"array-int-parameter", "", "", 0},
	{"array-int-fixed-offset", "", "127\n128\n4095\n4096\n", 0},
	{"array-struct", "", "", 0},
	{"array-struct-copy", "", "", 0},
	{"array-struct-copy-call", "", "", 0},
	{"array-string", "", "HelloWorld", 0},
	{"pointer-to-pointer", "", "", 0},
	{"stack-pointer", "", "", 0},
	{"global", "", "", 0},
}

func TestTests(t *testing.T) {
	for _, test := range tests {
		build := config.New(test.Name + ".q")
		build.Lint(false)
		test.Run(t, build)
	}
}