@@ -144,4 +144,74 @@ describe('CircularMap', () => {
144144 options . maxBytesSize
145145 ) ;
146146 } ) ;
147+
148+ it ( 'stores item in buffer when item size is equal to maxBytesSize' , ( ) => {
149+ // Prepare
150+ const maxBytes = 10 ;
151+ const onBufferOverflow = vi . fn ( ) ;
152+ const circularMap = new CircularMap < string > ( {
153+ maxBytesSize : maxBytes ,
154+ onBufferOverflow,
155+ } ) ;
156+ const message = 'x' . repeat ( maxBytes ) ;
157+
158+ // Act
159+ circularMap . setItem ( 'trace-1' , message , 1 ) ;
160+
161+ // Assess
162+ const buffer = circularMap . get ( 'trace-1' ) ;
163+
164+ expect ( buffer ) . toBeDefined ( ) ;
165+ expect ( buffer ?. currentBytesSize ) . toBe ( maxBytes ) ;
166+ expect ( buffer ?. size ) . toBe ( 1 ) ;
167+ expect ( onBufferOverflow ) . toHaveBeenCalledTimes ( 0 ) ;
168+ } ) ;
169+
170+ it ( 'evicts existing non-empty item from buffer when item size is equal to maxBytesSize' , ( ) => {
171+ // Prepare
172+ const maxBytes = 10 ;
173+ const onBufferOverflow = vi . fn ( ) ;
174+ const circularMap = new CircularMap < string > ( {
175+ maxBytesSize : maxBytes ,
176+ onBufferOverflow,
177+ } ) ;
178+
179+ const message = 'x' . repeat ( maxBytes ) ;
180+
181+ // Act
182+ circularMap . setItem ( 'trace-1' , message , 1 ) ;
183+ circularMap . setItem ( 'trace-1' , message , 1 ) ;
184+
185+ // Assess
186+ const buffer = circularMap . get ( 'trace-1' ) ;
187+
188+ expect ( buffer ) . toBeDefined ( ) ;
189+ expect ( buffer ?. currentBytesSize ) . toBe ( maxBytes ) ;
190+ expect ( buffer ?. size ) . toBe ( 1 ) ;
191+ expect ( onBufferOverflow ) . toHaveBeenCalledTimes ( 1 ) ;
192+ } ) ;
193+
194+ it ( 'should not evict existing empty item from buffer when new item size is equal to maxBytesSize' , ( ) => {
195+ // Prepare
196+ const maxBytes = 10 ;
197+ const onBufferOverflow = vi . fn ( ) ;
198+ const circularMap = new CircularMap < string > ( {
199+ maxBytesSize : maxBytes ,
200+ onBufferOverflow,
201+ } ) ;
202+
203+ const message = 'x' . repeat ( maxBytes ) ;
204+
205+ // Act
206+ circularMap . setItem ( 'trace-1' , '' , 1 ) ;
207+ circularMap . setItem ( 'trace-1' , message , 1 ) ;
208+
209+ // Assess
210+ const buffer = circularMap . get ( 'trace-1' ) ;
211+
212+ expect ( buffer ) . toBeDefined ( ) ;
213+ expect ( buffer ?. currentBytesSize ) . toBe ( maxBytes ) ;
214+ expect ( buffer ?. size ) . toBe ( 2 ) ;
215+ expect ( onBufferOverflow ) . toHaveBeenCalledTimes ( 0 ) ;
216+ } ) ;
147217} ) ;
0 commit comments