| // 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") |
| } |
| } |
| } |
| } |