77 filterFn_equalsStringSensitive ,
88 filterFn_greaterThan ,
99 filterFn_greaterThanOrEqualTo ,
10+ filterFn_inNumberRange ,
1011 filterFn_includesString ,
1112 filterFn_includesStringSensitive ,
1213 filterFn_lessThan ,
@@ -571,7 +572,7 @@ describe('Filter Functions', () => {
571572 } )
572573
573574 describe ( 'filterFns.between.autoRemove' , ( ) => {
574- const autoRemove = filterFns . between . autoRemove !
575+ const autoRemove = filterFns . between . autoRemove
575576
576577 it ( 'should auto-remove when both endpoints are undefined' , ( ) => {
577578 expect ( autoRemove ( [ undefined , undefined ] ) ) . toBe ( true )
@@ -595,7 +596,7 @@ describe('Filter Functions', () => {
595596 } )
596597
597598 describe ( 'filterFns.betweenInclusive.autoRemove' , ( ) => {
598- const autoRemove = filterFns . betweenInclusive . autoRemove !
599+ const autoRemove = filterFns . betweenInclusive . autoRemove
599600
600601 it ( 'should auto-remove when both endpoints are undefined' , ( ) => {
601602 expect ( autoRemove ( [ undefined , undefined ] ) ) . toBe ( true )
@@ -727,7 +728,7 @@ describe('Filter Functions', () => {
727728 } )
728729
729730 describe ( 'filterFns.arrHas.autoRemove' , ( ) => {
730- const autoRemove = filterFns . arrHas . autoRemove !
731+ const autoRemove = filterFns . arrHas . autoRemove
731732
732733 it ( 'should auto-remove when the filter value is undefined' , ( ) => {
733734 expect ( autoRemove ( undefined ) ) . toBe ( true )
@@ -747,3 +748,50 @@ describe('Filter Functions', () => {
747748 } )
748749 } )
749750} )
751+
752+ describe ( 'Number Range Filters' , ( ) => {
753+ describe ( 'filterFn_inNumberRange' , ( ) => {
754+ it ( 'should match values inclusively within the range' , ( ) => {
755+ const row = mockRows [ 0 ] ! // age 30
756+
757+ expect ( filterFn_inNumberRange ( row , 'age' , [ 29 , 31 ] ) ) . toBe ( true )
758+ expect ( filterFn_inNumberRange ( row , 'age' , [ 30 , 30 ] ) ) . toBe ( true )
759+ expect ( filterFn_inNumberRange ( row , 'age' , [ 31 , 40 ] ) ) . toBe ( false )
760+ expect ( filterFn_inNumberRange ( row , 'age' , [ 10 , 29 ] ) ) . toBe ( false )
761+ } )
762+
763+ it ( 'should coerce string endpoints in resolveFilterValue' , ( ) => {
764+ expect ( filterFn_inNumberRange . resolveFilterValue ( [ '29' , '31' ] ) ) . toEqual ( [
765+ 29 , 31 ,
766+ ] )
767+ } )
768+
769+ it ( 'should treat null and non-numeric endpoints as open-ended' , ( ) => {
770+ expect ( filterFn_inNumberRange . resolveFilterValue ( [ null , 31 ] ) ) . toEqual ( [
771+ - Infinity ,
772+ 31 ,
773+ ] )
774+ expect ( filterFn_inNumberRange . resolveFilterValue ( [ 29 , 'abc' ] ) ) . toEqual ( [
775+ 29 ,
776+ Infinity ,
777+ ] )
778+ } )
779+
780+ it ( 'should swap reversed ranges' , ( ) => {
781+ expect ( filterFn_inNumberRange . resolveFilterValue ( [ 31 , 29 ] ) ) . toEqual ( [
782+ 29 , 31 ,
783+ ] )
784+ } )
785+
786+ it ( 'should auto-remove only fully empty ranges' , ( ) => {
787+ const autoRemove = filterFn_inNumberRange . autoRemove
788+
789+ expect ( autoRemove ( undefined ) ) . toBe ( true )
790+ expect ( autoRemove ( [ null , null ] ) ) . toBe ( true )
791+ expect ( autoRemove ( [ '' , '' ] ) ) . toBe ( true )
792+ expect ( autoRemove ( [ 5 , undefined ] ) ) . toBe ( false )
793+ expect ( autoRemove ( [ undefined , 10 ] ) ) . toBe ( false )
794+ expect ( autoRemove ( [ 0 , 10 ] ) ) . toBe ( false )
795+ } )
796+ } )
797+ } )
0 commit comments