OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / mat / errors_test.go
diff --git a/vendor/gonum.org/v1/gonum/mat/errors_test.go b/vendor/gonum.org/v1/gonum/mat/errors_test.go
new file mode 100644 (file)
index 0000000..1a15d7f
--- /dev/null
@@ -0,0 +1,56 @@
+// 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")
+                       }
+               }
+       }
+}