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