func()

in go/distinct_count_serde_profile.go [103:160]


func (d *DistinctCountSerDeProfile) runTrial(stats *distinctCountSerdeStats, key int64, lgDeltaU int) int64 {
	var (
		startEstimationTime_Ns int64
		stopEstimationTime_Ns  int64
		startSerTime_Ns        int64
		stopSerTime_Ns         int64
		startDeserTime_Ns      int64
		stopDeserTime_Ns       int64
		sketchBytes            []byte
		est1                   float64
		est2                   float64
	)
	d.sketch.Reset()

	for u := lgDeltaU; u > 0; u-- {
		key++
		d.sketch.UpdateInt64(key)
	}

	startEstimationTime_Ns = time.Now().UnixNano()
	est1, err := d.sketch.GetEstimate()
	if err != nil {
		panic(err)
	}
	stopEstimationTime_Ns = time.Now().UnixNano()

	if d.config.compact {
		startSerTime_Ns = time.Now().UnixNano()
		sketchBytes, err = d.sketch.ToCompactSlice()
		stopSerTime_Ns = time.Now().UnixNano()
	} else {
		startSerTime_Ns = time.Now().UnixNano()
		sketchBytes, err = d.sketch.ToUpdatableSlice()
		stopSerTime_Ns = time.Now().UnixNano()
	}

	startDeserTime_Ns = time.Now().UnixNano()
	sketchRebuild, err := hll.NewHllSketchFromSlice(sketchBytes, true)
	stopDeserTime_Ns = time.Now().UnixNano()
	if err != nil {
		panic(err)
	}

	est2, err = sketchRebuild.GetEstimate()
	if err != nil {
		panic(err)
	}

	if est1 != est2 {
		panic("Estimation mismatch")
	}

	stats.serializeTime_nS = stopSerTime_Ns - startSerTime_Ns
	stats.deserializeTime_nS = stopDeserTime_Ns - startDeserTime_Ns
	stats.estimationTime_nS = stopEstimationTime_Ns - startEstimationTime_Ns
	stats.size_bytes = uint64(len(sketchBytes))
	return key
}