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()) }