File tree Expand file tree Collapse file tree 2 files changed +15
-11
lines changed Expand file tree Collapse file tree 2 files changed +15
-11
lines changed Original file line number Diff line number Diff line change @@ -2792,15 +2792,20 @@ func (rc *runContainer16) validate() error {
2792
2792
check that the number of runs < (number of distinct values) / 2
2793
2793
(otherwise you could use an array container)
2794
2794
*/
2795
- if MaxIntervalsSum <= intervalsSum {
2796
- if ! (len (rc .iv ) < MaxNumIntervals ) {
2797
- return ErrRunIntervalSize
2798
- }
2799
- } else {
2800
- if ! (2 * len (rc .iv ) < intervalsSum ) {
2801
- return ErrRunIntervalSize
2802
- }
2803
- }
2804
2795
2796
+ sizeAsRunContainer := runContainer16SerializedSizeInBytes (len (rc .iv ))
2797
+ sizeAsBitmapContainer := bitmapContainerSizeInBytes ()
2798
+ sizeAsArrayContainer := arrayContainerSizeInBytes (intervalsSum )
2799
+ fmt .Println (sizeAsRunContainer , sizeAsBitmapContainer , sizeAsArrayContainer )
2800
+ // this is always ok:
2801
+ if sizeAsRunContainer < minOfInt (sizeAsBitmapContainer , sizeAsArrayContainer ) {
2802
+ return nil
2803
+ }
2804
+ if sizeAsRunContainer >= sizeAsBitmapContainer {
2805
+ return ErrRunIntervalSize
2806
+ }
2807
+ if sizeAsRunContainer >= sizeAsArrayContainer {
2808
+ return ErrRunIntervalSize
2809
+ }
2805
2810
return nil
2806
2811
}
Original file line number Diff line number Diff line change @@ -2588,13 +2588,12 @@ func TestIntervalValidationFailing(t *testing.T) {
2588
2588
start := - 4
2589
2589
for i := 0 ; i < MaxNumIntervals ; i ++ {
2590
2590
start += 4
2591
- end := start + 2
2591
+ end := start + 1
2592
2592
a := newInterval16Range (uint16 (start ), uint16 (end ))
2593
2593
rc .iv = append (rc .iv , a )
2594
2594
2595
2595
}
2596
2596
assert .ErrorIs (t , rc .validate (), ErrRunIntervalSize )
2597
-
2598
2597
// too many small runs, use array
2599
2598
rc = & runContainer16 {}
2600
2599
start = - 3
You can’t perform that action at this time.
0 commit comments