blob: 42f93036cffcdcbed4cd358cd167892a3cf14d7b [file] [log] [blame]
// 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")
}
}
}
}