github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/gift/effects_test.go (about)

     1  package gift
     2  
     3  import (
     4  	"image"
     5  	"testing"
     6  )
     7  
     8  func TestPixelate(t *testing.T) {
     9  	testData := []struct {
    10  		desc           string
    11  		size           int
    12  		srcb, dstb     image.Rectangle
    13  		srcPix, dstPix []uint8
    14  	}{
    15  		{
    16  			"pixelate (0)",
    17  			0,
    18  			image.Rect(-1, -1, 4, 2),
    19  			image.Rect(0, 0, 5, 3),
    20  			[]uint8{
    21  				0x00, 0x40, 0x00, 0x40, 0x00,
    22  				0x60, 0xB0, 0xA0, 0xB0, 0x60,
    23  				0x00, 0x80, 0x00, 0x80, 0x00,
    24  			},
    25  			[]uint8{
    26  				0x00, 0x40, 0x00, 0x40, 0x00,
    27  				0x60, 0xB0, 0xA0, 0xB0, 0x60,
    28  				0x00, 0x80, 0x00, 0x80, 0x00,
    29  			},
    30  		},
    31  		{
    32  			"pixelate (1)",
    33  			1,
    34  			image.Rect(-1, -1, 4, 2),
    35  			image.Rect(0, 0, 5, 3),
    36  			[]uint8{
    37  				0x00, 0x40, 0x00, 0x40, 0x00,
    38  				0x60, 0xB0, 0xA0, 0xB0, 0x60,
    39  				0x00, 0x80, 0x00, 0x80, 0x00,
    40  			},
    41  			[]uint8{
    42  				0x00, 0x40, 0x00, 0x40, 0x00,
    43  				0x60, 0xB0, 0xA0, 0xB0, 0x60,
    44  				0x00, 0x80, 0x00, 0x80, 0x00,
    45  			},
    46  		},
    47  		{
    48  			"pixelate (2)",
    49  			2,
    50  			image.Rect(-1, -1, 4, 2),
    51  			image.Rect(0, 0, 5, 3),
    52  			[]uint8{
    53  				0x00, 0x40, 0x00, 0x40, 0x00,
    54  				0x60, 0xB0, 0xA0, 0xB0, 0x60,
    55  				0x00, 0x80, 0x00, 0x80, 0x00,
    56  			},
    57  			[]uint8{
    58  				0x54, 0x54, 0x64, 0x64, 0x30,
    59  				0x54, 0x54, 0x64, 0x64, 0x30,
    60  				0x40, 0x40, 0x40, 0x40, 0x00,
    61  			},
    62  		},
    63  		{
    64  			"pixelate (3)",
    65  			3,
    66  			image.Rect(-1, -1, 4, 2),
    67  			image.Rect(0, 0, 5, 3),
    68  			[]uint8{
    69  				0x00, 0x40, 0x00, 0x40, 0x00,
    70  				0x60, 0xB0, 0xA0, 0xB0, 0x60,
    71  				0x00, 0x80, 0x00, 0x80, 0x00,
    72  			},
    73  			[]uint8{
    74  				0x45, 0x45, 0x45, 0x4d, 0x4d,
    75  				0x45, 0x45, 0x45, 0x4d, 0x4d,
    76  				0x45, 0x45, 0x45, 0x4d, 0x4d,
    77  			},
    78  		},
    79  		{
    80  			"pixelate (10)",
    81  			10,
    82  			image.Rect(-1, -1, 4, 2),
    83  			image.Rect(0, 0, 5, 3),
    84  			[]uint8{
    85  				0x00, 0x40, 0x00, 0x40, 0x00,
    86  				0x60, 0xB0, 0xA0, 0xB0, 0x60,
    87  				0x00, 0x80, 0x00, 0x80, 0x00,
    88  			},
    89  			[]uint8{
    90  				0x49, 0x49, 0x49, 0x49, 0x49,
    91  				0x49, 0x49, 0x49, 0x49, 0x49,
    92  				0x49, 0x49, 0x49, 0x49, 0x49,
    93  			},
    94  		},
    95  		{
    96  			"pixelate 0x0",
    97  			3,
    98  			image.Rect(-1, -1, -1, -1),
    99  			image.Rect(0, 0, 0, 0),
   100  			[]uint8{},
   101  			[]uint8{},
   102  		},
   103  	}
   104  
   105  	for _, d := range testData {
   106  		src := image.NewGray(d.srcb)
   107  		src.Pix = d.srcPix
   108  
   109  		f := Pixelate(d.size)
   110  		dst := image.NewGray(f.Bounds(src.Bounds()))
   111  		f.Draw(dst, src, nil)
   112  
   113  		if !checkBoundsAndPix(dst.Bounds(), d.dstb, dst.Pix, d.dstPix) {
   114  			t.Errorf("test [%s] failed: %#v, %#v", d.desc, dst.Bounds(), dst.Pix)
   115  		}
   116  	}
   117  }