This is an automated email from the ASF dual-hosted git repository. alsay pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/datasketches-go.git
commit 4a86514b9d0240928e5af1e2e3e386b7330b15dd Author: Pierre Lacave <[email protected]> AuthorDate: Wed Dec 20 21:38:11 2023 +0100 Add reset and test for empty sketch --- frequencies/long_sketch.go | 21 +++++++++++++++++++-- frequencies/long_sketch_test.go | 31 +++++++++++++++++++++++++++---- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/frequencies/long_sketch.go b/frequencies/long_sketch.go index 71618b4..3d10120 100644 --- a/frequencies/long_sketch.go +++ b/frequencies/long_sketch.go @@ -86,13 +86,13 @@ func NewLongSketch(lgMaxMapSize int, lgCurMapSize int) (*LongSketch, error) { }, nil } -// NewLongSketchForMaxMapSize constructs a new LongSketch with the given maxMapSize and the +// NewLongSketchWithMaxMapSize constructs a new LongSketch with the given maxMapSize and the // default initialMapSize (8). // maxMapSize determines the physical size of the internal hash map managed by this // sketch and must be a power of 2. The maximum capacity of this internal hash map is // 0.75 times * maxMapSize. Both the ultimate accuracy and size of this sketch are a // function of maxMapSize. -func NewLongSketchForMaxMapSize(maxMapSize int) (*LongSketch, error) { +func NewLongSketchWithMaxMapSize(maxMapSize int) (*LongSketch, error) { log2OfInt, err := common.ExactLog2(maxMapSize) if err != nil { return nil, fmt.Errorf("maxMapSize, %e", err) @@ -379,3 +379,20 @@ func (s *LongSketch) toSlice() ([]byte, error) { } return outArr, nil } + +func (s *LongSketch) Reset() { + hasMap, _ := NewReversePurgeLongHashMap(1 << _LG_MIN_MAP_SIZE) + s.curMapCap = hasMap.getCapacity() + s.offset = 0 + s.streamWeight = 0 + s.hashMap = hasMap +} + +/* + public void reset() { + hashMap = new ReversePurgeLongHashMap(1 << LG_MIN_MAP_SIZE); + curMapCap = hashMap.getCapacity(); + offset = 0; + streamWeight = 0; + } +*/ diff --git a/frequencies/long_sketch_test.go b/frequencies/long_sketch_test.go index feee404..eddfc10 100644 --- a/frequencies/long_sketch_test.go +++ b/frequencies/long_sketch_test.go @@ -23,9 +23,9 @@ import ( ) func TestFrequentItemsStringSerial(t *testing.T) { - sketch, err := NewLongSketchForMaxMapSize(8) + sketch, err := NewLongSketchWithMaxMapSize(8) assert.NoError(t, err) - sketch2, err := NewLongSketchForMaxMapSize(128) + sketch2, err := NewLongSketchWithMaxMapSize(128) assert.NoError(t, err) sketch.Update(10, 100) sketch.Update(10, 100) @@ -89,7 +89,7 @@ func TestFrequentItemsStringSerial(t *testing.T) { } func TestFrequentItemsByteSerial(t *testing.T) { - sketch, err := NewLongSketchForMaxMapSize(16) + sketch, err := NewLongSketchWithMaxMapSize(16) assert.NoError(t, err) byteArray0, err := sketch.toSlice() newSk0, err := NewLongSketchFromSlice(byteArray0) @@ -100,7 +100,7 @@ func TestFrequentItemsByteSerial(t *testing.T) { assert.NoError(t, err) assert.Equal(t, str0, newStr0) - sketch2, err := NewLongSketchForMaxMapSize(128) + sketch2, err := NewLongSketchWithMaxMapSize(128) assert.NoError(t, err) sketch.Update(10, 100) sketch.Update(10, 100) @@ -167,3 +167,26 @@ func TestFrequentItemsByteSerial(t *testing.T) { assert.Equal(t, mergedSketch.getCurrentMapCapacity(), newSk3.getCurrentMapCapacity()) assert.Equal(t, mergedSketch.getStreamLength(), newSk3.getStreamLength()) } + +func TestFrequentItemsByteResetAndEmptySerial(t *testing.T) { + sketch, err := NewLongSketchWithMaxMapSize(16) + assert.NoError(t, err) + sketch.Update(10, 100) + sketch.Update(10, 100) + sketch.Update(15, 3443) + sketch.Update(1000001, 1010230) + sketch.Update(1000002, 1010230) + sketch.Reset() + + byteArray0, err := sketch.toSlice() + assert.NoError(t, err) + newSk0, err := NewLongSketchFromSlice(byteArray0) + assert.NoError(t, err) + str0, err := sketch.serializeToString() + assert.NoError(t, err) + newStr0, err := newSk0.serializeToString() + assert.NoError(t, err) + assert.Equal(t, str0, newStr0) + assert.Equal(t, sketch.getMaximumMapCapacity(), newSk0.getMaximumMapCapacity()) + assert.Equal(t, sketch.getCurrentMapCapacity(), newSk0.getCurrentMapCapacity()) +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
