package main

import (
	"fmt"
	"testing"
)

func BenchmarkComma(b *testing.B) {
	for i := 0; i < b.N; i++ {
		ttcomma()
	}
}

func BenchmarkCommaBuffer(b *testing.B) {
	for i := 0; i < b.N; i++ {
		ttcommabuffer()
	}
}

func ttcomma() {
	t := []string{
		"1111",
		`1111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		1114343433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		1114343433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		1114343433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		1114343433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		111434343324432432432432432432432432432411111114343433244324324324324324324324324324`,
	}
	for i := 0; i < len(t); i++ {
		fmt.Println(comma(t[i]))
	}
}

func ttcommabuffer() {
	t := []string{
		"1111",
		`1111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		1114343433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		1114343433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		1114343433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		1114343433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324
		324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432
		4324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432
		43243243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324
		324324111111143434332443243243243243243243243243241111111434343324432432432432432432432432432411
		1111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343
		433244324324324324324324324324324111111143434332443243243243243243243243243241111111434343324432432
		4324324324324324324324111111143434332443243243243243243243243243241111111434343324432432432432432432
		43243243241111111434343324432432432432432432432432432411111114343433244324324324324324324324324324111
		111143434332443243243243243243243243243241111111434343324432432432432432432432432432411111114343433244
		3243243243243243243243243241111111434343324432432432432432432432432432411111114343433244324324324324324
		32432432432411111114343433244324324324324324324324324324111111143434332443243243243243243243243243241111
		111434343324432432432432432432432432432411111114343433244324324324324324324324324324`,
	}
	for i := 0; i < len(t); i++ {
		fmt.Println(commaBuffer([]byte(t[i])))
	}
}

//练习3.10 ThomasHuke$ go test -bench=. -cpu=4
//goos: darwin
//goarch: amd64
//pkg: github.com/googege/gopl_homework/ch3/第三章练习题/练习3.10
//BenchmarkComma-4         	 5000000	       250 ns/op
//BenchmarkCommaBuffer-4   	 3000000	       456 ns/op
//PASS
//ok  	github.com/googege/gopl_homework/ch3/第三章练习题/练习3.10	3.373s

//----
// 将单个数据增长 buffer的那种写法明显速度更快

//go test -bench=. -cpu=4
//goos: darwin
//goarch: amd64
//pkg: github.com/googege/gopl_homework/ch3/第三章练习题/练习3.10
//BenchmarkComma-4         	   10000	    175284 ns/op
//BenchmarkCommaBuffer-4   	  100000	     11146 ns/op
//PASS
//ok  	github.com/googege/gopl_homework/ch3/第三章练习题/练习3.10	3.031s

//ThomasHuke$ go test -bench=. -cpu=4  单个数据越大，就会造成更大的时间差距，这就是buffer和string的差距。这个测试数据中已经差距了2个数量级了。
//goos: darwin
//goarch: amd64
//pkg: github.com/googege/gopl_homework/ch3/第三章练习题/练习3.10
//BenchmarkComma-4         	     500	   3252995 ns/op
//BenchmarkCommaBuffer-4   	   30000	     54003 ns/op
//PASS
//ok  	github.com/googege/gopl_homework/ch3/第三章练习题/练习3.10	4.143s
