mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			114 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2015 by caixw, All rights reserved.
 | 
						|
// Use of this source code is governed by a MIT
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package identicon
 | 
						|
 | 
						|
import (
 | 
						|
	"image"
 | 
						|
	"image/color"
 | 
						|
	"image/png"
 | 
						|
	"os"
 | 
						|
	"strconv"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/issue9/assert"
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	back  = color.RGBA{255, 0, 0, 100}
 | 
						|
	fore  = color.RGBA{0, 255, 255, 100}
 | 
						|
	fores = []color.Color{color.Black, color.RGBA{200, 2, 5, 100}, color.RGBA{2, 200, 5, 100}}
 | 
						|
	size  = 128
 | 
						|
)
 | 
						|
 | 
						|
// 依次画出各个网络的图像。
 | 
						|
func TestBlocks(t *testing.T) {
 | 
						|
	p := []color.Color{back, fore}
 | 
						|
 | 
						|
	a := assert.New(t)
 | 
						|
 | 
						|
	for k, v := range blocks {
 | 
						|
		img := image.NewPaletted(image.Rect(0, 0, size*4, size), p) // 横向4张图片大小
 | 
						|
 | 
						|
		for i := 0; i < 4; i++ {
 | 
						|
			v(img, float64(i*size), 0, float64(size), i)
 | 
						|
		}
 | 
						|
 | 
						|
		fi, err := os.Create("./testdata/block-" + strconv.Itoa(k) + ".png")
 | 
						|
		a.NotError(err).NotNil(fi)
 | 
						|
		a.NotError(png.Encode(fi, img))
 | 
						|
		a.NotError(fi.Close()) // 关闭文件
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// 产生一组测试图片
 | 
						|
func TestDrawBlocks(t *testing.T) {
 | 
						|
	a := assert.New(t)
 | 
						|
 | 
						|
	for i := 0; i < 20; i++ {
 | 
						|
		p := image.NewPaletted(image.Rect(0, 0, size, size), []color.Color{back, fore})
 | 
						|
		c := (i + 1) % len(centerBlocks)
 | 
						|
		b1 := (i + 2) % len(blocks)
 | 
						|
		b2 := (i + 3) % len(blocks)
 | 
						|
		drawBlocks(p, size, centerBlocks[c], blocks[b1], blocks[b2], 0)
 | 
						|
 | 
						|
		fi, err := os.Create("./testdata/draw-" + strconv.Itoa(i) + ".png")
 | 
						|
		a.NotError(err).NotNil(fi)
 | 
						|
		a.NotError(png.Encode(fi, p))
 | 
						|
		a.NotError(fi.Close()) // 关闭文件
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestMake(t *testing.T) {
 | 
						|
	a := assert.New(t)
 | 
						|
 | 
						|
	for i := 0; i < 20; i++ {
 | 
						|
		img, err := Make(size, back, fore, []byte("make-"+strconv.Itoa(i)))
 | 
						|
		a.NotError(err).NotNil(img)
 | 
						|
 | 
						|
		fi, err := os.Create("./testdata/make-" + strconv.Itoa(i) + ".png")
 | 
						|
		a.NotError(err).NotNil(fi)
 | 
						|
		a.NotError(png.Encode(fi, img))
 | 
						|
		a.NotError(fi.Close()) // 关闭文件
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestIdenticon(t *testing.T) {
 | 
						|
	a := assert.New(t)
 | 
						|
 | 
						|
	ii, err := New(size, back, fores...)
 | 
						|
	a.NotError(err).NotNil(ii)
 | 
						|
 | 
						|
	for i := 0; i < 20; i++ {
 | 
						|
		img := ii.Make([]byte("identicon-" + strconv.Itoa(i)))
 | 
						|
		a.NotNil(img)
 | 
						|
 | 
						|
		fi, err := os.Create("./testdata/identicon-" + strconv.Itoa(i) + ".png")
 | 
						|
		a.NotError(err).NotNil(fi)
 | 
						|
		a.NotError(png.Encode(fi, img))
 | 
						|
		a.NotError(fi.Close()) // 关闭文件
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// BenchmarkMake	    5000	    229378 ns/op
 | 
						|
func BenchmarkMake(b *testing.B) {
 | 
						|
	a := assert.New(b)
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		img, err := Make(size, back, fore, []byte("Make"))
 | 
						|
		a.NotError(err).NotNil(img)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// BenchmarkIdenticon_Make	   10000	    222127 ns/op
 | 
						|
func BenchmarkIdenticon_Make(b *testing.B) {
 | 
						|
	a := assert.New(b)
 | 
						|
 | 
						|
	ii, err := New(size, back, fores...)
 | 
						|
	a.NotError(err).NotNil(ii)
 | 
						|
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		img := ii.Make([]byte("Make"))
 | 
						|
		a.NotNil(img)
 | 
						|
	}
 | 
						|
}
 |