@@ -158,18 +158,182 @@ suite.addBatch({
158158 var x = pow ( ) . domain ( [ 0 , .49 ] ) . nice ( ) ;
159159 assert . deepEqual ( x . domain ( ) , [ 0 , .5 ] ) ;
160160 } ,
161- "can specify a polylinear domain and range" : function ( pow ) {
161+ "can specify a polypower domain and range" : function ( pow ) {
162162 var x = pow ( ) . domain ( [ - 10 , 0 , 100 ] ) . range ( [ "red" , "white" , "green" ] ) ;
163163 assert . equal ( x ( - 5 ) , "rgb(255,128,128)" ) ;
164164 assert . equal ( x ( 50 ) , "rgb(128,192,128)" ) ;
165165 assert . equal ( x ( 75 ) , "rgb(64,160,64)" ) ;
166166 } ,
167- "nicing a polylinear domain only affects the extent" : function ( pow ) {
167+ "nicing a polypower domain only affects the extent" : function ( pow ) {
168168 var x = pow ( ) . domain ( [ 1.1 , 1 , 2 , 3 , 10.9 ] ) . nice ( ) ;
169169 assert . deepEqual ( x . domain ( ) , [ 1 , 1 , 2 , 3 , 11 ] ) ;
170170 var x = pow ( ) . domain ( [ 123.1 , 1 , 2 , 3 , - .9 ] ) . nice ( ) ;
171171 assert . deepEqual ( x . domain ( ) , [ 130 , 1 , 2 , 3 , - 10 ] ) ;
172172 }
173+ } ,
174+ "sqrt" : {
175+ topic : function ( ) {
176+ return d3 . scale . sqrt ;
177+ } ,
178+ "has the default domain [0, 1]" : function ( sqrt ) {
179+ var x = sqrt ( ) ;
180+ assert . deepEqual ( x . domain ( ) , [ 0 , 1 ] ) ;
181+ assert . inDelta ( x ( .5 ) , 0.7071068 , 1e-6 ) ;
182+ } ,
183+ "has the default range [0, 1]" : function ( sqrt ) {
184+ var x = sqrt ( ) ;
185+ assert . deepEqual ( x . range ( ) , [ 0 , 1 ] ) ;
186+ assert . inDelta ( x . invert ( .5 ) , .25 , 1e-6 ) ;
187+ } ,
188+ "has the default exponent .5" : function ( sqrt ) {
189+ var x = sqrt ( ) ;
190+ assert . equal ( x . exponent ( ) , .5 ) ;
191+ } ,
192+ "has the default interpolator d3.interpolate" : function ( sqrt ) {
193+ var x = sqrt ( ) . range ( [ "red" , "blue" ] ) ;
194+ assert . equal ( x . interpolate ( ) , d3 . interpolate ) ;
195+ assert . equal ( x ( .5 ) , "rgb(75,0,180)" ) ;
196+ } ,
197+ "does not clamp by default" : function ( sqrt ) {
198+ var x = sqrt ( ) ;
199+ assert . isFalse ( x . clamp ( ) ) ;
200+ assert . inDelta ( x ( - .5 ) , - 0.7071068 , 1e-6 ) ;
201+ assert . inDelta ( x ( 1.5 ) , 1.22474487 , 1e-6 ) ;
202+ } ,
203+ "maps a number to a number" : function ( sqrt ) {
204+ var x = sqrt ( ) . domain ( [ 1 , 2 ] ) ;
205+ assert . inDelta ( x ( .5 ) , - 0.7071068 , 1e-6 ) ;
206+ assert . inDelta ( x ( 1 ) , 0 , 1e-6 ) ;
207+ assert . inDelta ( x ( 1.5 ) , 0.5425821 , 1e-6 ) ;
208+ assert . inDelta ( x ( 2 ) , 1 , 1e-6 ) ;
209+ assert . inDelta ( x ( 2.5 ) , 1.4029932 , 1e-6 ) ;
210+ } ,
211+ "observes the specified exponent" : function ( sqrt ) {
212+ var x = sqrt ( ) . exponent ( .5 ) . domain ( [ 1 , 2 ] ) ;
213+ assert . inDelta ( x ( 1 ) , 0 , 1e-6 ) ;
214+ assert . inDelta ( x ( 1.5 ) , 0.5425821 , 1e-6 ) ;
215+ assert . inDelta ( x ( 2 ) , 1 , 1e-6 ) ;
216+ var x = sqrt ( ) . exponent ( 2 ) . domain ( [ 1 , 2 ] ) ;
217+ assert . inDelta ( x ( 1 ) , 0 , 1e-6 ) ;
218+ assert . inDelta ( x ( 1.5 ) , .41666667 , 1e-6 ) ;
219+ assert . inDelta ( x ( 2 ) , 1 , 1e-6 ) ;
220+ var x = sqrt ( ) . exponent ( - 1 ) . domain ( [ 1 , 2 ] ) ;
221+ assert . inDelta ( x ( 1 ) , 0 , 1e-6 ) ;
222+ assert . inDelta ( x ( 1.5 ) , .6666667 , 1e-6 ) ;
223+ assert . inDelta ( x ( 2 ) , 1 , 1e-6 ) ;
224+ } ,
225+ "changing the exponent does not change the domain or range" : function ( sqrt ) {
226+ var x = sqrt ( ) . domain ( [ 1 , 2 ] ) . range ( [ 3 , 4 ] ) , f = d3 . format ( ".6f" ) ;
227+ x . exponent ( .5 ) ;
228+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 1 , 2 ] ) ;
229+ assert . deepEqual ( x . range ( ) , [ 3 , 4 ] ) ;
230+ x . exponent ( 2 ) ;
231+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 1 , 2 ] ) ;
232+ assert . deepEqual ( x . range ( ) , [ 3 , 4 ] ) ;
233+ x . exponent ( - 1 ) ;
234+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 1 , 2 ] ) ;
235+ assert . deepEqual ( x . range ( ) , [ 3 , 4 ] ) ;
236+ } ,
237+ "coerces domain to numbers" : function ( sqrt ) {
238+ var x = sqrt ( ) . domain ( [ new Date ( 1990 , 0 , 1 ) , new Date ( 1991 , 0 , 1 ) ] ) ;
239+ assert . equal ( typeof x . domain ( ) [ 0 ] , "number" ) ;
240+ assert . equal ( typeof x . domain ( ) [ 1 ] , "number" ) ;
241+ assert . inDelta ( x ( new Date ( 1989 , 09 , 20 ) ) , - .2 , 1e-2 ) ;
242+ assert . inDelta ( x ( new Date ( 1990 , 00 , 01 ) ) , 0 , 1e-2 ) ;
243+ assert . inDelta ( x ( new Date ( 1990 , 02 , 15 ) ) , .2 , 1e-2 ) ;
244+ assert . inDelta ( x ( new Date ( 1990 , 04 , 27 ) ) , .4 , 1e-2 ) ;
245+ assert . inDelta ( x ( new Date ( 1991 , 00 , 01 ) ) , 1 , 1e-2 ) ;
246+ assert . inDelta ( x ( new Date ( 1991 , 02 , 15 ) ) , 1.2 , 1e-2 ) ;
247+ var x = sqrt ( ) . domain ( [ "0" , "1" ] ) ;
248+ assert . equal ( typeof x . domain ( ) [ 0 ] , "number" ) ;
249+ assert . equal ( typeof x . domain ( ) [ 1 ] , "number" ) ;
250+ assert . inDelta ( x ( .5 ) , 0.7071068 , 1e-6 ) ;
251+ var x = sqrt ( ) . domain ( [ new Number ( 0 ) , new Number ( 1 ) ] ) ;
252+ assert . equal ( typeof x . domain ( ) [ 0 ] , "number" ) ;
253+ assert . equal ( typeof x . domain ( ) [ 1 ] , "number" ) ;
254+ assert . inDelta ( x ( .5 ) , 0.7071068 , 1e-6 ) ;
255+ } ,
256+ "does not coerce range to numbers" : function ( sqrt ) {
257+ var x = sqrt ( ) . range ( [ "0" , "2" ] ) ;
258+ assert . equal ( typeof x . range ( ) [ 0 ] , "string" ) ;
259+ assert . equal ( typeof x . range ( ) [ 1 ] , "string" ) ;
260+ } ,
261+ "coerces range value to number on invert" : function ( sqrt ) {
262+ var x = sqrt ( ) . range ( [ "0" , "2" ] ) ;
263+ assert . inDelta ( x . invert ( "1" ) , .25 , 1e-6 ) ;
264+ var x = sqrt ( ) . range ( [ new Date ( 1990 , 0 , 1 ) , new Date ( 1991 , 0 , 1 ) ] ) ;
265+ assert . inDelta ( x . invert ( new Date ( 1990 , 6 , 2 , 13 ) ) , .25 , 1e-6 ) ;
266+ var x = sqrt ( ) . range ( [ "#000" , "#fff" ] ) ;
267+ assert . isNaN ( x . invert ( "#999" ) ) ;
268+ } ,
269+ "can specify range values as colors" : function ( sqrt ) {
270+ var x = sqrt ( ) . range ( [ "red" , "blue" ] ) ;
271+ assert . equal ( x ( .25 ) , "rgb(128,0,128)" ) ;
272+ var x = sqrt ( ) . range ( [ "#ff0000" , "#0000ff" ] ) ;
273+ assert . equal ( x ( .25 ) , "rgb(128,0,128)" ) ;
274+ var x = sqrt ( ) . range ( [ "#f00" , "#00f" ] ) ;
275+ assert . equal ( x ( .25 ) , "rgb(128,0,128)" ) ;
276+ var x = sqrt ( ) . range ( [ d3 . rgb ( 255 , 0 , 0 ) , d3 . hsl ( 240 , 1 , .5 ) ] ) ;
277+ assert . equal ( x ( .25 ) , "rgb(128,0,128)" ) ;
278+ var x = sqrt ( ) . range ( [ "hsl(0,100%,50%)" , "hsl(240,100%,50%)" ] ) ;
279+ assert . equal ( x ( .25 ) , "rgb(128,0,128)" ) ;
280+ } ,
281+ "can specify range values as arrays or objects" : function ( sqrt ) {
282+ var x = sqrt ( ) . range ( [ { color : "red" } , { color : "blue" } ] ) ;
283+ assert . deepEqual ( x ( .25 ) , { color : "rgb(128,0,128)" } ) ;
284+ var x = sqrt ( ) . range ( [ [ "red" ] , [ "blue" ] ] ) ;
285+ assert . deepEqual ( x ( .25 ) , [ "rgb(128,0,128)" ] ) ;
286+ } ,
287+ "can specify a custom interpolator" : function ( sqrt ) {
288+ var x = sqrt ( ) . range ( [ "red" , "blue" ] ) . interpolate ( d3 . interpolateHsl ) ;
289+ assert . equal ( x ( .25 ) , "#00ff00" ) ;
290+ } ,
291+ "can clamp to the domain" : function ( sqrt ) {
292+ var x = sqrt ( ) . clamp ( true ) ;
293+ assert . inDelta ( x ( - .5 ) , 0 , 1e-6 ) ;
294+ assert . inDelta ( x ( .25 ) , .5 , 1e-6 ) ;
295+ assert . inDelta ( x ( 1.5 ) , 1 , 1e-6 ) ;
296+ var x = sqrt ( ) . domain ( [ 1 , 0 ] ) . clamp ( true ) ;
297+ assert . inDelta ( x ( - .5 ) , 1 , 1e-6 ) ;
298+ assert . inDelta ( x ( .25 ) , .5 , 1e-6 ) ;
299+ assert . inDelta ( x ( 1.5 ) , 0 , 1e-6 ) ;
300+ } ,
301+ "can generate ticks of varying degree" : function ( sqrt ) {
302+ var x = sqrt ( ) ;
303+ assert . deepEqual ( x . ticks ( 1 ) . map ( x . tickFormat ( 1 ) ) , [ 0 , 1 ] ) ;
304+ assert . deepEqual ( x . ticks ( 2 ) . map ( x . tickFormat ( 2 ) ) , [ 0 , .5 , 1 ] ) ;
305+ assert . deepEqual ( x . ticks ( 5 ) . map ( x . tickFormat ( 5 ) ) , [ 0 , .2 , .4 , .6 , .8 , 1 ] ) ;
306+ assert . deepEqual ( x . ticks ( 10 ) . map ( x . tickFormat ( 10 ) ) , [ 0 , .1 , .2 , .3 , .4 , .5 , .6 , .7 , .8 , .9 , 1 ] ) ;
307+ var x = sqrt ( ) . domain ( [ 1 , 0 ] ) ;
308+ assert . deepEqual ( x . ticks ( 1 ) . map ( x . tickFormat ( 1 ) ) , [ 0 , 1 ] ) ;
309+ assert . deepEqual ( x . ticks ( 2 ) . map ( x . tickFormat ( 2 ) ) , [ 0 , .5 , 1 ] ) ;
310+ assert . deepEqual ( x . ticks ( 5 ) . map ( x . tickFormat ( 5 ) ) , [ 0 , .2 , .4 , .6 , .8 , 1 ] ) ;
311+ assert . deepEqual ( x . ticks ( 10 ) . map ( x . tickFormat ( 10 ) ) , [ 0 , .1 , .2 , .3 , .4 , .5 , .6 , .7 , .8 , .9 , 1 ] ) ;
312+ } ,
313+ "can nice the domain, extending it to round numbers" : function ( sqrt ) {
314+ var x = sqrt ( ) . domain ( [ 1.1 , 10.9 ] ) . nice ( ) , f = d3 . format ( ".6f" ) ;
315+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 1 , 11 ] ) ;
316+ var x = sqrt ( ) . domain ( [ 10.9 , 1.1 ] ) . nice ( ) ;
317+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 11 , 1 ] ) ;
318+ var x = sqrt ( ) . domain ( [ .7 , 11.001 ] ) . nice ( ) ;
319+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 0 , 12 ] ) ;
320+ var x = sqrt ( ) . domain ( [ 123.1 , 6.7 ] ) . nice ( ) ;
321+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 130 , 0 ] ) ;
322+ var x = sqrt ( ) . domain ( [ 0 , .49 ] ) . nice ( ) ;
323+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 0 , .5 ] ) ;
324+ } ,
325+ "can specify a polypower domain and range" : function ( sqrt ) {
326+ var x = sqrt ( ) . domain ( [ - 10 , 0 , 100 ] ) . range ( [ "red" , "white" , "green" ] ) ;
327+ assert . equal ( x ( - 5 ) , "rgb(255,75,75)" ) ;
328+ assert . equal ( x ( 50 ) , "rgb(75,165,75)" ) ;
329+ assert . equal ( x ( 75 ) , "rgb(34,145,34)" ) ;
330+ } ,
331+ "nicing a polypower domain only affects the extent" : function ( sqrt ) {
332+ var x = sqrt ( ) . domain ( [ 1.1 , 1 , 2 , 3 , 10.9 ] ) . nice ( ) , f = d3 . format ( ".6f" ) ;
333+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 1 , 1 , 2 , 3 , 11 ] ) ;
334+ var x = sqrt ( ) . domain ( [ 123.1 , 1 , 2 , 3 , - .9 ] ) . nice ( ) ;
335+ assert . deepEqual ( x . domain ( ) . map ( f ) , [ 130 , 1 , 2 , 3 , "−10.000000" ] ) ;
336+ }
173337 }
174338} ) ;
175339
0 commit comments