func TestRomanNumeralsToUint(t *testing.T) { shouldAssert := []struct { input string msg string }{ {input: "", msg: "empty string is invalid"}, {input: "JTXIV", msg: "unrecognised sequence: JTXIV"}, {input: "XIJI", msg: "unrecognised sequence: JI"}, {input: "DIXX", msg: "sequence \"X\" followed smaller sequence \"IX\""}, } for _, test := range shouldAssert { func() { defer assert.Panics(t, "romanNumeralsToUint(\""+test.input+"\")", test.msg) _ = romanNumeralsToUint(test.input) }() } valid := []struct { input string result uint }{ {input: "III", result: 3}, {input: "V", result: 5}, {input: "X", result: 10}, {input: "XIX", result: 19}, {input: "LV", result: 55}, {input: "DCLXVI", result: 666}, {input: "MCMXCVII", result: 1997}, } for _, test := range valid { result := romanNumeralsToUint(test.input) assert.Equal(t, "romanNumeralsToUint(\""+test.input+"\")", test.result, result) } }
func TestOpenOrDie(t *testing.T) { // Should work. _ = openOrDie(os.DevNull) path := "/qwertyuiop/asdfghjkl" defer assert.Panics(t, "openOrDie() should panic", path) _ = openOrDie(path) }
func TestReadLinesFromFile(t *testing.T) { fh := bytes.NewBufferString("1\n2 3\n") expected := []string{"1", "2 3"} actual := readLinesFromFile(fh) assert.Equal(t, "readLinesFromFile bad result", expected, actual) fh2 := iotest.TimeoutReader(bytes.NewBufferString("1\n2 3\n")) defer assert.Panics(t, "readLinesFromFile() should panic on failure", "Reading lines failed") _ = readLinesFromFile(fh2) }
func TestParseTriangle(t *testing.T) { fh := bytes.NewBufferString("1\n2 3\n") triangle := parseTriangle(fh) expected := [][]int{ []int{1}, []int{2, 3}, } assert.Equal(t, "parseTriangle()", expected, triangle) defer assert.Panics(t, "parseTriangle() should panic", "invalid syntax") fh = bytes.NewBufferString("x\n") triangle = parseTriangle(fh) }
func TestFactorialInt64(t *testing.T) { tests := []struct { n, e int64 }{ {1, 1}, {4, 24}, {7, 5040}, } for _, test := range tests { assert.Equal(t, fmt.Sprintf("factorialInt64(%v)", test.n), test.e, factorialInt64(test.n)) } defer assert.Panics(t, "factorialInt64 should have called panic", "n too big") _ = factorialInt64(25) }
func TestReadIntsFromCSVFile(t *testing.T) { tests := []struct { csv, err string expected [][]int64 }{ {csv: "1,7,42", expected: [][]int64{{1, 7, 42}}}, {csv: "1,7,42,qwerty", err: "strconv.ParseInt"}, {csv: "1,7,42,qwe\"rty", err: "non-quoted-field"}, } for _, test := range tests { func() { desc := fmt.Sprintf("readIntsFromCSVFile(%q)", test.csv) if test.err != "" { defer assert.Panics(t, desc, test.err) } actual := readIntsFromCSVFile(strings.NewReader(test.csv)) // This will be skipped for the error cases. assert.Equal(t, desc, test.expected, actual) }() } }
func TestMarkovMatrixInvarientCheck(t *testing.T) { // The code should work properly with a 1x1 array, so keep it simple. tests := []struct { err string rat *big.Rat }{ {"", big.NewRat(1, 1)}, {"is negative", big.NewRat(-1, 1)}, {"sum of row", big.NewRat(2, 1)}, } for _, test := range tests { func() { matrix := [][]*big.Rat{{test.rat}} if test.err == "" { MarkovMatrixInvarientCheck(matrix, -1) } else { defer assert.Panics(t, "MarkovMatrixInvarientCheck should have called panic()", test.err) MarkovMatrixInvarientCheck(matrix, -1) } }() } }
func TestUintToRomanNumerals(t *testing.T) { func() { defer assert.Panics(t, "uintToRomanNumerals(0)", "0 is invalid") _ = uintToRomanNumerals(0) }() valid := []struct { input uint result string }{ {input: 3, result: "III"}, {input: 5, result: "V"}, {input: 10, result: "X"}, {input: 19, result: "XIX"}, {input: 55, result: "LV"}, {input: 666, result: "DCLXVI"}, {input: 1997, result: "MCMXCVII"}, } for _, test := range valid { result := uintToRomanNumerals(test.input) msg := "uintToRomanNumerals(" + strconv.FormatUint(uint64(test.input), 10) + ")" assert.Equal(t, msg, test.result, result) } }
func TestFirstBiggerElement(t *testing.T) { l := []int{1, 3, 5, 7, 11} assert.Equal(t, "firstBiggerElement works", 5, firstBiggerElement(4, l)) defer assert.Panics(t, "firstBiggerElement should have called panic", "bigger than") _ = firstBiggerElement(13, l) }