You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

425 lines
11 KiB
Go

package gtid
import (
"fmt"
"strconv"
"testing"
)
func TestGtidEqual(t *testing.T) {
equal, err := Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-30",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-30")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-30",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-30")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if !equal {
t.Fatalf("unexpected error should equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-13")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-13",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-123",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-123",
)
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-13",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-123",
)
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-123",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-13",
)
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-123",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,14b12195-39b4-11eb-b3a9-005056bf03d8:1-20",
)
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,14b12195-39b4-11eb-b3a9-005056bf03d8:1-20",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-123",
)
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if equal {
t.Fatalf("unexpected error should not equal!")
}
equal, err = Equal(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,14b12195-39b4-11eb-b3a9-005056bf03d8:1-10,14b12195-39b4-11eb-b3a9-005056bf03d8:11-15,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-123,14b12195-39b4-11eb-b3a9-005056bf03d8:16-20",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-123,14b12195-39b4-11eb-b3a9-005056bf03d8:1-20",
)
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if !equal {
t.Fatalf("unexpected error should equal!")
}
}
func TestGtidAdd(t *testing.T) {
gtid, err := Add(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:5-10,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:7",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-4,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5:7" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestGtidAdd2(t *testing.T) {
gtid, err := Parse(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:5-10,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:7")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
gtid.Add("ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-4,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5")
if gtid.String() != "ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5:7" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestGtid_AddGtid(t *testing.T) {
src := `14b12195-39b4-11eb-b3a9-005056bf03d8:1-16`
gtid, err := Parse(src)
if err != nil {
panic(err)
}
err = gtid.Add(`14b12195-39b4-11eb-b3a9-005056bf03d8:1-17`)
if err != nil {
panic(err)
}
gtid.Add(`14b12195-39b4-11eb-b3a9-005056bf03d8:19-20`)
fmt.Println(gtid.String())
if gtid.String() != `14b12195-39b4-11eb-b3a9-005056bf03d8:1-17:19-20` {
t.FailNow()
}
}
func TestGtid_SubGtid(t *testing.T) {
src := `14b12195-39b4-11eb-b3a9-005056bf03d8:1-16`
gtid, err := Parse(src)
if err != nil {
panic(err)
}
err = gtid.sub(`14b12195-39b4-11eb-b3a9-005056bf03d8:1-12`)
if err != nil {
panic(err)
}
//gtid.Add(`14b12195-39b4-11eb-b3a9-005056bf03d8:19-20`)
fmt.Println(gtid.String())
if gtid.String() != `14b12195-39b4-11eb-b3a9-005056bf03d8:13-16` {
t.FailNow()
}
}
func TestSub_1(t *testing.T) {
gtid, err := Sub(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10:20-30",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:11-12")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10:20-30" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestSub_2(t *testing.T) {
gtid, err := Sub(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10:20-30",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:15-40")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestSub_3(t *testing.T) {
gtid, err := Sub(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10:20-30",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:15-25")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10:26-30" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestSub_4(t *testing.T) {
gtid, err := Sub(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10:20-30",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:15-30")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestSub_5(t *testing.T) {
gtid, err := Sub(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10:20-30",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:2-29")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1:30" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestSub_6(t *testing.T) {
gtid, err := Sub(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10:20-30",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-30")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestSub_7(t *testing.T) {
gtid, err := Sub(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10:20-30",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:5-6:25")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-4:7-10:20-24:26-30" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestSub_8(t *testing.T) {
gtid, err := Sub(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:20-30, ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-7, ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-9:25, ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:6")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:10:20-24:26-30,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5:7" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func TestSub_empty(t *testing.T) {
gtid, err := Sub(
"",
"")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if gtid != "" {
t.Fatalf("wrong gtid %v", gtid)
}
}
func Benchmark_SUB8(b *testing.B) {
for i := 0; i < b.N; i++ {
Sub(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:20-30, ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-7, ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-9:25, ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:6")
}
}
func Benchmark_SUB82(b *testing.B) {
p, _ := parse("ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:20-30, ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-7, ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10")
for i := 0; i < b.N; i++ {
c := *p
c.Sub("ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-9:25, ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:6")
}
}
func TestContain_pass(t *testing.T) {
contain, err := Contain(
"ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-7,ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-10",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-4,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if !contain {
t.Fatalf("contain should == true")
}
}
func TestContain_not_pass(t *testing.T) {
contain, err := Contain(
"ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-7,ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:2-10",
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:1-4,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if contain {
t.Fatalf("contain should == false")
}
}
func TestContain_null(t *testing.T) {
contain, err := Contain(
"",
"")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if !contain {
t.Fatalf("contain should == true")
}
}
func TestGtidOverlap_true(t *testing.T) {
ret, err := Overlap(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:10:20-24:26-30,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5:7",
"ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:4")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if !ret {
t.Fatalf("expect true, but got false")
}
}
func TestGtidOverlap_false(t *testing.T) {
ret, err := Overlap(
"ca8035ea-c5d5-11e3-8ce9-e66ccf50db66:10:20-24:26-30,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5:7",
"ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:9")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if ret {
t.Fatalf("expect false, but got true")
}
}
func TestGtidOverlap_false2(t *testing.T) {
ret, err := Overlap(
"ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-5:7",
"ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-12")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
if !ret {
t.Fatalf("expect true, but got false")
}
}
func TestGtid(t *testing.T) {
ret, err := Parse("")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
for i := 0; i < 1000000; i++ {
err := ret.AddGtid("ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb", uint64(i+1))
if err != nil {
panic(err)
}
}
fmt.Println(ret.String())
}
func TestGtid2(t *testing.T) {
ret, err := Parse("")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
str := ret.String()
for i := 0; i < 10000000; i++ {
gtid := "ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:" + strconv.Itoa(i+1)
str, err = Add(str, gtid)
if err != nil {
panic(err)
}
}
fmt.Println(str)
}
func TestGtid_Contain(t *testing.T) {
ret, err := Parse("ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:1-99999,ff92c4da-c5d7-11e3-8cf7-5e10e6a05cf2:1-7867")
if nil != err {
t.Fatalf("unexpected error %v", err)
}
str := ret.String()
for i := 0; i < 10000000; i++ {
//gtid := "ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb:" + strconv.Itoa(i+1)
_, err = ret.ContainGtid("ff92c4da-c5d7-11e3-8cf7-5e10e6a05cfb", uint64(i+1)) //ret.Contain(gtid)
if err != nil {
panic(err)
}
}
fmt.Println(str == ret.String())
}