mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 23:26:52 +08:00
57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
// 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) {
|
|
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")
|
|
}
|
|
}
|
|
}
|
|
}
|