github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/image/bmp/writer_test.go (about) 1 // Copyright 2013 The Go 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 bmp 6 7 import ( 8 "bytes" 9 "fmt" 10 "image" 11 "io/ioutil" 12 "os" 13 "testing" 14 "time" 15 ) 16 17 func openImage(filename string) (image.Image, error) { 18 f, err := os.Open(testdataDir + filename) 19 if err != nil { 20 return nil, err 21 } 22 defer f.Close() 23 return Decode(f) 24 } 25 26 func TestEncode(t *testing.T) { 27 img0, err := openImage("video-001.bmp") 28 if err != nil { 29 t.Fatal(err) 30 } 31 32 buf := new(bytes.Buffer) 33 err = Encode(buf, img0) 34 if err != nil { 35 t.Fatal(err) 36 } 37 38 img1, err := Decode(buf) 39 if err != nil { 40 t.Fatal(err) 41 } 42 43 compare(t, img0, img1) 44 } 45 46 // TestZeroWidthVeryLargeHeight tests that encoding and decoding a degenerate 47 // image with zero width but over one billion pixels in height is faster than 48 // naively calling an io.Reader or io.Writer method once per row. 49 func TestZeroWidthVeryLargeHeight(t *testing.T) { 50 c := make(chan error, 1) 51 go func() { 52 b := image.Rect(0, 0, 0, 0x3fffffff) 53 var buf bytes.Buffer 54 if err := Encode(&buf, image.NewRGBA(b)); err != nil { 55 c <- err 56 return 57 } 58 m, err := Decode(&buf) 59 if err != nil { 60 c <- err 61 return 62 } 63 if got := m.Bounds(); got != b { 64 c <- fmt.Errorf("bounds: got %v, want %v", got, b) 65 return 66 } 67 c <- nil 68 }() 69 select { 70 case err := <-c: 71 if err != nil { 72 t.Fatal(err) 73 } 74 case <-time.After(3 * time.Second): 75 t.Fatalf("timed out") 76 } 77 } 78 79 // BenchmarkEncode benchmarks the encoding of an image. 80 func BenchmarkEncode(b *testing.B) { 81 img, err := openImage("video-001.bmp") 82 if err != nil { 83 b.Fatal(err) 84 } 85 s := img.Bounds().Size() 86 b.SetBytes(int64(s.X * s.Y * 4)) 87 b.ResetTimer() 88 for i := 0; i < b.N; i++ { 89 Encode(ioutil.Discard, img) 90 } 91 }