11import { DateTime } from 'luxon' ;
2+ import { XDomain } from '../../series/domains/x_domain' ;
3+ import { computeXScale } from '../../series/scales' ;
4+ import { Domain } from '../domain' ;
25import { ScaleBand } from './scale_band' ;
36import { isLogarithmicScale , ScaleContinuous } from './scale_continuous' ;
47import { ScaleType } from './scales' ;
58
69describe ( 'Scale Continuous' , ( ) => {
710 test ( 'shall invert on continuous scale linear' , ( ) => {
8- const domain = [ 0 , 2 ] ;
11+ const domain : Domain = [ 0 , 2 ] ;
912 const minRange = 0 ;
1013 const maxRange = 100 ;
1114 const scale = new ScaleContinuous ( ScaleType . Linear , domain , [ minRange , maxRange ] ) ;
@@ -26,7 +29,7 @@ describe('Scale Continuous', () => {
2629 expect ( scale . invert ( 100 ) ) . toBe ( endTime . toMillis ( ) ) ;
2730 } ) ;
2831 test ( 'check if a scale is log scale' , ( ) => {
29- const domain = [ 0 , 2 ] ;
32+ const domain : Domain = [ 0 , 2 ] ;
3033 const range : [ number , number ] = [ 0 , 100 ] ;
3134 const scaleLinear = new ScaleContinuous ( ScaleType . Linear , domain , range ) ;
3235 const scaleLog = new ScaleContinuous ( ScaleType . Log , domain , range ) ;
@@ -39,4 +42,101 @@ describe('Scale Continuous', () => {
3942 expect ( isLogarithmicScale ( scaleSqrt ) ) . toBe ( false ) ;
4043 expect ( isLogarithmicScale ( scaleBand ) ) . toBe ( false ) ;
4144 } ) ;
45+ test ( 'can get the right x value on linear scale' , ( ) => {
46+ const domain : Domain = [ 0 , 2 ] ;
47+ const data = [ 0 , 0.5 , 0.8 , 2 ] ;
48+ const range : [ number , number ] = [ 0 , 2 ] ;
49+ const scaleLinear = new ScaleContinuous ( ScaleType . Linear , domain , range ) ;
50+ expect ( scaleLinear . bandwidth ) . toBe ( 0 ) ;
51+ expect ( scaleLinear . invertWithStep ( 0 , data ) ) . toBe ( 0 ) ;
52+ expect ( scaleLinear . invertWithStep ( 0.1 , data ) ) . toBe ( 0 ) ;
53+
54+ expect ( scaleLinear . invertWithStep ( 0.4 , data ) ) . toBe ( 0.5 ) ;
55+ expect ( scaleLinear . invertWithStep ( 0.5 , data ) ) . toBe ( 0.5 ) ;
56+ expect ( scaleLinear . invertWithStep ( 0.6 , data ) ) . toBe ( 0.5 ) ;
57+
58+ expect ( scaleLinear . invertWithStep ( 0.7 , data ) ) . toBe ( 0.8 ) ;
59+ expect ( scaleLinear . invertWithStep ( 0.8 , data ) ) . toBe ( 0.8 ) ;
60+ expect ( scaleLinear . invertWithStep ( 0.9 , data ) ) . toBe ( 0.8 ) ;
61+
62+ expect ( scaleLinear . invertWithStep ( 2 , data ) ) . toBe ( 2 ) ;
63+
64+ expect ( scaleLinear . invertWithStep ( 1.7 , data ) ) . toBe ( 2 ) ;
65+
66+ expect ( scaleLinear . invertWithStep ( 0.8 + ( 2 - 0.8 ) / 2 , data ) ) . toBe ( 0.8 ) ;
67+ expect ( scaleLinear . invertWithStep ( 0.8 + ( 2 - 0.8 ) / 2 - 0.01 , data ) ) . toBe ( 0.8 ) ;
68+
69+ expect ( scaleLinear . invertWithStep ( 0.8 + ( 2 - 0.8 ) / 2 + 0.01 , data ) ) . toBe ( 2 ) ;
70+ } ) ;
71+ test ( 'invert with step x value on linear band scale' , ( ) => {
72+ const data = [ 0 , 1 , 2 ] ;
73+ const xDomain : XDomain = {
74+ domain : [ 0 , 2 ] ,
75+ isBandScale : true ,
76+ minInterval : 1 ,
77+ scaleType : ScaleType . Linear ,
78+ type : 'xDomain' ,
79+ } ;
80+
81+ const scaleLinear = computeXScale ( xDomain , 1 , 0 , 120 , 0 ) ;
82+ expect ( scaleLinear . bandwidth ) . toBe ( 40 ) ;
83+ expect ( scaleLinear . invertWithStep ( 0 , data ) ) . toBe ( 0 ) ;
84+ expect ( scaleLinear . invertWithStep ( 40 , data ) ) . toBe ( 1 ) ;
85+
86+ expect ( scaleLinear . invertWithStep ( 41 , data ) ) . toBe ( 1 ) ;
87+ expect ( scaleLinear . invertWithStep ( 79 , data ) ) . toBe ( 1 ) ;
88+
89+ expect ( scaleLinear . invertWithStep ( 80 , data ) ) . toBe ( 2 ) ;
90+ expect ( scaleLinear . invertWithStep ( 81 , data ) ) . toBe ( 2 ) ;
91+ expect ( scaleLinear . invertWithStep ( 120 , data ) ) . toBe ( 2 ) ;
92+ } ) ;
93+ test ( 'can get the right x value on linear scale with regular band 1' , ( ) => {
94+ const domain = [ 0 , 100 ] ;
95+ const data = [ 0 , 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 ] ;
96+
97+ // we tweak the maxRange removing the bandwidth to correctly compute
98+ // a band linear scale in computeXScale
99+ const range : [ number , number ] = [ 0 , 100 - 10 ] ;
100+ const scaleLinear = new ScaleContinuous ( ScaleType . Linear , domain , range , 10 , 10 ) ;
101+ expect ( scaleLinear . bandwidth ) . toBe ( 10 ) ;
102+ expect ( scaleLinear . invertWithStep ( 0 , data ) ) . toBe ( 0 ) ;
103+ expect ( scaleLinear . invertWithStep ( 10 , data ) ) . toBe ( 10 ) ;
104+ expect ( scaleLinear . invertWithStep ( 20 , data ) ) . toBe ( 20 ) ;
105+ expect ( scaleLinear . invertWithStep ( 90 , data ) ) . toBe ( 90 ) ;
106+ } ) ;
107+ test ( 'can get the right x value on linear scale with band' , ( ) => {
108+ const data = [ 0 , 10 , 20 , 50 , 90 ] ;
109+ // we tweak the maxRange removing the bandwidth to correctly compute
110+ // a band linear scale in computeXScale
111+
112+ const xDomain : XDomain = {
113+ domain : [ 0 , 100 ] ,
114+ isBandScale : true ,
115+ minInterval : 10 ,
116+ scaleType : ScaleType . Linear ,
117+ type : 'xDomain' ,
118+ } ;
119+
120+ const scaleLinear = computeXScale ( xDomain , 1 , 0 , 110 , 0 ) ;
121+ // const scaleLinear = new ScaleContinuous(ScaleType.Linear, domain, range, 10, 10);
122+ expect ( scaleLinear . bandwidth ) . toBe ( 10 ) ;
123+
124+ expect ( scaleLinear . invertWithStep ( 0 , data ) ) . toBe ( 0 ) ;
125+ expect ( scaleLinear . invertWithStep ( 5 , data ) ) . toBe ( 0 ) ;
126+ expect ( scaleLinear . invertWithStep ( 9 , data ) ) . toBe ( 0 ) ;
127+
128+ expect ( scaleLinear . invertWithStep ( 10 , data ) ) . toBe ( 10 ) ;
129+ expect ( scaleLinear . invertWithStep ( 11 , data ) ) . toBe ( 10 ) ;
130+ expect ( scaleLinear . invertWithStep ( 19 , data ) ) . toBe ( 10 ) ;
131+
132+ expect ( scaleLinear . invertWithStep ( 20 , data ) ) . toBe ( 20 ) ;
133+ expect ( scaleLinear . invertWithStep ( 21 , data ) ) . toBe ( 20 ) ;
134+ expect ( scaleLinear . invertWithStep ( 25 , data ) ) . toBe ( 20 ) ;
135+ expect ( scaleLinear . invertWithStep ( 29 , data ) ) . toBe ( 20 ) ;
136+ expect ( scaleLinear . invertWithStep ( 30 , data ) ) . toBe ( 20 ) ;
137+ expect ( scaleLinear . invertWithStep ( 39 , data ) ) . toBe ( 20 ) ;
138+ expect ( scaleLinear . invertWithStep ( 40 , data ) ) . toBe ( 50 ) ;
139+ expect ( scaleLinear . invertWithStep ( 50 , data ) ) . toBe ( 50 ) ;
140+ expect ( scaleLinear . invertWithStep ( 90 , data ) ) . toBe ( 90 ) ;
141+ } ) ;
42142} ) ;
0 commit comments