@@ -337,6 +337,104 @@ describe('filter transforms calc:', function() {
337337 expect ( out [ 0 ] . marker . color ) . toEqual ( [ undefined , undefined , undefined , undefined , 0.2 , 0.3 , 0.4 ] ) ;
338338 } ) ;
339339
340+ it ( 'two filter transforms with `preservegaps: true` should commute' , function ( ) {
341+ var transform0 = {
342+ type : 'filter' ,
343+ preservegaps : true ,
344+ operation : '>' ,
345+ value : - 1 ,
346+ target : 'x'
347+ } ;
348+
349+ var transform1 = {
350+ type : 'filter' ,
351+ preservegaps : true ,
352+ operation : '<' ,
353+ value : 2 ,
354+ target : 'x'
355+ } ;
356+
357+ var out0 = _transform ( [ Lib . extendDeep ( { } , base , {
358+ transforms : [ transform0 , transform1 ]
359+ } ) ] ) ;
360+
361+ var out1 = _transform ( [ Lib . extendDeep ( { } , base , {
362+ transforms : [ transform1 , transform0 ]
363+ } ) ] ) ;
364+
365+ [ 'x' , 'y' , 'ids' , 'marker.color' , 'marker.size' ] . forEach ( function ( k ) {
366+ var v0 = Lib . nestedProperty ( out0 [ 0 ] , k ) . get ( ) ;
367+ var v1 = Lib . nestedProperty ( out1 [ 0 ] , k ) . get ( ) ;
368+ expect ( v0 ) . toEqual ( v1 ) ;
369+ } ) ;
370+ } ) ;
371+
372+ it ( 'two filter transforms with `preservegaps: false` should commute' , function ( ) {
373+ var transform0 = {
374+ type : 'filter' ,
375+ preservegaps : false ,
376+ operation : '>' ,
377+ value : - 1 ,
378+ target : 'x'
379+ } ;
380+
381+ var transform1 = {
382+ type : 'filter' ,
383+ preservegaps : false ,
384+ operation : '<' ,
385+ value : 2 ,
386+ target : 'x'
387+ } ;
388+
389+ var out0 = _transform ( [ Lib . extendDeep ( { } , base , {
390+ transforms : [ transform0 , transform1 ]
391+ } ) ] ) ;
392+
393+ var out1 = _transform ( [ Lib . extendDeep ( { } , base , {
394+ transforms : [ transform1 , transform0 ]
395+ } ) ] ) ;
396+
397+ [ 'x' , 'y' , 'ids' , 'marker.color' , 'marker.size' ] . forEach ( function ( k ) {
398+ var v0 = Lib . nestedProperty ( out0 [ 0 ] , k ) . get ( ) ;
399+ var v1 = Lib . nestedProperty ( out1 [ 0 ] , k ) . get ( ) ;
400+ expect ( v0 ) . toEqual ( v1 ) ;
401+ } ) ;
402+ } ) ;
403+
404+ it ( 'two filter transforms with different `preservegaps` values should not necessary commute' , function ( ) {
405+ var transform0 = {
406+ type : 'filter' ,
407+ preservegaps : true ,
408+ operation : '>' ,
409+ value : - 1 ,
410+ target : 'x'
411+ } ;
412+
413+ var transform1 = {
414+ type : 'filter' ,
415+ preservegaps : false ,
416+ operation : '<' ,
417+ value : 2 ,
418+ target : 'x'
419+ } ;
420+
421+ var out0 = _transform ( [ Lib . extendDeep ( { } , base , {
422+ transforms : [ transform0 , transform1 ]
423+ } ) ] ) ;
424+
425+ expect ( out0 [ 0 ] . x ) . toEqual ( [ 0 , 1 ] ) ;
426+ expect ( out0 [ 0 ] . y ) . toEqual ( [ 1 , 2 ] ) ;
427+ expect ( out0 [ 0 ] . marker . color ) . toEqual ( [ 0.1 , 0.2 ] ) ;
428+
429+ var out1 = _transform ( [ Lib . extendDeep ( { } , base , {
430+ transforms : [ transform1 , transform0 ]
431+ } ) ] ) ;
432+
433+ expect ( out1 [ 0 ] . x ) . toEqual ( [ undefined , undefined , undefined , 0 , 1 ] ) ;
434+ expect ( out1 [ 0 ] . y ) . toEqual ( [ undefined , undefined , undefined , 1 , 2 ] ) ;
435+ expect ( out1 [ 0 ] . marker . color ) . toEqual ( [ undefined , undefined , undefined , 0.1 , 0.2 ] ) ;
436+ } ) ;
437+
340438 describe ( 'filters should handle numeric values' , function ( ) {
341439 var _base = Lib . extendDeep ( { } , base ) ;
342440
0 commit comments