/* eslint-disable */ /* global $, describe, it, xit, xdescribe, after, afterEach, expect*/ describe("unit tests for the log scale functions", function() { var placeholder; beforeEach(function() { placeholder = setFixtures('
') .find('#test-container'); }); it('should use linear scale for low dynamic range intervals', function() { var plot = $.plot(placeholder, [], { xaxes: [{ min: 10, max: 11, }] }), axis, ticks; axis = plot.getAxes().xaxis; ticks = $.plot.logTicksGenerator(plot, axis, 10); expect(ticks).toEqual([10, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 11]); }); xit('should use mixed scale for medium dynamic range intervals', function() { var plot = $.plot(placeholder, [], { xaxes: [{ min: 0.2, max: 8, }] }), axis, ticks, outputArray = [0.2, 0.4, 0.6, 1, 2, 3, 5, 8 ]; axis = plot.getAxes().xaxis; ticks = $.plot.logTicksGenerator(plot,axis, 10); for(i = 0; i < ticks.length; i++) { expect(ticks[i]).toBeCloseTo(outputArray[i]); } }); it('should use log scales for high dynamic range intervals', function() { var plot = $.plot(placeholder, [], { xaxes: [{ min: 0.0001, max: 10000, }] }), axis, ticks, axis = plot.getAxes().xaxis; ticks = $.plot.logTicksGenerator(plot,axis, 10); expect(ticks).toEqual([0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 10000]); }); it('should format numbers according to their natural precision', function() { var plot = $.plot(placeholder, [], { xaxes: [{mode: 'log'}] }), xaxis = plot.getXAxes()[0], logFormatter = xaxis.tickFormatter, testVector = [ [1.7000000000000002, '1.7'], [17.000000000000002, '17'], [172, '172'], [1.000, '1'], [0.0004, '0.0004'], [0.00004, '4e-5'], [3.1623E-21, '3e-21'] ]; testVector.forEach(function (t) { var inputValue = t[0], expectedValue = t[1]; expect(logFormatter(inputValue, xaxis)).toBe(expectedValue); }); }); it('should custom the specified precision of endpoints', function(){ var plot = $.plot(placeholder, [], { xaxes: [{mode: 'log'}] }), xaxis = plot.getXAxes()[0], logFormatter = xaxis.tickFormatter, testVector = [ [1.7000000000000002, '1.700', 3], [1.7000000000000002, '1.70', 2], [17.000000000000002, '17.000', 3], [172, '172.0', 1], [1.000, '1.000', 3], [1, '1.00', 2], [0.00004, '4.0e-5', 3], [4.13567003E-8, '4.1e-8', 9], [413.567003E-8, '4.136e-6', 9], [3.1623E-21, '3e-21', 21], [4.13567003E+8, '4e8', -9], [413.567003E+8, '4.1e10', -9], [3.1623E+21, '3.2e21', -20], [0, '0', -1] ]; testVector.forEach(function (t) { var inputValue = t[0], expectedValue = t[1], precision = t[2]; expect(logFormatter(inputValue, xaxis, precision)).toBe(expectedValue); }); }); it('should handle intervals which starts close to 0', function() { var testVector = [ [0, 50, [0.1, 100]], [1E-40, 1.01, [1e-35, 10]], [1E-40, 1E+40, [1e-39, 1e40]], [Number.MIN_VALUE, 1e-20, [10e-273, 1e-20]] ]; testVector.forEach(function (t) { var min = t[0], max = t[1], expectedTicks = t[2], plot = $.plot(placeholder, [], { xaxes: [{ min: min, max: max, }] }), axis, ticks; axis = plot.getAxes().xaxis; ticks = $.plot.logTicksGenerator(plot, axis); expect(ticks[0]).toBeCloseTo(expectedTicks[0], 10); expect(ticks[ticks.length - 1]).toBeCloseTo(expectedTicks[1], 10); }); }); it('should set axis.min to be less than axis.max', function() { var plot = $.plot(placeholder, [[0, 1, 2, 3]], { xaxes: [{ mode: 'log', offset : { below: -1, above: -1 }, max: 1 }] }), axis, ticks, axis = plot.getAxes().xaxis; expect(axis.min).toBeLessThan(axis.max); }); it('should set axis.max to default max if less then axis.min', function() { var plot = $.plot(placeholder, [[0, 1, 2, 3]], { xaxes: [{ mode: 'log', offset : { below: -5, above: -5 }, max: 1 }] }), axis, ticks, axis = plot.getAxes().xaxis; expect(axis.min).toBe(0.1); expect(axis.max).toBe(1); }); it('should set min of axis with no data associated with it to be greater than 0', function() { var plot = $.plot(placeholder, [[0, 1, 2, 3]], { xaxes: [ { mode: 'log', min: 0, max: 10 }, { mode: 'log', autoScale: 'loose', min: 0, max: 10, show: true }] }), axis, axis = plot.getXAxes()[1]; expect(axis.min).toBeGreaterThan(0); }); }); describe("integration tests for log scale functions", function() { var placeholder; var compareNumbers = function(a, b) { return a - b; } var queryPlotForYTicks = function() { var actualTicks = []; var yAxisDivs = $('.yAxis'); expect(yAxisDivs.length).toBe(1); var childDivs = yAxisDivs.find('.tickLabel'); childDivs.each(function(i, e) { actualTicks.push(e.textContent); }); return actualTicks.sort(compareNumbers); }; beforeEach(function() { placeholder = setFixtures('
') .find('#test-container'); }); it('should use linear scale for low dynamic range intervals', function() { var lineardata1 = [ [0, 1], [1, 1.1], [2, 1.2], [3, 1.3], [4, 1.4], [5, 1.5], [6, 1.6], [7, 1.7], [8, 1.8], [9, 1.9], [10, 2] ]; $.plot(placeholder, [lineardata1], { yaxis: { mode: 'log', autoScale: 'exact' } }); expect(queryPlotForYTicks()).toEqual(['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6', '1.7', '1.8', '1.9', '2']); }); it('should use log scales for high dynamic range intervals', function() { var logdata1 = [ [0, 0.0001], [1, 0.001], [2, 0.01], [3, 0.1], [4, 1], [5, 10], [6, 100], [7, 1000], [8, 10000] ]; $.plot(placeholder, [logdata1], { yaxis: { mode: 'log', autoScale: 'exact' } }); expect(queryPlotForYTicks()).toEqual(['0.0001', '0.001', '0.01', '0.1', '1', '10', '100', '1000', '10000']); }); it('should allow a user specified tick formatter', function() { var logdata1 = [ [0, 0.0001], [1, 0.001], [2, 0.01], [3, 0.1], [4, 1], [5, 10], [6, 100], [7, 1000], [8, 10000] ]; $.plot(placeholder, [logdata1], { yaxis: { mode: 'log', tickFormatter: function () { return 'log tick'; }, autoScale: 'exact' } }); expect(queryPlotForYTicks()).toEqual(['log tick', 'log tick', 'log tick', 'log tick', 'log tick', 'log tick', 'log tick', 'log tick', 'log tick']); }); it('should set the minimum of the logaxis to minimum datapoint between 0 and 0.1', function() { var logdata1 = [ [0, 0], [1, 0.0001], [2, 0.001], [3, 0.01], [4, 0.1], [5, 1], [6, 10], [7, 100] ]; var plot = $.plot(placeholder, [logdata1], { xaxis: { mode: 'log', autoScale: 'exact' }, yaxis: { mode: 'log', autoScale: 'exact' } }), axes = plot.getAxes(); expect(axes.xaxis.min).toBe(0.1); expect(axes.yaxis.min).toBe(0.0001); }); it('should multiply the possible ticks with 5 if the original interval is too little', function() { var logdata = [ [[0, 1E40], [1, 4E40], [2, 8E40], [3, 1E41], [4, 2E41], [5, 4E41]], [[0, 1000], [1, 1010], [2, 1E4], [3, 1E5]], [[0, 1], [1, 3], [2, 10], [3, 30], [4, 40], [5, 50]] ], expectedTicks = [ ['1e40', '5e40', '1e41'], ['1000', '5000', '10000', '50000', '100000'], ['1', '5', '10', '50'] ], plot, i; for (i = 0; i < logdata.length; i++) { plot = $.plot(placeholder, [logdata[i]], { yaxis: { mode: 'log', autoScale: 'exact' } }), ticks = queryPlotForYTicks(); expect(queryPlotForYTicks()).toEqual(expectedTicks[i]); } }); it('should use only power of ten for large intervals', function() { var logdata = [ [[0, 1], [1, 4E20], [2, 8E30], [3, 4E41]], [[0, 1000], [1, 1E5], [2, 1E7], [3, 1E10]], [[0, 1e-12], [1, 1e-5], [2, 10], [3, 30], [4, 40], [5, 500]] ], expectedTicks = [ ['100', '1000000', '1e10', '1e14', '10e17', '1e22', '1e26', '1e30', '1e34', '1e38'], ['1000', '10000', '100000', '1000000', '10000000', '1e8', '10e8', '1e10'], ['1e-11', '1e-9', '1e-7', '1e-5', '0.001', '0.1', '10'] ], plot, i; for (i = 0; i < logdata.length; i++) { plot = $.plot(placeholder, [logdata[i]], { yaxis: { mode: 'log', autoScale: 'exact' } }), ticks = queryPlotForYTicks(); expect(queryPlotForYTicks()).toEqual(expectedTicks[i]); } }); });