func()

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
}