170 lines
3.2 KiB
Go
170 lines
3.2 KiB
Go
|
// Copyright 2011 The Graphics-Go 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 graphics
|
||
|
|
||
|
import (
|
||
|
"code.google.com/p/graphics-go/graphics/graphicstest"
|
||
|
"image"
|
||
|
"math"
|
||
|
"testing"
|
||
|
|
||
|
_ "image/png"
|
||
|
)
|
||
|
|
||
|
var rotateOneColorTests = []transformOneColorTest{
|
||
|
{
|
||
|
"onepixel-onequarter", 1, 1, 1, 1,
|
||
|
&RotateOptions{math.Pi / 2},
|
||
|
[]uint8{0xff},
|
||
|
[]uint8{0xff},
|
||
|
},
|
||
|
{
|
||
|
"onepixel-partial", 1, 1, 1, 1,
|
||
|
&RotateOptions{math.Pi * 2.0 / 3.0},
|
||
|
[]uint8{0xff},
|
||
|
[]uint8{0xff},
|
||
|
},
|
||
|
{
|
||
|
"onepixel-complete", 1, 1, 1, 1,
|
||
|
&RotateOptions{2 * math.Pi},
|
||
|
[]uint8{0xff},
|
||
|
[]uint8{0xff},
|
||
|
},
|
||
|
{
|
||
|
"even-onequarter", 2, 2, 2, 2,
|
||
|
&RotateOptions{math.Pi / 2.0},
|
||
|
[]uint8{
|
||
|
0xff, 0x00,
|
||
|
0x00, 0xff,
|
||
|
},
|
||
|
[]uint8{
|
||
|
0x00, 0xff,
|
||
|
0xff, 0x00,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
"even-complete", 2, 2, 2, 2,
|
||
|
&RotateOptions{2.0 * math.Pi},
|
||
|
[]uint8{
|
||
|
0xff, 0x00,
|
||
|
0x00, 0xff,
|
||
|
},
|
||
|
[]uint8{
|
||
|
0xff, 0x00,
|
||
|
0x00, 0xff,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
"line-partial", 3, 3, 3, 3,
|
||
|
&RotateOptions{math.Pi * 1.0 / 3.0},
|
||
|
[]uint8{
|
||
|
0x00, 0x00, 0x00,
|
||
|
0xff, 0xff, 0xff,
|
||
|
0x00, 0x00, 0x00,
|
||
|
},
|
||
|
[]uint8{
|
||
|
0xa2, 0x80, 0x00,
|
||
|
0x22, 0xff, 0x22,
|
||
|
0x00, 0x80, 0xa2,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
"line-offset-partial", 3, 3, 3, 3,
|
||
|
&RotateOptions{math.Pi * 3 / 2},
|
||
|
[]uint8{
|
||
|
0x00, 0x00, 0x00,
|
||
|
0x00, 0xff, 0xff,
|
||
|
0x00, 0x00, 0x00,
|
||
|
},
|
||
|
[]uint8{
|
||
|
0x00, 0xff, 0x00,
|
||
|
0x00, 0xff, 0x00,
|
||
|
0x00, 0x00, 0x00,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
"dot-partial", 4, 4, 4, 4,
|
||
|
&RotateOptions{math.Pi},
|
||
|
[]uint8{
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
0x00, 0xff, 0x00, 0x00,
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
},
|
||
|
[]uint8{
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
0x00, 0x00, 0xff, 0x00,
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
func TestRotateOneColor(t *testing.T) {
|
||
|
for _, oc := range rotateOneColorTests {
|
||
|
src := oc.newSrc()
|
||
|
dst := oc.newDst()
|
||
|
|
||
|
if err := Rotate(dst, src, oc.opt.(*RotateOptions)); err != nil {
|
||
|
t.Errorf("rotate %s: %v", oc.desc, err)
|
||
|
continue
|
||
|
}
|
||
|
if !checkTransformTest(t, &oc, dst) {
|
||
|
continue
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRotateEmpty(t *testing.T) {
|
||
|
empty := image.NewRGBA(image.Rect(0, 0, 0, 0))
|
||
|
if err := Rotate(empty, empty, nil); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRotateGopherSide(t *testing.T) {
|
||
|
src, err := graphicstest.LoadImage("../testdata/gopher.png")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
srcb := src.Bounds()
|
||
|
dst := image.NewRGBA(image.Rect(0, 0, srcb.Dy(), srcb.Dx()))
|
||
|
if err := Rotate(dst, src, &RotateOptions{math.Pi / 2.0}); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
cmp, err := graphicstest.LoadImage("../testdata/gopher-rotate-side.png")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
err = graphicstest.ImageWithinTolerance(dst, cmp, 0x101)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRotateGopherPartial(t *testing.T) {
|
||
|
src, err := graphicstest.LoadImage("../testdata/gopher.png")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
srcb := src.Bounds()
|
||
|
dst := image.NewRGBA(image.Rect(0, 0, srcb.Dx(), srcb.Dy()))
|
||
|
if err := Rotate(dst, src, &RotateOptions{math.Pi / 3.0}); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
cmp, err := graphicstest.LoadImage("../testdata/gopher-rotate-partial.png")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
err = graphicstest.ImageWithinTolerance(dst, cmp, 0x101)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
}
|