|
| 1 | +var Plots = require('@src/plots/plots'); |
| 2 | +var Lib = require('@src/lib'); |
| 3 | + |
1 | 4 | var convertColumnXYZ = require('@src/traces/heatmap/convert_column_xyz'); |
2 | 5 | var Heatmap = require('@src/traces/heatmap'); |
3 | | -var Plots = require('@src/plots/plots'); |
| 6 | + |
| 7 | +var customMatchers = require('../assets/custom_matchers'); |
4 | 8 |
|
5 | 9 |
|
6 | 10 | describe('heatmap supplyDefaults', function() { |
@@ -192,3 +196,106 @@ describe('heatmap convertColumnXYZ', function() { |
192 | 196 | ]); |
193 | 197 | }); |
194 | 198 | }); |
| 199 | + |
| 200 | +describe('heatmap calc', function() { |
| 201 | + 'use strict'; |
| 202 | + |
| 203 | + beforeAll(function() { |
| 204 | + jasmine.addMatchers(customMatchers); |
| 205 | + }); |
| 206 | + |
| 207 | + function _calc(trace) { |
| 208 | + var base = { type: 'heatmap' }, |
| 209 | + trace = Lib.extendFlat({}, base, trace), |
| 210 | + gd = { data: [trace] }; |
| 211 | + |
| 212 | + Plots.supplyDefaults(gd); |
| 213 | + var fullTrace = gd._fullData[0]; |
| 214 | + |
| 215 | + return Heatmap.calc(gd, fullTrace)[0]; |
| 216 | + } |
| 217 | + |
| 218 | + it('should fill in bricks if x/y not given', function() { |
| 219 | + var out = _calc({ |
| 220 | + z: [[1, 2, 3], [3, 1, 2]] |
| 221 | + }); |
| 222 | + |
| 223 | + expect(out.x).toBeCloseToArray([-0.5, 0.5, 1.5, 2.5]); |
| 224 | + expect(out.y).toBeCloseToArray([-0.5, 0.5, 1.5, 2.5]); |
| 225 | + expect(out.z).toBeCloseTo2DArray([[1, 2, 3], [3, 1, 2]]); |
| 226 | + }); |
| 227 | + |
| 228 | + it('should fill in bricks with x0/dx + y0/dy', function() { |
| 229 | + var out = _calc({ |
| 230 | + z: [[1, 2, 3], [3, 1, 2]], |
| 231 | + x0: 10, |
| 232 | + dx: 0.5, |
| 233 | + y0: -2, |
| 234 | + dy: -2 |
| 235 | + }); |
| 236 | + |
| 237 | + expect(out.x).toBeCloseToArray([9.75, 10.25, 10.75, 11.25]); |
| 238 | + expect(out.y).toBeCloseToArray([-1, -3, -5]); |
| 239 | + expect(out.z).toBeCloseTo2DArray([[1, 2, 3], [3, 1, 2]]); |
| 240 | + }); |
| 241 | + |
| 242 | + it('should convert x/y coordinates into bricks', function() { |
| 243 | + var out = _calc({ |
| 244 | + x: [1, 2, 3], |
| 245 | + y: [2, 6], |
| 246 | + z: [[1, 2, 3], [3, 1, 2]] |
| 247 | + }); |
| 248 | + |
| 249 | + expect(out.x).toBeCloseToArray([0.5, 1.5, 2.5, 3.5]); |
| 250 | + expect(out.y).toBeCloseToArray([0, 4, 8]); |
| 251 | + expect(out.z).toBeCloseTo2DArray([[1, 2, 3], [3, 1, 2]]); |
| 252 | + }); |
| 253 | + |
| 254 | + it('should respect brick-link /y coordinates', function() { |
| 255 | + var out = _calc({ |
| 256 | + x: [1, 2, 3, 4], |
| 257 | + y: [2, 6, 10], |
| 258 | + z: [[1, 2, 3], [3, 1, 2]] |
| 259 | + }); |
| 260 | + |
| 261 | + expect(out.x).toBeCloseToArray([1, 2, 3, 4]); |
| 262 | + expect(out.y).toBeCloseToArray([2, 6, 10]); |
| 263 | + expect(out.z).toBeCloseTo2DArray([[1, 2, 3], [3, 1, 2]]); |
| 264 | + }); |
| 265 | + |
| 266 | + it('should handle 1-xy + 1-brick case', function() { |
| 267 | + var out = _calc({ |
| 268 | + x: [2], |
| 269 | + y: [3], |
| 270 | + z: [[1]] |
| 271 | + }); |
| 272 | + |
| 273 | + expect(out.x).toBeCloseToArray([1.5, 2.5]); |
| 274 | + expect(out.y).toBeCloseToArray([2.5, 3.5]); |
| 275 | + expect(out.z).toBeCloseTo2DArray([[1]]); |
| 276 | + }); |
| 277 | + |
| 278 | + it('should handle 1-xy + multi-brick case', function() { |
| 279 | + var out = _calc({ |
| 280 | + x: [2], |
| 281 | + y: [3], |
| 282 | + z: [[1, 2, 3], [3, 1, 2]] |
| 283 | + }); |
| 284 | + |
| 285 | + expect(out.x).toBeCloseToArray([1.5, 2.5, 3.5, 4.5]); |
| 286 | + expect(out.y).toBeCloseToArray([2.5, 3.5, 4.5, 5.5]); |
| 287 | + expect(out.z).toBeCloseTo2DArray([[1, 2, 3], [3, 1, 2]]); |
| 288 | + }); |
| 289 | + |
| 290 | + it('should handle 0-xy + multi-brick case', function() { |
| 291 | + var out = _calc({ |
| 292 | + x: [], |
| 293 | + y: [], |
| 294 | + z: [[1, 2, 3], [3, 1, 2]] |
| 295 | + }); |
| 296 | + |
| 297 | + expect(out.x).toBeCloseToArray([-0.5, 0.5, 1.5, 2.5, 3.5]); |
| 298 | + expect(out.y).toBeCloseToArray([-0.5, 0.5, 1.5, 2.5]); |
| 299 | + expect(out.z).toBeCloseTo2DArray([[1, 2, 3], [3, 1, 2]]); |
| 300 | + }); |
| 301 | +}); |
0 commit comments