﻿:: { s: s, b: b, r: r8, sr: r8*, sqr: r8?*, ssr: r8**, ssqr: r8?**, i: i8, si: i8*, sqi: i8?*, ssi: i8**, ssqi: i8?**, T: { R: r8, QR: r8?, I: i8, QI: i8? }* }

TTest.OneSample(sr)
TTest.OneSample(sqr)
TTest.OneSample(ssr)
TTest.OneSample(ssqr)
TTest.OneSample(sr, r)
TTest.OneSample(sqr, r)
TTest.OneSample(ssr, r)
TTest.OneSample(ssqr, r)
TTest.OneSample(sr, i)
TTest.OneSample(sqr, i)
TTest.OneSample(ssr, i)
TTest.OneSample(ssqr, i)
TTest.OneSample(si, i)
TTest.OneSample(sqi, i)
TTest.OneSample(ssi, i)
TTest.OneSample(ssqi, i)

TTest.TwoSample(sr, sr)
TTest.TwoSample(sr, ssr)
TTest.TwoSample(sr, ssqr)
TTest.TwoSample(si, sr)
TTest.TwoSample(sr, si)
TTest.TwoSample(sqr, sr)
TTest.TwoSample(sqr, ssr)
TTest.TwoSample(sqr, ssqr)
TTest.TwoSample(sqi, ssr)
TTest.TwoSample(ssr, sqi)
TTest.TwoSample(ssr, sr)
TTest.TwoSample(ssr, ssr)
TTest.TwoSample(ssr, ssqr)
TTest.TwoSample(ssi, ssqr)
TTest.TwoSample(ssr, ssqi)
TTest.TwoSample(ssqr, sr)
TTest.TwoSample(ssqr, ssr)
TTest.TwoSample(ssqr, ssqr)
TTest.TwoSample(ssqi, ssqr)
TTest.TwoSample(ssqr, ssqi)
TTest.TwoSample(sr, sqr)
TTest.TwoSample(sqr, sqr)
TTest.TwoSample(ssr, sqr)

TTest.TwoSample(sr, sqr, false)
TTest.TwoSample(sqr, sqr, equal_var: false)
TTest.TwoSample(sqi, sqr, equal_var: false)
TTest.TwoSample(sqr, sqi, equal_var: false)
TTest.TwoSample(ssr, sqr, false)
TTest.TwoSample(ssqr, sqr, false)
TTest.TwoSample(ssqi, sqr, false)
TTest.TwoSample(ssqr, sqi, false)
TTest.TwoSample(sr, sqr, true)
TTest.TwoSample(sqr, sqr, equal_var: true)
TTest.TwoSample(sqr, sqi, equal_var: true)
TTest.TwoSample(sqi, sqr, equal_var: true)
TTest.TwoSample(ssr, sqr, true)
TTest.TwoSample(ssqr, sqr, true)
TTest.TwoSample(ssqi, sqr, true)
TTest.TwoSample(ssqr, sqi, true)
TTest.TwoSample(ssqr, ssqr, true)
TTest.TwoSample(sr, ssqr, equal_var: false)
TTest.TwoSample(sr, sqr, b)
TTest.TwoSample(si, sqr, b)
TTest.TwoSample(sr, sqi, b)
TTest.TwoSample(sqr, sqr, b)
TTest.TwoSample(ssr, sqr, equal_var: b)
TTest.TwoSample(ssqr, sqr, b)

TTest.Paired(sr, sr)
TTest.Paired(ssr, sr)
TTest.Paired(ssr, Max(it), Max(it))
TTest.Paired(si, si)
TTest.Paired(ssi, si)
TTest.Paired(sr, it, it)
TTest.Paired(sqr, it, it)
TTest.Paired(T, R, R)
TTest.Paired(T, R, QR)
TTest.Paired(T, QR, R)
TTest.Paired(T, QR, QR)
TTest.Paired(T, I, I)
TTest.Paired(a: T, a.I, a.I)
TTest.Paired(T, I, QI)
TTest.Paired(T, QI, I + 1)
TTest.Paired(T, QI, QI)
TTest.Paired(T, I, R if R > 0.5 else null)
TTest.Paired(T, QI, R)

// Errors.

TTest.OneSample(r) // Error.
TTest.OneSample(r, r) // Error.
TTest.OneSample(i, r) // Error.
TTest.OneSample(b, r) // Error.
TTest.OneSample(sr, [<] r) // Error.
TTest.OneSample(x: sr, r) // Error.

TTest.TwoSample(r) // Error.
TTest.TwoSample(r, r) // Error.
TTest.TwoSample(sr) // Error.
TTest.TwoSample(ssr, r) // Error.
TTest.TwoSample(sr, [<] sr) // Error.
TTest.TwoSample(x: sr, y: sr) // Error.
TTest.TwoSample(sr, sr, r) // Error.
TTest.TwoSample(sr, sr, foo: b) // Error.
TTest.TwoSample(sr, sr, equalVar: b) // Error.
TTest.TwoSample(sr, sr, Equal_var: b) // Error.
TTest.TwoSample(sr, sr, welch: b) // Error. REVIEW: Should we allow multiple "valid" names?
TTest.TwoSample(sr, sr, { equal_var: b }) // Error.
TTest.TwoSample(sr, sr, "welch") // Error.

TTest.Paired(r, r) // Error.
TTest.Paired(ssr, it, it) // Error.
TTest.Paired(T, s, I) // Error.
TTest.Paired(T, s, s) // Error.
TTest.Paired(T, With(a: I, a), a) // Error.
TTest.Paired(sr, [<] sr) // Error.
