interval.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. describe('scale_interval', function() {
  2. var utHelper = window.utHelper;
  3. var testCase = utHelper.prepare([
  4. 'echarts/src/scale/helper',
  5. 'echarts/src/util/number',
  6. 'echarts/src/component/grid',
  7. 'echarts/src/chart/line',
  8. 'echarts/src/chart/bar'
  9. ]);
  10. describe('extreme', function () {
  11. testCase.createChart()('ticks_min_max', function () {
  12. var min = 0;
  13. var max = 54.090909;
  14. var splitNumber = 5;
  15. this.chart.setOption({
  16. xAxis: {},
  17. yAxis: {
  18. type: 'value',
  19. min: min,
  20. max: max,
  21. interval: max / splitNumber,
  22. splitNumber: splitNumber
  23. },
  24. series: [{type: 'line', data: []}]
  25. });
  26. var yAxis = this.chart.getModel().getComponent('yAxis', 0);
  27. var scale = yAxis.axis.scale;
  28. var ticks = scale.getTicks();
  29. expect(ticks[0]).toEqual(min);
  30. expect(ticks[ticks.length - 1]).toEqual(max);
  31. });
  32. testCase.createChart()('ticks_small_value', function () {
  33. this.chart.setOption({
  34. tooltip: {},
  35. xAxis: [
  36. {
  37. type : 'category',
  38. data : ['Mon'],
  39. axisTick: {
  40. alignWithLabel: true
  41. }
  42. }
  43. ],
  44. yAxis : [
  45. {
  46. type : 'value'
  47. }
  48. ],
  49. series : [
  50. {
  51. name:'',
  52. type:'bar',
  53. data:[0.0000034]
  54. }
  55. ]
  56. });
  57. var yAxis = this.chart.getModel().getComponent('yAxis', 0);
  58. var scale = yAxis.axis.scale;
  59. var ticks = scale.getTicks();
  60. var labels = scale.getTicksLabels();
  61. var labelPrecisioned = scale.getLabel(0.0000005, {precision: 10});
  62. expect(ticks).toEqual(
  63. [0, 0.0000005, 0.000001, 0.0000015, 0.000002, 0.0000025, 0.000003, 0.0000035]
  64. );
  65. expect(labels).toEqual(
  66. // Should not be '5e-7'
  67. ['0', '0.0000005', '0.000001', '0.0000015', '0.000002', '0.0000025', '0.000003', '0.0000035']
  68. );
  69. expect(labelPrecisioned).toEqual('0.0000005000');
  70. });
  71. });
  72. describe('ticks', function () {
  73. // testCase.createChart()('randomCover', function (scaleHelper) {
  74. // doRandomTest(scaleHelper, 10, 5);
  75. // });
  76. function randomNumber(quantity) {
  77. return (Math.random() - 0.5) * Math.pow(10, (Math.random() - 0.5) * quantity);
  78. }
  79. function check(cond) {
  80. expect(cond).toEqual(true);
  81. return +cond;
  82. }
  83. function doSingleTest(scaleHelper, numberUtil, extent, splitNumber) {
  84. var result = scaleHelper.intervalScaleNiceTicks(extent, splitNumber);
  85. var intervalPrecision = result.intervalPrecision;
  86. var interval = result.interval;
  87. var niceTickExtent = result.niceTickExtent;
  88. var fails = [];
  89. !check(utHelper.isValueFinite(interval)) && fails.push(0);
  90. !check(utHelper.isValueFinite(intervalPrecision)) && fails.push(1);
  91. !check(utHelper.isValueFinite(niceTickExtent[0])) && fails.push(2);
  92. !check(utHelper.isValueFinite(niceTickExtent[1])) && fails.push(3);
  93. !check(niceTickExtent[0] >= extent[0]) && fails.push(4);
  94. !check(niceTickExtent[1] <= extent[1]) && fails.push(5);
  95. !check(niceTickExtent[1] >= niceTickExtent[0]) && fails.push(6);
  96. var ticks = scaleHelper.intervalScaleGetTicks(interval, extent, niceTickExtent, intervalPrecision);
  97. !check(ticks.length > 0) && fails.push(7);
  98. !check(ticks[0] === extent[0] && ticks[ticks.length - 1] === extent[1]) && fails.push(8);
  99. var ticksOK = 1;
  100. for (var i = 1; i < ticks.length; i++) {
  101. ticksOK &= check(ticks[i - 1] < ticks[i]);
  102. if (ticks[i] !== extent[0] && ticks[i] !== extent[1]) {
  103. var tickPrecision = numberUtil.getPrecisionSafe(ticks[i]);
  104. ticksOK &= check(tickPrecision <= intervalPrecision);
  105. }
  106. }
  107. !ticksOK && fails.push(9);
  108. // check precision rounding error ????????????
  109. if (fails.length) {
  110. utHelper.print(
  111. 'FAIL:[' + fails
  112. + '] extent:[' + extent + '] niceTickExtent:[' + niceTickExtent + '] ticks:['
  113. + ticks + '] '
  114. );
  115. }
  116. }
  117. function doRandomTest(scaleHelper, numberUtil, count, splitNumber, quantity) {
  118. for (var i = 0; i < count; i++) {
  119. var extent = [];
  120. extent[0] = randomNumber(quantity);
  121. extent[1] = extent[0] + randomNumber(quantity);
  122. if (extent[1] === extent[0]) {
  123. extent[1] = extent[0] + 1;
  124. }
  125. if (extent[0] > extent[1]) {
  126. extent.reverse();
  127. }
  128. doSingleTest(scaleHelper, numberUtil, extent, splitNumber);
  129. }
  130. }
  131. testCase.createChart()('cases', function (scaleHelper, numberUtil) {
  132. doSingleTest(scaleHelper, numberUtil, [3.7210923755786733e-8,176.4352516752083], 1);
  133. doSingleTest(scaleHelper, numberUtil, [1550932.3941785, 1550932.3941786], 5);
  134. doSingleTest(scaleHelper, numberUtil, [-3711126.9907707,-3711126.990770699], 5);
  135. });
  136. testCase.createChart()('randomCover', function (scaleHelper, numberUtil) {
  137. doRandomTest(scaleHelper, numberUtil, 500, 5, 20);
  138. doRandomTest(scaleHelper, numberUtil, 200, 1, 20);
  139. });
  140. });
  141. });