in cpc/quick_merging_validation.go [99:157]
func (qmv *QuickMergingValidation) quickTest(lgK int, cA, cB int64) error {
skA, _ := NewCpcSketchWithDefault(lgK)
skB, _ := NewCpcSketchWithDefault(lgK)
skD, _ := NewCpcSketchWithDefault(lgK) // direct combined
t0 := time.Now().UnixNano()
for skA.numCoupons < uint64(cA) {
qmv.vIn += common.InverseGoldenU64
in := qmv.vIn
_ = skA.UpdateUint64(in)
_ = skD.UpdateUint64(in)
}
t1 := time.Now().UnixNano()
for skB.numCoupons < uint64(cB) {
qmv.vIn += common.InverseGoldenU64
in := qmv.vIn
_ = skB.UpdateUint64(in)
_ = skD.UpdateUint64(in)
}
t2 := time.Now().UnixNano()
ugM, _ := NewCpcUnionSketchWithDefault(lgK)
_ = ugM.Update(skA)
t3 := time.Now().UnixNano()
_ = ugM.Update(skB)
t4 := time.Now().UnixNano()
skR, _ := ugM.GetResult()
t5 := time.Now().UnixNano()
if !specialEquals(skD, skR, false, true) {
return fmt.Errorf("merged result differs from direct combined sketch")
}
flavorA := fmt.Sprintf("%s%2d", skA.getFlavor(), skA.windowOffset)
flavorB := fmt.Sprintf("%s%2d", skB.getFlavor(), skB.windowOffset)
flavorM := fmt.Sprintf("%s%2d", skR.getFlavor(), skR.windowOffset)
updAms := float64(t1-t0) / 2e6
updBms := float64(t2-t1) / 2e6
mrgAms := float64(t3-t2) / 1e6
mrgBms := float64(t4-t3) / 1e6
rsltms := float64(t5-t4) / 1e6
qmv.printf(
qmv.dfmt,
lgK,
cA,
cB,
flavorA,
flavorB,
flavorM,
updAms,
updBms,
mrgAms,
mrgBms,
rsltms,
)
return nil
}