1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
// Copyright ©2013 The Gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package mat
import "testing"
func leaksPanic(fn func()) (panicked bool) {
defer func() {
r := recover()
panicked = r != nil
}()
_ = Maybe(fn)
return
}
func TestMaybe(t *testing.T) {
t.Parallel()
for i, test := range []struct {
fn func()
panics bool
errors bool
}{
{
fn: func() {},
panics: false,
errors: false,
},
{
fn: func() { panic("panic") },
panics: true,
errors: false,
},
{
fn: func() { panic(Error{"panic"}) },
panics: false,
errors: true,
},
} {
panicked := leaksPanic(test.fn)
if panicked != test.panics {
t.Errorf("unexpected panic state for test %d: got: panicked=%t want: panicked=%t",
i, panicked, test.panics)
}
if test.errors {
err := Maybe(test.fn)
stack, ok := err.(ErrorStack)
if !ok {
t.Errorf("unexpected error type: got:%T want:%T", stack, ErrorStack{})
}
if stack.StackTrace == "" {
t.Error("expected non-empty stack trace")
}
}
}
}
|