Rebase PR 292
authorDan Vanderkam <danvdk@gmail.com>
Wed, 22 Oct 2014 02:41:27 +0000 (22:41 -0400)
committerDan Vanderkam <danvdk@gmail.com>
Wed, 22 Oct 2014 02:41:27 +0000 (22:41 -0400)
auto_tests/misc/local.html
auto_tests/tests/date_ticker.js [new file with mode: 0644]
auto_tests/tests/numeric_ticker.js
auto_tests/tests/tickers.disabled-js [deleted file]
dygraph-options-reference.js
dygraph-tickers.js
dygraph-utils.js
dygraph.js
tests/labelsDateUTC.html [new file with mode: 0644]
tests/x-axis-formatter.html

index e04bd62..fa74656 100644 (file)
@@ -28,6 +28,7 @@
   <script type="text/javascript" src="../tests/css.js"></script>
   <script type="text/javascript" src="../tests/custom_bars.js"></script>
   <script type="text/javascript" src="../tests/date_formats.js"></script>
+  <script type="text/javascript" src="../tests/date_ticker.js"></script>
   <script type="text/javascript" src="../tests/dygraph-options-tests.js"></script>
   <script type="text/javascript" src="../tests/error_bars.js"></script>
   <script type="text/javascript" src="../tests/fill_step_plot.js"></script>
@@ -55,9 +56,6 @@
   <script type="text/javascript" src="../tests/simple_drawing.js"></script>
   <script type="text/javascript" src="../tests/step_plot_per_series.js"></script>
   <script type="text/javascript" src="../tests/stacked.js"></script>
-  <!--
-  <script type="text/javascript" src="../tests/tickers.js"></script>
-  -->
   <script type="text/javascript" src="../tests/to_dom_coords.js"></script>
   <script type="text/javascript" src="../tests/resize.js"></script>
   <script type="text/javascript" src="../tests/plugins_legend.js"></script>
diff --git a/auto_tests/tests/date_ticker.js b/auto_tests/tests/date_ticker.js
new file mode 100644 (file)
index 0000000..a23a326
--- /dev/null
@@ -0,0 +1,250 @@
+/**
+ * @fileoverview Test cases for the tick-generating functions.
+ * These were generated by adding logging code to the old ticker functions. The
+ * tests serve to track existing behavior should it change in the future.
+ *
+ * @author danvdk@gmail.com (Dan Vanderkam)
+ */
+
+var DateTickerTestCase = TestCase("date-ticker-tests");
+
+DateTickerTestCase.prototype.setUp = function() {
+  document.body.innerHTML = "<div id='graph'></div>";
+};
+
+DateTickerTestCase.prototype.createOptionsViewForAxis = function(axis, dict) {
+  return function (x) {
+    if (dict && dict.hasOwnProperty(x)) {
+      return dict[x];
+    }
+    if (Dygraph.DEFAULT_ATTRS.axes[axis].hasOwnProperty(x)) {
+      return Dygraph.DEFAULT_ATTRS.axes[axis][x];
+    }
+    if (Dygraph.DEFAULT_ATTRS.hasOwnProperty(x)) {
+      return Dygraph.DEFAULT_ATTRS[x];
+    }
+    if (x == 'axisLabelFormatter') return null;
+    throw "mysterious " + axis + "-axis option: " + x;
+  };
+};
+
+// Broken, since it assumes EST.
+DateTickerTestCase.prototype.testBasicDateTicker = function() {
+  var opts = {labelsDateUTC: true};
+  var options = this.createOptionsViewForAxis('x', opts);
+  
+  var ticks = Dygraph.dateTicker(-1797534000000, 1255579200000, 800, options);
+  var expected_ticks = [
+      {"v":-1577923200000,"label":"1920"},
+      {"v":-1262304000000,"label":"1930"},
+      {"v":-946771200000, "label":"1940"},
+      {"v":-631152000000, "label":"1950"},
+      {"v":-315619200000, "label":"1960"},
+      {"v": 0,            "label":"1970"},
+      {"v": 315532800000, "label":"1980"},
+      {"v": 631152000000, "label":"1990"},
+      {"v": 946684800000, "label":"2000"}
+  ];
+  assertEquals(expected_ticks, ticks);
+  
+  var start = Date.UTC(1999, 11, 31, 14, 0, 0);
+  var end = Date.UTC(2000,  0,  1, 12, 0, 0);
+  var granularity = Dygraph.TWO_HOURLY;
+  ticks = Dygraph.getDateAxis(start, end, granularity, options);
+  expected_ticks = [ // months of the year are zero-based.
+      {v: Date.UTC(1999, 11, 31, 14, 0, 0), label: '14:00'},
+      {v: Date.UTC(1999, 11, 31, 16, 0, 0), label: '16:00'},
+      {v: Date.UTC(1999, 11, 31, 18, 0, 0), label: '18:00'},
+      {v: Date.UTC(1999, 11, 31, 20, 0, 0), label: '20:00'},
+      {v: Date.UTC(1999, 11, 31, 22, 0, 0), label: '22:00'},
+      {v: Date.UTC(2000,  0,  1,  0, 0, 0), label: '01Jan'},
+      {v: Date.UTC(2000,  0,  1,  2, 0, 0), label: '02:00'},
+      {v: Date.UTC(2000,  0,  1,  4, 0, 0), label: '04:00'},
+      {v: Date.UTC(2000,  0,  1,  6, 0, 0), label: '06:00'},
+      {v: Date.UTC(2000,  0,  1,  8, 0, 0), label: '08:00'},
+      {v: Date.UTC(2000,  0,  1, 10, 0, 0), label: '10:00'},
+      {v: Date.UTC(2000,  0,  1, 12, 0, 0), label: '12:00'}
+  ];
+  assertEquals(expected_ticks, ticks);
+};
+
+DateTickerTestCase.prototype.testAllDateTickers = function() {
+  var opts = {labelsDateUTC: true};
+  var options = this.createOptionsViewForAxis('x', opts);
+
+  // For granularities finer than MONTHLY, the first tick returned tick 
+  // could lie outside [start_time, end_time] range in the original code.
+  // In these tests, those spurious ticks are removed to test new behavior.
+  
+  assertEquals([{"v":-1577923200000,"label":"1920"},{"v":-1262304000000,"label":"1930"},{"v":-946771200000,"label":"1940"},{"v":-631152000000,"label":"1950"},{"v":-315619200000,"label":"1960"},{"v":0,"label":"1970"},{"v":315532800000,"label":"1980"},{"v":631152000000,"label":"1990"},{"v":946684800000,"label":"2000"}], Dygraph.dateTicker(-1797552000000, 1255561200000, 800, options));
+  assertEquals([{"v":-5364662400000,"label":"1800"},{"v":-2208988800000,"label":"1900"}], Dygraph.dateTicker(-6122044800000, 189302400000, 480, options));
+  assertEquals([{"v":1041120000000,"label":"29Dec"},{"v":1041724800000,"label":"05Jan"},{"v":1042329600000,"label":"12Jan"},{"v":1042934400000,"label":"19Jan"},{"v":1043539200000,"label":"26Jan"},{"v":1044144000000,"label":"02Feb"},{"v":1044748800000,"label":"09Feb"},{"v":1045353600000,"label":"16Feb"}], Dygraph.dateTicker(1041120000000, 1045353600000, 640, options));
+  assertEquals([{"v":1041379200000,"label":"Jan 03"},{"v":1072915200000,"label":"Jan 04"},{"v":1104537600000,"label":"Jan 05"},{"v":1136073600000,"label":"Jan 06"},{"v":1167609600000,"label":"Jan 07"},{"v":1199145600000,"label":"Jan 08"},{"v":1230768000000,"label":"Jan 09"},{"v":1262304000000,"label":"Jan 10"},{"v":1293840000000,"label":"Jan 11"}], Dygraph.dateTicker(1041120000000, 1307833200000, 800, options));
+  assertEquals([{"v":1159660800000,"label":"01Oct"},{"v":1160265600000,"label":"08Oct"},{"v":1160870400000,"label":"15Oct"},{"v":1161475200000,"label":"22Oct"},{"v":1162080000000,"label":"29Oct"}], Dygraph.dateTicker(1159657200000, 1162252800000, 480, options));
+  assertEquals([{"v":1159660800000,"label":"01Oct"},{"v":1160265600000,"label":"08Oct"},{"v":1160870400000,"label":"15Oct"},{"v":1161475200000,"label":"22Oct"},{"v":1162080000000,"label":"29Oct"}], Dygraph.dateTicker(1159657200000, 1162252800000, 640, options));
+  assertEquals([{"v":1159660800000,"label":"01Oct"},{"v":1160265600000,"label":"08Oct"},{"v":1160870400000,"label":"15Oct"},{"v":1161475200000,"label":"22Oct"},{"v":1162080000000,"label":"29Oct"},{"v":1162684800000,"label":"05Nov"},{"v":1163289600000,"label":"12Nov"},{"v":1163894400000,"label":"19Nov"},{"v":1164499200000,"label":"26Nov"}], Dygraph.dateTicker(1159657200000, 1164758400000, 1150, options));
+  assertEquals([{"v":1159660800000,"label":"Oct 06"},{"v":1162339200000,"label":"Nov 06"}], Dygraph.dateTicker(1159657200000, 1164758400000, 400, options));
+  assertEquals([{"v":1159660800000,"label":"01Oct"},{"v":1160265600000,"label":"08Oct"},{"v":1160870400000,"label":"15Oct"},{"v":1161475200000,"label":"22Oct"},{"v":1162080000000,"label":"29Oct"},{"v":1162684800000,"label":"05Nov"},{"v":1163289600000,"label":"12Nov"},{"v":1163894400000,"label":"19Nov"},{"v":1164499200000,"label":"26Nov"}], Dygraph.dateTicker(1159657200000, 1164758400000, 500, options));
+  assertEquals([{"v":1159660800000,"label":"01Oct"},{"v":1160265600000,"label":"08Oct"},{"v":1160870400000,"label":"15Oct"},{"v":1161475200000,"label":"22Oct"},{"v":1162080000000,"label":"29Oct"},{"v":1162684800000,"label":"05Nov"},{"v":1163289600000,"label":"12Nov"},{"v":1163894400000,"label":"19Nov"},{"v":1164499200000,"label":"26Nov"}], Dygraph.dateTicker(1159657200000, 1164758400000, 600, options));
+  assertEquals([{"v":1160265600000,"label":"08Oct"},{"v":1160870400000,"label":"15Oct"},{"v":1161475200000,"label":"22Oct"},{"v":1162080000000,"label":"29Oct"},{"v":1162684800000,"label":"05Nov"},{"v":1163289600000,"label":"12Nov"}], Dygraph.dateTicker(1160243979962, 1163887694248, 600, options));
+
+  assertEquals([{"v":1160870400000,"label":"15Oct"}], Dygraph.dateTicker(1160521200000, 1161298800000, 480, options));
+  assertEquals([{"v":1161475200000,"label":"22Oct"},{"v":1161561600000,"label":"23Oct"},{"v":1161648000000,"label":"24Oct"},{"v":1161734400000,"label":"25Oct"},{"v":1161820800000,"label":"26Oct"},{"v":1161907200000,"label":"27Oct"},{"v":1161993600000,"label":"28Oct"}], Dygraph.dateTicker(1161471164461, 1161994065957, 600, options));
+  assertEquals([{"v":1161561600000,"label":"23Oct"},{"v":1161583200000,"label":"06:00"},{"v":1161604800000,"label":"12:00"},{"v":1161626400000,"label":"18:00"}], Dygraph.dateTicker(1161557878860, 1161642991675, 600, options));
+  assertEquals([{"v":1161756000000,"label":"06:00"},{"v":1161759600000,"label":"07:00"},{"v":1161763200000,"label":"08:00"},{"v":1161766800000,"label":"09:00"},{"v":1161770400000,"label":"10:00"},{"v":1161774000000,"label":"11:00"},{"v":1161777600000,"label":"12:00"}], Dygraph.dateTicker(1161752537840, 1161777663332, 600, options));
+  assertEquals([{"v":1167609600000,"label":"01Jan"},{"v":1167696000000,"label":"02Jan"},{"v":1167782400000,"label":"03Jan"},{"v":1167868800000,"label":"04Jan"},{"v":1167955200000,"label":"05Jan"},{"v":1168041600000,"label":"06Jan"},{"v":1168128000000,"label":"07Jan"},{"v":1168214400000,"label":"08Jan"},{"v":1168300800000,"label":"09Jan"}], Dygraph.dateTicker(1167609600000, 1168300800000, 480, options));
+  assertEquals([{"v":1167609600000,"label":"Jan 07"}], Dygraph.dateTicker(1167609600000, 1199059200000, 100, options));
+  assertEquals([{"v":1167609600000,"label":"Jan 07"},{"v":1175385600000,"label":"Apr 07"},{"v":1183248000000,"label":"Jul 07"},{"v":1191196800000,"label":"Oct 07"}], Dygraph.dateTicker(1167609600000, 1199059200000, 300, options));
+  assertEquals([{"v":1167609600000,"label":"Jan 07"},{"v":1175385600000,"label":"Apr 07"},{"v":1183248000000,"label":"Jul 07"},{"v":1191196800000,"label":"Oct 07"}], Dygraph.dateTicker(1167609600000, 1199059200000, 480, options));
+  assertEquals([{"v":1167609600000,"label":"Jan 07"},{"v":1175385600000,"label":"Apr 07"},{"v":1183248000000,"label":"Jul 07"},{"v":1191196800000,"label":"Oct 07"}], Dygraph.dateTicker(1167609600000, 1199059200000, 600, options));
+  assertEquals([{"v":1160870400000,"label":"15Oct"}], Dygraph.dateTicker(1160521200000, 1161298800000, 480, options));
+  assertEquals([{"v":1167609600000,"label":"Jan 07"},{"v":1170288000000,"label":"Feb 07"},{"v":1172707200000,"label":"Mar 07"},{"v":1175385600000,"label":"Apr 07"},{"v":1177977600000,"label":"May 07"},{"v":1180656000000,"label":"Jun 07"},{"v":1183248000000,"label":"Jul 07"},{"v":1185926400000,"label":"Aug 07"},{"v":1188604800000,"label":"Sep 07"},{"v":1191196800000,"label":"Oct 07"},{"v":1193875200000,"label":"Nov 07"},{"v":1196467200000,"label":"Dec 07"}], Dygraph.dateTicker(1167609600000, 1199059200000, 800, options));
+
+  assertEquals([{"v":1293840000000,"label":"Jan 11"},{"v":1296518400000,"label":"Feb 11"},{"v":1298937600000,"label":"Mar 11"},{"v":1301616000000,"label":"Apr 11"},{"v":1304208000000,"label":"May 11"},{"v":1306886400000,"label":"Jun 11"},{"v":1309478400000,"label":"Jul 11"},{"v":1312156800000,"label":"Aug 11"}], Dygraph.dateTicker(1293753600000, 1312844400000, 727, options));
+  assertEquals([{"v":1201824000000,"label":"01Feb"},{"v":1201910400000,"label":"02Feb"},{"v":1201996800000,"label":"03Feb"},{"v":1202083200000,"label":"04Feb"},{"v":1202169600000,"label":"05Feb"},{"v":1202256000000,"label":"06Feb"}], Dygraph.dateTicker(1201824000000, 1202256000000, 700, options));
+  assertEquals([{"v":1210118400000,"label":"07May"},{"v":1210140000000,"label":"06:00"},{"v":1210161600000,"label":"12:00"},{"v":1210183200000,"label":"18:00"},{"v":1210204800000,"label":"08May"},{"v":1210226400000,"label":"06:00"},{"v":1210248000000,"label":"12:00"},{"v":1210269600000,"label":"18:00"},{"v":1210291200000,"label":"09May"}], Dygraph.dateTicker(1210114800000, 1210291200000, 480, options));
+  assertEquals([{"v":1210118400000,"label":"07May"},{"v":1210204800000,"label":"08May"},{"v":1210291200000,"label":"09May"},{"v":1210377600000,"label":"10May"},{"v":1210464000000,"label":"11May"}], Dygraph.dateTicker(1210114800000, 1210464000000, 480, options));
+  assertEquals([{"v":1210118400000,"label":"07May"},{"v":1210204800000,"label":"08May"},{"v":1210291200000,"label":"09May"},{"v":1210377600000,"label":"10May"},{"v":1210464000000,"label":"11May"},{"v":1210550400000,"label":"12May"}], Dygraph.dateTicker(1210114800000, 1210550400000, 480, options));
+  assertEquals([{"v":1214870400000,"label":"01Jul"},{"v":1214872200000,"label":"00:30"},{"v":1214874000000,"label":"01:00"},{"v":1214875800000,"label":"01:30"}], Dygraph.dateTicker(1214870400000, 1214877599000, 600, options));
+  assertEquals([{"v":1214870400000,"label":"Jul 08"},{"v":1217548800000,"label":"Aug 08"},{"v":1220227200000,"label":"Sep 08"}], Dygraph.dateTicker(1214866800000, 1222747200000, 600, options));
+  assertEquals([{"v":1215820800000,"label":"12Jul"},{"v":1215842400000,"label":"06:00"},{"v":1215864000000,"label":"12:00"},{"v":1215885600000,"label":"18:00"},{"v":1215907200000,"label":"13Jul"},{"v":1215928800000,"label":"06:00"},{"v":1215950400000,"label":"12:00"},{"v":1215972000000,"label":"18:00"}], Dygraph.dateTicker(1215817200000, 1215989940000, 600, options));
+  assertEquals([{"v":1246752000000,"label":"05Jul"},{"v":1247356800000,"label":"12Jul"},{"v":1247961600000,"label":"19Jul"}], Dygraph.dateTicker(1246402800000, 1248217200000, 600, options));
+  assertEquals([{"v":1246752000000,"label":"05Jul"},{"v":1247356800000,"label":"12Jul"},{"v":1247961600000,"label":"19Jul"},{"v":1248566400000,"label":"26Jul"},{"v":1249171200000,"label":"02Aug"}], Dygraph.dateTicker(1246402800000, 1249340400000, 600, options));
+  assertEquals([{"v":1247356800000,"label":"12Jul"},{"v":1247360400000,"label":"01:00"},{"v":1247364000000,"label":"02:00"},{"v":1247367600000,"label":"03:00"},{"v":1247371200000,"label":"04:00"},{"v":1247374800000,"label":"05:00"},{"v":1247378400000,"label":"06:00"}], Dygraph.dateTicker(1247356800000, 1247378400000, 600, options));
+
+  assertEquals([{"v":1247356800000,"label":"12Jul"},{"v":1247360400000,"label":"01:00"},{"v":1247364000000,"label":"02:00"},{"v":1247367600000,"label":"03:00"},{"v":1247371200000,"label":"04:00"},{"v":1247374800000,"label":"05:00"},{"v":1247378400000,"label":"06:00"}], Dygraph.dateTicker(1247356800000, 1247378400000, 600, options));
+  assertEquals([{"v":1254268800000,"label":"30Sep"},{"v":1254355200000,"label":"01Oct"},{"v":1254441600000,"label":"02Oct"},{"v":1254528000000,"label":"03Oct"},{"v":1254614400000,"label":"04Oct"},{"v":1254700800000,"label":"05Oct"},{"v":1254787200000,"label":"06Oct"},{"v":1254873600000,"label":"07Oct"},{"v":1254960000000,"label":"08Oct"},{"v":1255046400000,"label":"09Oct"},{"v":1255132800000,"label":"10Oct"}], Dygraph.dateTicker(1254222000000, 1255172400000, 900, options));
+  assertEquals([{"v":1254441600000,"label":"02Oct"},{"v":1254528000000,"label":"03Oct"},{"v":1254614400000,"label":"04Oct"},{"v":1254700800000,"label":"05Oct"},{"v":1254787200000,"label":"06Oct"},{"v":1254873600000,"label":"07Oct"},{"v":1254960000000,"label":"08Oct"}], Dygraph.dateTicker(1254394800000, 1254999600000, 900, options));
+  assertEquals([{"v":1259625600000,"label":"01Dec"},{"v":1259712000000,"label":"02Dec"},{"v":1259798400000,"label":"03Dec"},{"v":1259884800000,"label":"04Dec"},{"v":1259971200000,"label":"05Dec"},{"v":1260057600000,"label":"06Dec"},{"v":1260144000000,"label":"07Dec"}], Dygraph.dateTicker(1259625600000, 1260144000000, 480, options));
+  assertEquals([{"v":1259625600000,"label":"01Dec"},{"v":1259712000000,"label":"02Dec"},{"v":1259798400000,"label":"03Dec"},{"v":1259884800000,"label":"04Dec"},{"v":1259971200000,"label":"05Dec"},{"v":1260057600000,"label":"06Dec"},{"v":1260144000000,"label":"07Dec"}], Dygraph.dateTicker(1259625600000, 1260144000000, 600, options));
+  assertEquals([{"v":1260057600000,"label":"06Dec"},{"v":1260662400000,"label":"13Dec"},{"v":1261267200000,"label":"20Dec"},{"v":1261872000000,"label":"27Dec"},{"v":1262476800000,"label":"03Jan"},{"v":1263081600000,"label":"10Jan"},{"v":1263686400000,"label":"17Jan"},{"v":1264291200000,"label":"24Jan"}], Dygraph.dateTicker(1260057600000, 1264291200000, 640, options));
+  assertEquals([{"v":1262304000000,"label":"Jan 10"},{"v":1264982400000,"label":"Feb 10"},{"v":1267401600000,"label":"Mar 10"},{"v":1270080000000,"label":"Apr 10"}], Dygraph.dateTicker(1262304000000, 1270857600000, 640, options));
+  assertEquals([{"v":1288915200000,"label":"05Nov"},{"v":1288936800000,"label":"06:00"},{"v":1288958400000,"label":"12:00"},{"v":1288980000000,"label":"18:00"},{"v":1289001600000,"label":"06Nov"},{"v":1289023200000,"label":"06:00"},{"v":1289044800000,"label":"12:00"},{"v":1289066400000,"label":"18:00"},{"v":1289088000000,"label":"07Nov"},{"v":1289109600000,"label":"06:00"},{"v":1289131200000,"label":"12:00"},{"v":1289152800000,"label":"18:00"},{"v":1289174400000,"label":"08Nov"},{"v":1289196000000,"label":"06:00"},{"v":1289217600000,"label":"12:00"},{"v":1289239200000,"label":"18:00"},{"v":1289260800000,"label":"09Nov"}], Dygraph.dateTicker(1288911600000, 1289260800000, 1024, options));
+  assertEquals([{"v":1291161600000,"label":"01Dec"},{"v":1291248000000,"label":"02Dec"},{"v":1291334400000,"label":"03Dec"},{"v":1291420800000,"label":"04Dec"},{"v":1291507200000,"label":"05Dec"},{"v":1291593600000,"label":"06Dec"},{"v":1291680000000,"label":"07Dec"},{"v":1291766400000,"label":"08Dec"},{"v":1291852800000,"label":"09Dec"}], Dygraph.dateTicker(1291161600000, 1291852800000, 600, options));
+  assertEquals([{"v":1294358400000,"label":"07Jan"},{"v":1294444800000,"label":"08Jan"},{"v":1294531200000,"label":"09Jan"},{"v":1294617600000,"label":"10Jan"},{"v":1294704000000,"label":"11Jan"},{"v":1294790400000,"label":"12Jan"},{"v":1294876800000,"label":"13Jan"},{"v":1294963200000,"label":"14Jan"}], Dygraph.dateTicker(1294358400000, 1294963200000, 480, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"}], Dygraph.dateTicker(1307908000112, 1307908050165, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"}], Dygraph.dateTicker(1307908000112, 1307908051166, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"}], Dygraph.dateTicker(1307908000112, 1307908052167, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"}], Dygraph.dateTicker(1307908000112, 1307908053167, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"}], Dygraph.dateTicker(1307908000112, 1307908054168, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"}], Dygraph.dateTicker(1307908000112, 1307908055169, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"}], Dygraph.dateTicker(1307908000112, 1307908056169, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"}], Dygraph.dateTicker(1307908000112, 1307908057170, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"}], Dygraph.dateTicker(1307908000112, 1307908058171, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"}], Dygraph.dateTicker(1307908000112, 1307908059172, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"},{"v":1307908060000,"label":"19:47:40"}], Dygraph.dateTicker(1307908000112, 1307908060172, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"},{"v":1307908060000,"label":"19:47:40"}], Dygraph.dateTicker(1307908000112, 1307908061174, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"},{"v":1307908060000,"label":"19:47:40"}], Dygraph.dateTicker(1307908000112, 1307908062176, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"},{"v":1307908060000,"label":"19:47:40"}], Dygraph.dateTicker(1307908000112, 1307908063177, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"},{"v":1307908060000,"label":"19:47:40"}], Dygraph.dateTicker(1307908000112, 1307908064178, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908065000,"label":"19:47:45"}], Dygraph.dateTicker(1307908000112, 1307908065178, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908065000,"label":"19:47:45"}], Dygraph.dateTicker(1307908000112, 1307908066178, 800, options));
+  assertEquals([{"v":1307908005000,"label":"19:46:45"},{"v":1307908010000,"label":"19:46:50"},{"v":1307908015000,"label":"19:46:55"},{"v":1307908020000,"label":"19:47"},{"v":1307908025000,"label":"19:47:05"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908035000,"label":"19:47:15"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908045000,"label":"19:47:25"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908055000,"label":"19:47:35"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908065000,"label":"19:47:45"}], Dygraph.dateTicker(1307908000112, 1307908067179, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"}], Dygraph.dateTicker(1307908000112, 1307908068179, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"}], Dygraph.dateTicker(1307908000112, 1307908069179, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908070180, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908071180, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908072181, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908073181, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908074182, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908075182, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908076183, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908077183, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908078184, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"}], Dygraph.dateTicker(1307908000112, 1307908079185, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908080186, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908081187, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908082188, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908083188, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908084189, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908085190, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908086191, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908087192, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908088192, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"}], Dygraph.dateTicker(1307908000112, 1307908089193, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908090194, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908091194, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908092196, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908093196, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908094197, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908095197, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908096198, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908097199, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908098200, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"}], Dygraph.dateTicker(1307908000112, 1307908099200, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908100201, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908101201, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908102202, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908103203, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908104204, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908105205, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908106205, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908107206, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908108209, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"}], Dygraph.dateTicker(1307908000112, 1307908109209, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908110209, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908111210, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908112211, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908113211, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908114212, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908115213, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908116214, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908117214, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908118215, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908119215, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908120217, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908121218, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908122219, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908123219, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908124220, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908125221, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908126222, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908127222, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908128223, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"}], Dygraph.dateTicker(1307908000112, 1307908129223, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"},{"v":1307908130000,"label":"19:48:50"}], Dygraph.dateTicker(1307908000112, 1307908130224, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"},{"v":1307908130000,"label":"19:48:50"}], Dygraph.dateTicker(1307908000112, 1307908131225, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"},{"v":1307908130000,"label":"19:48:50"}], Dygraph.dateTicker(1307908000112, 1307908132226, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"},{"v":1307908130000,"label":"19:48:50"}], Dygraph.dateTicker(1307908000112, 1307908133227, 800, options));
+  assertEquals([{"v":1307908010000,"label":"19:46:50"},{"v":1307908020000,"label":"19:47"},{"v":1307908030000,"label":"19:47:10"},{"v":1307908040000,"label":"19:47:20"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908060000,"label":"19:47:40"},{"v":1307908070000,"label":"19:47:50"},{"v":1307908080000,"label":"19:48"},{"v":1307908090000,"label":"19:48:10"},{"v":1307908100000,"label":"19:48:20"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908120000,"label":"19:48:40"},{"v":1307908130000,"label":"19:48:50"}], Dygraph.dateTicker(1307908000112, 1307908134227, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908135227, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908136228, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908137230, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908138231, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"}], Dygraph.dateTicker(1307908000112, 1307908139232, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908140233, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908141233, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908142234, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908143240, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908144240, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908145240, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908146241, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908147241, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908148242, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908149243, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908150243, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908151244, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908152245, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908153245, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908154246, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908155247, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908156247, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908157248, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908158249, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908159250, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908160251, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908161252, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908162252, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908163253, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908164254, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908165254, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908166255, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908167256, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908168256, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"}], Dygraph.dateTicker(1307908000112, 1307908169257, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"},{"v":1307908170000,"label":"19:49:30"}], Dygraph.dateTicker(1307908000112, 1307908170258, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"},{"v":1307908170000,"label":"19:49:30"}], Dygraph.dateTicker(1307908000112, 1307908171258, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"},{"v":1307908170000,"label":"19:49:30"}], Dygraph.dateTicker(1307908000112, 1307908172259, 800, options));
+  assertEquals([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"},{"v":1307908170000,"label":"19:49:30"}], Dygraph.dateTicker(1307908000112, 1307908173260, 800, options));
+  assertEquals([{"v":978307200000,"label":"Jan 01"},{"v":986083200000,"label":"Apr 01"},{"v":993945600000,"label":"Jul 01"},{"v":1001894400000,"label":"Oct 01"}], Dygraph.dateTicker(978307200000, 1001894400000, 400, options));
+};
index fcda671..737e4b5 100644 (file)
@@ -70,3 +70,120 @@ NumericTickerTestCase.prototype.testBasicNumericTicker = function() {
   ];
   assertEquals(expected_ticks, ticks);
 };
+
+/*
+NumericTickerTestCase.prototype.testAllNumericTickers = function() {
+  assertEquals([{"v":-0.5,"label":"-0.5"},{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"}], Dygraph.numericTicks(-0.4, 4.4, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-1.5,"label":"-1.5"},{"v":-1,"label":"-1"},{"v":-0.5,"label":"-0.5"},{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"}], Dygraph.numericTicks(-1.4157430939856124, 1.4157430939856124, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-10,"label":"-10"},{"v":-8,"label":"-8"},{"v":-6,"label":"-6"},{"v":-4,"label":"-4"},{"v":-2,"label":"-2"},{"v":0,"label":"0"},{"v":2,"label":"2"},{"v":4,"label":"4"},{"v":6,"label":"6"},{"v":8,"label":"8"}], Dygraph.numericTicks(-10, 9.98046875, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-200,"label":"-200"},{"v":0,"label":"0"},{"v":200,"label":"200"},{"v":400,"label":"400"},{"v":600,"label":"600"},{"v":800,"label":"800"},{"v":-17999000,"label":"1000"}], Dygraph.numericTicks(-101.10000000000001, 1100.1, 300, this.createOptionsViewForAxis('y',{"logscale":false,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-20,"label":"-20"},{"v":-10,"label":"-10"},{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"}], Dygraph.numericTicks(-11.687459005175139, 42.287459005175144, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-15,"label":"-15"},{"v":-10,"label":"-10"},{"v":-5,"label":"-5"},{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"}], Dygraph.numericTicks(-12, 12, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-15,"label":"-15"},{"v":-10,"label":"-10"},{"v":-5,"label":"-5"},{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"}], Dygraph.numericTicks(-13.19792086872138, 13.197062407353386, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-220,"label":"-220"},{"v":-200,"label":"-200"},{"v":-180,"label":"-180"},{"v":-160,"label":"-160"},{"v":-140,"label":"-140"},{"v":-120,"label":"-120"}], Dygraph.numericTicks(-220, -100, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-40,"label":"-40"},{"v":-20,"label":"-20"},{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"},{"v":120,"label":"120"}], Dygraph.numericTicks(-32.8, 132.8, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-40,"label":"-40"},{"v":-30,"label":"-30"},{"v":-20,"label":"-20"},{"v":-10,"label":"-10"},{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"}], Dygraph.numericTicks(-34.309, 89.279, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-60,"label":"-60"},{"v":-40,"label":"-40"},{"v":-20,"label":"-20"},{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"}], Dygraph.numericTicks(-60, 60, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":-60,"label":"-60"},{"v":-40,"label":"-40"},{"v":-20,"label":"-20"},{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"}], Dygraph.numericTicks(-60, 60, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":0.0001,"label":"1.00e-4"},{"v":0.0002,"label":"2.00e-4"},{"v":-17999999,"label":"3.00e-4"},{"v":0.0004,"label":"4.00e-4"},{"v":0.0005,"label":"5.00e-4"}], Dygraph.numericTicks(0, 0.00055, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":0},{"v":0.0001,"label":0.0001},{"v":0.0002,"label":0.0002},{"v":-17999999,"label":0.0003},{"v":0.0004,"label":0.0004},{"v":0.0005,"label":0.0005}], Dygraph.numericTicks(0, 0.00055, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":0.2,"label":"0.2"},{"v":0.4,"label":"0.4"},{"v":-17999999,"label":"0.6"},{"v":0.8,"label":"0.8"}], Dygraph.numericTicks(0, 1, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":0.2,"label":"0.2"},{"v":0.4,"label":"0.4"},{"v":-17999999,"label":"0.6"},{"v":0.8,"label":"0.8"}], Dygraph.numericTicks(0, 1, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":0.1,"label":"0.1"},{"v":0.2,"label":"0.2"},{"v":-17999999,"label":"0.3"},{"v":0.4,"label":"0.4"},{"v":0.5,"label":"0.5"},{"v":-17999999,"label":"0.6"},{"v":-17999999,"label":"0.7"},{"v":0.8,"label":"0.8"},{"v":0.9,"label":"0.9"},{"v":1,"label":"1"},{"v":1.1,"label":"1.1"},{"v":-17999998,"label":"1.2"}], Dygraph.numericTicks(0, 1.2, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(0, 100, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 104.53192180924043, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 109.9856877755916, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":2,"label":"2"},{"v":4,"label":"4"},{"v":6,"label":"6"},{"v":8,"label":"8"},{"v":10,"label":"10"}], Dygraph.numericTicks(0, 11, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 110, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 110, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 110, 350, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":200,"label":"200"},{"v":400,"label":"400"},{"v":600,"label":"600"},{"v":800,"label":"800"},{"v":-17999000,"label":"1000"}], Dygraph.numericTicks(0, 1100, 300, this.createOptionsViewForAxis('y',{"logscale":false,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":-17000000,"label":"1M"},{"v":-16000000,"label":"2M"},{"v":-15000000,"label":"3M"},{"v":-14000000,"label":"4M"},{"v":-13000000,"label":"5M"},{"v":-12000000,"label":"6M"},{"v":-11000000,"label":"7M"},{"v":-10000000,"label":"8M"},{"v":-9000000,"label":"9M"},{"v":-8000000,"label":"10M"}], Dygraph.numericTicks(0, 11000000, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 119, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"},{"v":120,"label":"120"}], Dygraph.numericTicks(0, 130.9, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"},{"v":120,"label":"120"}], Dygraph.numericTicks(0, 131, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":-17998000,"label":"2000"},{"v":-17996000,"label":"4000"},{"v":-17994000,"label":"6000"},{"v":-17992000,"label":"8000"},{"v":-17990000,"label":"10000"},{"v":-17988000,"label":"12000"},{"v":-17986000,"label":"14000"},{"v":-17984000,"label":"16000"}], Dygraph.numericTicks(0, 16977.4, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"}], Dygraph.numericTicks(0, 2, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":0.2,"label":"0.2"},{"v":0.4,"label":"0.4"},{"v":-17999999,"label":"0.6"},{"v":0.8,"label":"0.8"},{"v":1,"label":"1"},{"v":-17999998,"label":"1.2"},{"v":-17999998,"label":"1.4"},{"v":1.6,"label":"1.6"},{"v":1.8,"label":"1.8"}], Dygraph.numericTicks(0, 2, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"}], Dygraph.numericTicks(0, 2.2, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":-17800000,"label":"200K"},{"v":-17600000,"label":"400K"},{"v":-17400000,"label":"600K"},{"v":-17200000,"label":"800K"},{"v":-17000000,"label":"1M"},{"v":-16800000,"label":"1.2M"},{"v":-16600000,"label":"1.4M"},{"v":-16400000,"label":"1.6M"},{"v":-16200000,"label":"1.8M"},{"v":-16000000,"label":"2M"}], Dygraph.numericTicks(0, 2200000, 350, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
+  assertEquals([{"v":0,"label":"0"},{"v":50,"label":"50"},{"v":100,"label":"100"},{"v":150,"label":"150"},{"v":200,"label":"200"}], Dygraph.numericTicks(0, 249, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":500,"label":"500"},{"v":-17999000,"label":"1000"},{"v":1500,"label":"1500"},{"v":-17998000,"label":"2000"},{"v":2500,"label":"2500"}], Dygraph.numericTicks(0, 2747.9970998900817, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":200,"label":"200"},{"v":400,"label":"400"},{"v":600,"label":"600"},{"v":800,"label":"800"},{"v":-17999000,"label":"1K"},{"v":1200,"label":"1.2K"},{"v":1400,"label":"1.4K"},{"v":1600,"label":"1.6K"},{"v":1800,"label":"1.8K"},{"v":-17998000,"label":"2K"},{"v":2200,"label":"2.2K"},{"v":2400,"label":"2.4K"},{"v":2600,"label":"2.6K"}], Dygraph.numericTicks(0, 2747.9970998900817, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
+  assertEquals([{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"},{"v":15,"label":"15"},{"v":20,"label":"20"},{"v":25,"label":"25"},{"v":30,"label":"30"}], Dygraph.numericTicks(0, 32.698942321287205, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":-17500000,"label":"500000"},{"v":-17000000,"label":"1.00e+6"},{"v":-16500000,"label":"1.50e+6"},{"v":-16000000,"label":"2.00e+6"},{"v":-15500000,"label":"2.50e+6"},{"v":-15000000,"label":"3.00e+6"}], Dygraph.numericTicks(0, 3263100.6418021005, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"},{"v":15,"label":"15"},{"v":20,"label":"20"},{"v":25,"label":"25"},{"v":30,"label":"30"}], Dygraph.numericTicks(0, 33.16213467701236, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"}], Dygraph.numericTicks(0, 4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"}], Dygraph.numericTicks(0, 4.4, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"},{"v":15,"label":"15"},{"v":20,"label":"20"},{"v":25,"label":"25"},{"v":30,"label":"30"},{"v":35,"label":"35"},{"v":40,"label":"40"}], Dygraph.numericTicks(0, 42, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
+  assertEquals([{"v":0,"label":"0"},{"v":8,"label":"8"},{"v":16,"label":"16"},{"v":24,"label":"24"},{"v":32,"label":"32"},{"v":40,"label":"40"}], Dygraph.numericTicks(0, 42, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":true,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":0},{"v":8,"label":8},{"v":16,"label":16},{"v":24,"label":24},{"v":32,"label":32},{"v":40,"label":40}], Dygraph.numericTicks(0, 42, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":true,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":999982000000,"label":"1T"},{"v":1999982000000,"label":"2T"},{"v":2999982000000,"label":"3T"},{"v":3999982000000,"label":"4T"}], Dygraph.numericTicks(0, 4837851162214.3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
+  assertEquals([{"v":0,"label":"0"},{"v":549755813888,"label":"512G"},{"v":1099511627776,"label":"1T"},{"v":1649267441664,"label":"1.5T"},{"v":2199023255552,"label":"2T"},{"v":2748779069440,"label":"2.5T"},{"v":3298534883328,"label":"3T"},{"v":3848290697216,"label":"3.5T"},{"v":4398046511104,"label":"4T"}], Dygraph.numericTicks(0, 4837851162214.3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":true,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":0},{"v":549755813888,"label":"512G"},{"v":1099511627776,"label":"1T"},{"v":1649267441664,"label":"1.5T"},{"v":2199023255552,"label":"2T"},{"v":2748779069440,"label":"2.5T"},{"v":3298534883328,"label":"3T"},{"v":3848290697216,"label":"3.5T"},{"v":4398046511104,"label":"4T"}], Dygraph.numericTicks(0, 4837851162214.3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":true,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":-17999000,"label":"1000"},{"v":-17998000,"label":"2000"},{"v":-17997000,"label":"3000"},{"v":-17996000,"label":"4000"},{"v":-17995000,"label":"5000"}], Dygraph.numericTicks(0, 5451.6, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":100,"label":"100"},{"v":200,"label":"200"},{"v":300,"label":"300"},{"v":400,"label":"400"},{"v":500,"label":"500"}], Dygraph.numericTicks(0, 550, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"}], Dygraph.numericTicks(0, 64.9, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":100,"label":"100"},{"v":200,"label":"200"},{"v":300,"label":"300"},{"v":400,"label":"400"},{"v":500,"label":"500"},{"v":600,"label":"600"}], Dygraph.numericTicks(0, 667.9, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"}], Dygraph.numericTicks(0, 7.7, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"}], Dygraph.numericTicks(0, 7.9347329768293005, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"}], Dygraph.numericTicks(0, 72.6, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"}], Dygraph.numericTicks(0, 99, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"}], Dygraph.numericTicks(0, 99, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(0, 99, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":200,"label":"200"},{"v":400,"label":"400"},{"v":600,"label":"600"},{"v":800,"label":"800"}], Dygraph.numericTicks(0, 999, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0.000001,"label":"1.00e-6"},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":"1.00e-5"},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":0.0001,"label":"1.00e-4"},{"v":0.0002,"label":""},{"v":-17999999,"label":""},{"v":0.0004,"label":""},{"v":0.0005,"label":""},{"v":-17999999,"label":""},{"v":0.0007,"label":""},{"v":0.0008,"label":""},{"v":-17999999,"label":""},{"v":0.001,"label":"1.00e-3"},{"v":0.002,"label":""},{"v":0.003,"label":""},{"v":0.004,"label":""},{"v":0.005,"label":""},{"v":0.006,"label":""},{"v":0.007,"label":""},{"v":0.008,"label":""},{"v":-17999999,"label":""},{"v":0.01,"label":"0.01"},{"v":0.02,"label":""},{"v":0.03,"label":""},{"v":0.04,"label":""},{"v":0.05,"label":""},{"v":0.06,"label":""},{"v":0.07,"label":""},{"v":0.08,"label":""},{"v":0.09,"label":""},{"v":0.1,"label":"0.1"},{"v":0.2,"label":""},{"v":-17999999,"label":""},{"v":0.4,"label":""},{"v":0.5,"label":""},{"v":-17999999,"label":""},{"v":-17999999,"label":""},{"v":0.8,"label":""},{"v":0.9,"label":""},{"v":1,"label":"1"},{"v":2,"label":""},{"v":3,"label":""},{"v":4,"label":""},{"v":5,"label":""},{"v":6,"label":""},{"v":7,"label":""},{"v":8,"label":""},{"v":9,"label":""},{"v":10,"label":"10"},{"v":20,"label":""},{"v":30,"label":""},{"v":40,"label":""},{"v":50,"label":""},{"v":60,"label":""},{"v":70,"label":""},{"v":80,"label":""},{"v":90,"label":""},{"v":100,"label":"100"},{"v":200,"label":""},{"v":300,"label":""},{"v":400,"label":""},{"v":500,"label":""},{"v":600,"label":""},{"v":700,"label":""},{"v":800,"label":""},{"v":900,"label":""},{"v":-17999000,"label":"1000"}], Dygraph.numericTicks(0.000001, 1099.9999999, 300, this.createOptionsViewForAxis('y',{"logscale":true,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"}], Dygraph.numericTicks(0.6, 5.4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(0.6373123361267239, 4.824406504982038, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(0.6373123361267239, 4.824406504982038, 353, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0.6000000000000001,"label":"0.6"},{"v":0.8,"label":"0.8"},{"v":1,"label":"1"},{"v":-17999998,"label":"1.2"},{"v":-17999998,"label":"1.4"},{"v":1.6,"label":"1.6"},{"v":-17999998,"label":"1.8"},{"v":2,"label":"2"},{"v":2.2,"label":"2.2"},{"v":-17999997,"label":"2.4"},{"v":2.6,"label":"2.6"},{"v":-17999997,"label":"2.8"},{"v":-17999997,"label":"3"},{"v":3.2,"label":"3.2"},{"v":-17999996,"label":"3.4"},{"v":3.6,"label":"3.6"},{"v":-17999996,"label":"3.8"},{"v":4,"label":"4"},{"v":4.2,"label":"4.2"},{"v":4.4,"label":"4.4"},{"v":4.6,"label":"4.6"},{"v":-17999995,"label":"4.8"}], Dygraph.numericTicks(0.6373123361267239, 4.824406504982038, 743, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(0.6386658954698001, 4.8095173522082, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"}], Dygraph.numericTicks(0.7101014279158788, 4.023726495301334, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(1, 109, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"}], Dygraph.numericTicks(1, 3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"}], Dygraph.numericTicks(1, 4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"}], Dygraph.numericTicks(1, 4, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(1, 5, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":1},{"v":1.5,"label":1.5},{"v":2,"label":2},{"v":2.5,"label":2.5},{"v":3,"label":3},{"v":3.5,"label":3.5},{"v":4,"label":4},{"v":4.5,"label":4.5}], Dygraph.numericTicks(1, 5, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"}], Dygraph.numericTicks(1, 6, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"}], Dygraph.numericTicks(1, 7, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"},{"v":8,"label":"8"}], Dygraph.numericTicks(1, 9, 300, this.createOptionsViewForAxis('y',{"logscale":false,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":""},{"v":7,"label":"7"},{"v":8,"label":""},{"v":9,"label":"9"}], Dygraph.numericTicks(1, 9, 300, this.createOptionsViewForAxis('y',{"logscale":true,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"},{"v":8,"label":"8"}], Dygraph.numericTicks(1, 9, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":2,"label":"2"},{"v":4,"label":"4"},{"v":6,"label":"6"},{"v":8,"label":"8"},{"v":10,"label":"10"}], Dygraph.numericTicks(1.2, 10.8, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(1.2872947778969237, 4.765317192093838, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"}], Dygraph.numericTicks(1.5, 7.5, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"},{"v":15,"label":"15"},{"v":20,"label":"20"},{"v":25,"label":"25"}], Dygraph.numericTicks(1.7999999999999998, 28.2, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":10,"label":"10"},{"v":10.1,"label":"10.1"},{"v":10.2,"label":"10.2"},{"v":10.3,"label":"10.3"},{"v":10.4,"label":"10.4"},{"v":10.5,"label":"10.5"},{"v":10.6,"label":"10.6"},{"v":10.7,"label":"10.7"},{"v":10.8,"label":"10.8"},{"v":10.9,"label":"10.9"}], Dygraph.numericTicks(10, 11, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":100,"label":"100"},{"v":120,"label":"120"},{"v":140,"label":"140"},{"v":160,"label":"160"},{"v":180,"label":"180"}], Dygraph.numericTicks(100, 200, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":10000,"label":"10000"},{"v":-17988000,"label":"12000"},{"v":-17986000,"label":"14000"},{"v":-17984000,"label":"16000"},{"v":-17982000,"label":"18000"},{"v":-17980000,"label":"20000"},{"v":-17978000,"label":"22000"},{"v":-17976000,"label":"24000"},{"v":-17974000,"label":"26000"},{"v":-17972000,"label":"28000"},{"v":-17970000,"label":"30000"},{"v":-17968000,"label":"32000"},{"v":-17966000,"label":"34000"},{"v":-17964000,"label":"36000"}], Dygraph.numericTicks(10122.8, 36789.2, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":11000,"label":"11000"},{"v":11200,"label":"11200"},{"v":11400,"label":"11400"},{"v":11600,"label":"11600"},{"v":11800,"label":"11800"},{"v":-17988000,"label":"12000"},{"v":12200,"label":"12200"},{"v":12400,"label":"12400"},{"v":12600,"label":"12600"},{"v":12800,"label":"12800"},{"v":-17987000,"label":"13000"},{"v":13200,"label":"13200"},{"v":13400,"label":"13400"}], Dygraph.numericTicks(11110.5, 13579.5, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":162000,"label":"162000"},{"v":-17836000,"label":"164000"},{"v":-17834000,"label":"166000"},{"v":-17832000,"label":"168000"},{"v":-17830000,"label":"170000"},{"v":-17828000,"label":"172000"},{"v":-17826000,"label":"174000"},{"v":-17824000,"label":"176000"},{"v":-17822000,"label":"178000"}], Dygraph.numericTicks(163038.4, 179137.6, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"}], Dygraph.numericTicks(2, 4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"}], Dygraph.numericTicks(2.6, 7.4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(21.7, 97.3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(21.7, 97.3, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(24, 96, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"}], Dygraph.numericTicks(26.185714285714287, 90.81428571428572, 20, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(26.185714285714287, 90.81428571428572, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false,pixelsPerLabel:20})));
+  assertEquals([{"v":25,"label":"25"},{"v":30,"label":"30"},{"v":35,"label":"35"},{"v":40,"label":"40"},{"v":45,"label":"45"},{"v":50,"label":"50"},{"v":55,"label":"55"},{"v":60,"label":"60"},{"v":65,"label":"65"},{"v":70,"label":"70"},{"v":75,"label":"75"},{"v":80,"label":"80"},{"v":85,"label":"85"},{"v":90,"label":"90"}], Dygraph.numericTicks(26.185714285714287, 90.81428571428572, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false,pixelsPerLabel:20})));
+  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(26.185714285714287, 90.81428571428572, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"}], Dygraph.numericTicks(28.33333333333333, 88.33333333333334, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(3, 5, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":3000,"label":"3K"},{"v":2500,"label":"2.5K"},{"v":-17998000,"label":"2K"},{"v":1500,"label":"1.5K"},{"v":-17999000,"label":"1K"},{"v":500,"label":"500"}], Dygraph.numericTicks(3000, 0, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
+  assertEquals([{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"}], Dygraph.numericTicks(33.11333333333334, 83.75333333333333, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"}], Dygraph.numericTicks(36.921241050119335, 88.32696897374701, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":50,"label":""},{"v":60,"label":"60"},{"v":70,"label":""},{"v":80,"label":""},{"v":90,"label":""},{"v":100,"label":"100"},{"v":200,"label":""},{"v":300,"label":"300"},{"v":400,"label":""},{"v":500,"label":""},{"v":600,"label":"600"},{"v":700,"label":""},{"v":800,"label":""},{"v":900,"label":""},{"v":-17999000,"label":"1000"},{"v":-17998000,"label":""},{"v":-17997000,"label":"3000"},{"v":-17996000,"label":""},{"v":-17995000,"label":""},{"v":-17994000,"label":"6000"},{"v":-17993000,"label":""},{"v":-17992000,"label":""},{"v":-17991000,"label":""},{"v":-17990000,"label":"10000"}], Dygraph.numericTicks(41.220000000000084, 15576.828000000018, 400, this.createOptionsViewForAxis('y',{"logscale":true,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(44.5, 98.5, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":5,"label":"5"},{"v":6,"label":""},{"v":7,"label":""},{"v":8,"label":""},{"v":9,"label":""},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":""},{"v":40,"label":""},{"v":50,"label":"50"},{"v":60,"label":""},{"v":70,"label":""},{"v":80,"label":""},{"v":90,"label":""},{"v":100,"label":"100"},{"v":200,"label":"200"},{"v":300,"label":""},{"v":400,"label":""},{"v":500,"label":"500"},{"v":600,"label":""},{"v":700,"label":""},{"v":800,"label":""},{"v":900,"label":""},{"v":-17999000,"label":"1000"}], Dygraph.numericTicks(5, 1099.5, 300, this.createOptionsViewForAxis('y',{"logscale":true,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":50,"label":"50"},{"v":55,"label":"55"},{"v":60,"label":"60"},{"v":65,"label":"65"},{"v":70,"label":"70"},{"v":75,"label":"75"},{"v":80,"label":"80"}], Dygraph.numericTicks(52.5, 82.5, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":68,"label":"68"},{"v":70,"label":"70"},{"v":72,"label":"72"},{"v":74,"label":"74"},{"v":76,"label":"76"},{"v":78,"label":"78"},{"v":80,"label":"80"}], Dygraph.numericTicks(69, 81, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":0,"label":"0"},{"v":-17980000,"label":"20K"},{"v":-17960000,"label":"40K"},{"v":-17940000,"label":"60K"},{"v":-17920000,"label":"80K"}], Dygraph.numericTicks(7921.099999999999, 81407.9, 240, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
+  assertEquals([{"v":8,"label":"8"},{"v":10,"label":"10"},{"v":12,"label":"12"},{"v":14,"label":"14"},{"v":16,"label":"16"},{"v":18,"label":"18"},{"v":20,"label":"20"}], Dygraph.numericTicks(9, 21, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":8,"label":"8"},{"v":10,"label":"10"},{"v":12,"label":"12"},{"v":14,"label":"14"},{"v":16,"label":"16"},{"v":18,"label":"18"},{"v":20,"label":"20"}], Dygraph.numericTicks(9, 21, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":9,"label":"9"},{"v":10,"label":"10"},{"v":11,"label":"11"},{"v":12,"label":"12"},{"v":13,"label":"13"},{"v":14,"label":"14"},{"v":15,"label":"15"},{"v":16,"label":"16"},{"v":17,"label":"17"},{"v":18,"label":"18"}], Dygraph.numericTicks(9.2, 18.8, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":80,"label":"80"},{"v":100,"label":"100"},{"v":120,"label":"120"},{"v":140,"label":"140"},{"v":160,"label":"160"},{"v":180,"label":"180"},{"v":200,"label":"200"}], Dygraph.numericTicks(90, 210, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
+  assertEquals([{"v":95,"label":"95"},{"v":96,"label":"96"},{"v":97,"label":"97"},{"v":98,"label":"98"},{"v":99,"label":"99"},{"v":100,"label":"100"},{"v":101,"label":"101"},{"v":102,"label":"102"},{"v":103,"label":"103"},{"v":104,"label":"104"}], Dygraph.numericTicks(95.71121718377088, 104.23150357995226, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+  assertEquals([{"v":950,"label":"950"},{"v":-17999000,"label":"1000"},{"v":1050,"label":"1050"},{"v":1100,"label":"1100"},{"v":1150,"label":"1150"},{"v":1200,"label":"1200"}], Dygraph.numericTicks(980.1, 1218.9, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
+};
+*/
diff --git a/auto_tests/tests/tickers.disabled-js b/auto_tests/tests/tickers.disabled-js
deleted file mode 100644 (file)
index d3e6fdf..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/**
- * @fileoverview Test cases for the tick-generating functions.
- * These were generated by adding logging code to the old ticker functions. The
- * tests serve to track existing behavior should it change in the future.
- *
- * @author danvdk@gmail.com (Dan Vanderkam)
- */
-
-var TickerTestCase = TestCase("ticker-tests");
-
-TickerTestCase.prototype.setUp = function() {
-  document.body.innerHTML = "<div id='graph'></div>";
-};
-
-TickerTestCase.prototype.createOptionsViewForAxis = function(axis, dict) {
-  return function (x) {
-    if (dict && dict.hasOwnProperty(x)) {
-      return dict[x];
-    }
-    if (Dygraph.DEFAULT_ATTRS.axes[axis].hasOwnProperty(x)) {
-      return Dygraph.DEFAULT_ATTRS.axes[axis][x];
-    }
-    if (Dygraph.DEFAULT_ATTRS.hasOwnProperty(x)) {
-      return Dygraph.DEFAULT_ATTRS[x];
-    }
-    if (x == 'axisLabelFormatter') return null;
-    throw "mysterious " + axis + "-axis option: " + x;
-  };
-};
-
-// Broken, since it assumes EST.
-TickerTestCase.prototype._testBasicDateTicker = function() {
-  var ticks = Dygraph.dateTicker(-1797534000000, 1255579200000, 800,
-      this.createOptionsViewForAxis('x'));
-
-  var expected_ticks = [{"v":-1577905200000,"label":"1920"},{"v":-1262286000000,"label":"1930"},{"v":-946753200000,"label":"1940"},{"v":-631134000000,"label":"1950"},{"v":-315601200000,"label":"1960"},{"v":18000000,"label":"1970"},{"v":315550800000,"label":"1980"},{"v":631170000000,"label":"1990"},{"v":946702800000,"label":"2000"}];
-
-  assertEquals(expected_ticks, ticks);
-};
-
-TickerTestCase.prototype.testBasicNumericTicker = function() {
-  var opts = {"logscale":null,"labelsKMG2":false,"labelsKMB":false};
-  var ticks = Dygraph.numericTicks(-0.4, 4.4, 320,
-      this.createOptionsViewForAxis('y', opts));
-
-  var expected_ticks = [{"v":-0.5,"label":"-0.5"},{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"}];
-
-  assertEquals(expected_ticks, ticks);
-};
-
-// Broken, since it assumes EST.
-TickerTestCase.prototype._testAllDateTickers = function() {
-  assertEquals([{"v":-1577905200000,"label":"1920"},{"v":-1262286000000,"label":"1930"},{"v":-946753200000,"label":"1940"},{"v":-631134000000,"label":"1950"},{"v":-315601200000,"label":"1960"},{"v":18000000,"label":"1970"},{"v":315550800000,"label":"1980"},{"v":631170000000,"label":"1990"},{"v":946702800000,"label":"2000"}], Dygraph.dateTicker(-1797534000000, 1255579200000, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":-5364644400000,"label":"1800"},{"v":-2208970800000,"label":"1900"}], Dygraph.dateTicker(-6122026800000, 189320400000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1041138000000,"label":"29Dec"},{"v":1041742800000,"label":"05Jan"},{"v":1042347600000,"label":"12Jan"},{"v":1042952400000,"label":"19Jan"},{"v":1043557200000,"label":"26Jan"},{"v":1044162000000,"label":"02Feb"},{"v":1044766800000,"label":"09Feb"},{"v":1045371600000,"label":"16Feb"}], Dygraph.dateTicker(1041138000000, 1045371600000, 640, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1041397200000,"label":"Jan 03"},{"v":1072933200000,"label":"Jan 04"},{"v":1104555600000,"label":"Jan 05"},{"v":1136091600000,"label":"Jan 06"},{"v":1167627600000,"label":"Jan 07"},{"v":1199163600000,"label":"Jan 08"},{"v":1230786000000,"label":"Jan 09"},{"v":1262322000000,"label":"Jan 10"},{"v":1293858000000,"label":"Jan 11"}], Dygraph.dateTicker(1041138000000, 1307851200000, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1159675200000,"label":"01Oct"},{"v":1160280000000,"label":"08Oct"},{"v":1160884800000,"label":"15Oct"},{"v":1161489600000,"label":"22Oct"},{"v":1162094400000,"label":"29Oct"}], Dygraph.dateTicker(1159675200000, 1162270800000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1159675200000,"label":"01Oct"},{"v":1160280000000,"label":"08Oct"},{"v":1160884800000,"label":"15Oct"},{"v":1161489600000,"label":"22Oct"},{"v":1162094400000,"label":"29Oct"}], Dygraph.dateTicker(1159675200000, 1162270800000, 640, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1159675200000,"label":"01Oct"},{"v":1160280000000,"label":"08Oct"},{"v":1160884800000,"label":"15Oct"},{"v":1161489600000,"label":"22Oct"},{"v":1162094400000,"label":"29Oct"},{"v":1162699200000,"label":"05Nov"},{"v":1163304000000,"label":"12Nov"},{"v":1163908800000,"label":"19Nov"},{"v":1164513600000,"label":"26Nov"}], Dygraph.dateTicker(1159675200000, 1164776400000, 1150, this.createOptionsViewForAxis('x')));
-  // assertEquals([{"v":1159675200000,"label":"Oct 06"},{"v":1162357200000,"label":"Nov 06"},{"v":null,"label":"undefined NaN"}], Dygraph.dateTicker(1159675200000, 1164776400000, 400, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1159675200000,"label":"01Oct"},{"v":1160280000000,"label":"08Oct"},{"v":1160884800000,"label":"15Oct"},{"v":1161489600000,"label":"22Oct"},{"v":1162094400000,"label":"29Oct"},{"v":1162699200000,"label":"05Nov"},{"v":1163304000000,"label":"12Nov"},{"v":1163908800000,"label":"19Nov"},{"v":1164513600000,"label":"26Nov"}], Dygraph.dateTicker(1159675200000, 1164776400000, 500, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1159675200000,"label":"01Oct"},{"v":1160280000000,"label":"08Oct"},{"v":1160884800000,"label":"15Oct"},{"v":1161489600000,"label":"22Oct"},{"v":1162094400000,"label":"29Oct"},{"v":1162699200000,"label":"05Nov"},{"v":1163304000000,"label":"12Nov"},{"v":1163908800000,"label":"19Nov"},{"v":1164513600000,"label":"26Nov"}], Dygraph.dateTicker(1159675200000, 1164776400000, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1159675200962,"label":"01Oct"},{"v":1160280000962,"label":"08Oct"},{"v":1160884800962,"label":"15Oct"},{"v":1161489600962,"label":"22Oct"},{"v":1162094400962,"label":"29Oct"},{"v":1162699200962,"label":"05Nov"},{"v":1163304000962,"label":"12Nov"}], Dygraph.dateTicker(1160261979962, 1163905694248, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1160280000000,"label":"08Oct"},{"v":1160884800000,"label":"15Oct"}], Dygraph.dateTicker(1160539200000, 1161316800000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1161403200461,"label":"21Oct"},{"v":1161489600461,"label":"22Oct"},{"v":1161576000461,"label":"23Oct"},{"v":1161662400461,"label":"24Oct"},{"v":1161748800461,"label":"25Oct"},{"v":1161835200461,"label":"26Oct"},{"v":1161921600461,"label":"27Oct"},{"v":1162008000461,"label":"28Oct"}], Dygraph.dateTicker(1161489164461, 1162008465957, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1161554400860,"label":"18:00"},{"v":1161576000860,"label":"00:00"},{"v":1161597600860,"label":"06:00"},{"v":1161619200860,"label":"12:00"},{"v":1161640800860,"label":"18:00"}], Dygraph.dateTicker(1161575878860, 1161660991675, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1161770400840,"label":"06:00"},{"v":1161774000840,"label":"07:00"},{"v":1161777600840,"label":"08:00"},{"v":1161781200840,"label":"09:00"},{"v":1161784800840,"label":"10:00"},{"v":1161788400840,"label":"11:00"},{"v":1161792000840,"label":"12:00"}], Dygraph.dateTicker(1161770537840, 1161792063332, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1167627600000,"label":"01Jan"},{"v":1167714000000,"label":"02Jan"},{"v":1167800400000,"label":"03Jan"},{"v":1167886800000,"label":"04Jan"},{"v":1167973200000,"label":"05Jan"},{"v":1168059600000,"label":"06Jan"},{"v":1168146000000,"label":"07Jan"},{"v":1168232400000,"label":"08Jan"},{"v":1168318800000,"label":"09Jan"}], Dygraph.dateTicker(1167627600000, 1168318800000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1167627600000,"label":"Jan 07"}], Dygraph.dateTicker(1167627600000, 1199077200000, 100, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1167627600000,"label":"Jan 07"},{"v":1175400000000,"label":"Apr 07"},{"v":1183262400000,"label":"Jul 07"},{"v":1191211200000,"label":"Oct 07"}], Dygraph.dateTicker(1167627600000, 1199077200000, 300, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1167627600000,"label":"Jan 07"},{"v":1175400000000,"label":"Apr 07"},{"v":1183262400000,"label":"Jul 07"},{"v":1191211200000,"label":"Oct 07"}], Dygraph.dateTicker(1167627600000, 1199077200000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1167627600000,"label":"Jan 07"},{"v":1175400000000,"label":"Apr 07"},{"v":1183262400000,"label":"Jul 07"},{"v":1191211200000,"label":"Oct 07"}], Dygraph.dateTicker(1167627600000, 1199077200000, 600, this.createOptionsViewForAxis('x')));
-  // assertEquals([{"v":1167627600000,"label":"Jan 07"},{"v":1170306000000,"label":"Feb 07"},{"v":1172725200000,"label":"Mar 07"},{"v":1175400000000,"label":"Apr 07"},{"v":1177992000000,"label":"May 07"},{"v":1180670400000,"label":"Jun 07"},{"v":1183262400000,"label":"Jul 07"},{"v":1185940800000,"label":"Aug 07"},{"v":1188619200000,"label":"Sep 07"},{"v":1191211200000,"label":"Oct 07"},{"v":1193889600000,"label":"Nov 07"},{"v":1196485200000,"label":"Dec 07"},{"v":null,"label":"undefined NaN"}], Dygraph.dateTicker(1167627600000, 1199077200000, 800, this.createOptionsViewForAxis('x')));
-
-  // Test monthly for time span starting Dec 31, 2010.
-  assertEquals([{"v":1293858000000,"label":"Jan 11"},{"v":1296536400000,"label":"Feb 11"},{"v":1298955600000,"label":"Mar 11"},{"v":1301630400000,"label":"Apr 11"},{"v":1304222400000,"label":"May 11"},{"v":1306900800000,"label":"Jun 11"},{"v":1309492800000,"label":"Jul 11"},{"v":1312171200000,"label":"Aug 11"}], Dygraph.dateTicker(1293771600000, 1312862400000, 727, this.createOptionsViewForAxis('x')));
-
-  assertEquals([{"v":1201842000000,"label":"01Feb"},{"v":1201928400000,"label":"02Feb"},{"v":1202014800000,"label":"03Feb"},{"v":1202101200000,"label":"04Feb"},{"v":1202187600000,"label":"05Feb"},{"v":1202274000000,"label":"06Feb"}], Dygraph.dateTicker(1201842000000, 1202274000000, 700, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1210132800000,"label":"07May"},{"v":1210154400000,"label":"06:00"},{"v":1210176000000,"label":"12:00"},{"v":1210197600000,"label":"18:00"},{"v":1210219200000,"label":"08May"},{"v":1210240800000,"label":"06:00"},{"v":1210262400000,"label":"12:00"},{"v":1210284000000,"label":"18:00"},{"v":1210305600000,"label":"09May"}], Dygraph.dateTicker(1210132800000, 1210305600000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1210132800000,"label":"07May"},{"v":1210219200000,"label":"08May"},{"v":1210305600000,"label":"09May"},{"v":1210392000000,"label":"10May"},{"v":1210478400000,"label":"11May"}], Dygraph.dateTicker(1210132800000, 1210478400000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1210132800000,"label":"07May"},{"v":1210219200000,"label":"08May"},{"v":1210305600000,"label":"09May"},{"v":1210392000000,"label":"10May"},{"v":1210478400000,"label":"11May"},{"v":1210564800000,"label":"12May"}], Dygraph.dateTicker(1210132800000, 1210564800000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1214884800000,"label":"01Jul"},{"v":1214886600000,"label":"00:30"},{"v":1214888400000,"label":"01:00"},{"v":1214890200000,"label":"01:30"}], Dygraph.dateTicker(1214884800000, 1214891999000, 600, this.createOptionsViewForAxis('x')));
-  // assertEquals([{"v":1214884800000,"label":"Jul 08"},{"v":1217563200000,"label":"Aug 08"},{"v":1220241600000,"label":"Sep 08"},{"v":null,"label":"undefined NaN"}], Dygraph.dateTicker(1214884800000, 1222765200000, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1215835200000,"label":"12Jul"},{"v":1215856800000,"label":"06:00"},{"v":1215878400000,"label":"12:00"},{"v":1215900000000,"label":"18:00"},{"v":1215921600000,"label":"13Jul"},{"v":1215943200000,"label":"06:00"},{"v":1215964800000,"label":"12:00"},{"v":1215986400000,"label":"18:00"}], Dygraph.dateTicker(1215835200000, 1216007940000, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1246161600000,"label":"28Jun"},{"v":1246766400000,"label":"05Jul"},{"v":1247371200000,"label":"12Jul"},{"v":1247976000000,"label":"19Jul"}], Dygraph.dateTicker(1246420800000, 1248235200000, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1246161600000,"label":"28Jun"},{"v":1246766400000,"label":"05Jul"},{"v":1247371200000,"label":"12Jul"},{"v":1247976000000,"label":"19Jul"},{"v":1248580800000,"label":"26Jul"},{"v":1249185600000,"label":"02Aug"}], Dygraph.dateTicker(1246420800000, 1249358400000, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1247371200000,"label":"12Jul"},{"v":1247374800000,"label":"01:00"},{"v":1247378400000,"label":"02:00"},{"v":1247382000000,"label":"03:00"},{"v":1247385600000,"label":"04:00"},{"v":1247389200000,"label":"05:00"},{"v":1247392800000,"label":"06:00"}], Dygraph.dateTicker(1247371200000, 1247392800000, 600, this.createOptionsViewForAxis('x')));
-  // This one is DST-dependent:
-  // assertEquals([{"v":1247371200000,"label":"02:00"},{"v":1247374800000,"label":"03:00"},{"v":1247378400000,"label":"04:00"},{"v":1247382000000,"label":"05:00"},{"v":1247385600000,"label":"06:00"},{"v":1247389200000,"label":"07:00"},{"v":1247392800000,"label":"08:00"}], Dygraph.dateTicker(1247371200000, 1247392800000, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1247371200000,"label":"12Jul"},{"v":1247374800000,"label":"01:00"},{"v":1247378400000,"label":"02:00"},{"v":1247382000000,"label":"03:00"},{"v":1247385600000,"label":"04:00"},{"v":1247389200000,"label":"05:00"},{"v":1247392800000,"label":"06:00"}], Dygraph.dateTicker(1247371200000, 1247392800000, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1254196800000,"label":"29Sep"},{"v":1254283200000,"label":"30Sep"},{"v":1254369600000,"label":"01Oct"},{"v":1254456000000,"label":"02Oct"},{"v":1254542400000,"label":"03Oct"},{"v":1254628800000,"label":"04Oct"},{"v":1254715200000,"label":"05Oct"},{"v":1254801600000,"label":"06Oct"},{"v":1254888000000,"label":"07Oct"},{"v":1254974400000,"label":"08Oct"},{"v":1255060800000,"label":"09Oct"},{"v":1255147200000,"label":"10Oct"}], Dygraph.dateTicker(1254240000000, 1255190400000, 900, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1254369600000,"label":"01Oct"},{"v":1254456000000,"label":"02Oct"},{"v":1254542400000,"label":"03Oct"},{"v":1254628800000,"label":"04Oct"},{"v":1254715200000,"label":"05Oct"},{"v":1254801600000,"label":"06Oct"},{"v":1254888000000,"label":"07Oct"},{"v":1254974400000,"label":"08Oct"}], Dygraph.dateTicker(1254412800000, 1255017600000, 900, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1259643600000,"label":"01Dec"},{"v":1259730000000,"label":"02Dec"},{"v":1259816400000,"label":"03Dec"},{"v":1259902800000,"label":"04Dec"},{"v":1259989200000,"label":"05Dec"},{"v":1260075600000,"label":"06Dec"},{"v":1260162000000,"label":"07Dec"}], Dygraph.dateTicker(1259643600000, 1260162000000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1259643600000,"label":"01Dec"},{"v":1259730000000,"label":"02Dec"},{"v":1259816400000,"label":"03Dec"},{"v":1259902800000,"label":"04Dec"},{"v":1259989200000,"label":"05Dec"},{"v":1260075600000,"label":"06Dec"},{"v":1260162000000,"label":"07Dec"}], Dygraph.dateTicker(1259643600000, 1260162000000, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1260075600000,"label":"06Dec"},{"v":1260680400000,"label":"13Dec"},{"v":1261285200000,"label":"20Dec"},{"v":1261890000000,"label":"27Dec"},{"v":1262494800000,"label":"03Jan"},{"v":1263099600000,"label":"10Jan"},{"v":1263704400000,"label":"17Jan"},{"v":1264309200000,"label":"24Jan"}], Dygraph.dateTicker(1260075600000, 1264309200000, 640, this.createOptionsViewForAxis('x')));
-  // assertEquals([{"v":1262322000000,"label":"Jan 10"},{"v":1265000400000,"label":"Feb 10"},{"v":1267419600000,"label":"Mar 10"},{"v":1270094400000,"label":"Apr 10"},{"v":null,"label":"undefined NaN"}], Dygraph.dateTicker(1262322000000, 1270872000000, 640, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1288929600000,"label":"05Nov"},{"v":1288951200000,"label":"06:00"},{"v":1288972800000,"label":"12:00"},{"v":1288994400000,"label":"18:00"},{"v":1289016000000,"label":"06Nov"},{"v":1289037600000,"label":"06:00"},{"v":1289059200000,"label":"12:00"},{"v":1289080800000,"label":"18:00"},{"v":1289102400000,"label":"07Nov"},{"v":1289124000000,"label":"05:00"},{"v":1289145600000,"label":"11:00"},{"v":1289167200000,"label":"17:00"},{"v":1289188800000,"label":"23:00"},{"v":1289210400000,"label":"05:00"},{"v":1289232000000,"label":"11:00"},{"v":1289253600000,"label":"17:00"},{"v":1289275200000,"label":"23:00"}], Dygraph.dateTicker(1288929600000, 1289278800000, 1024, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1291179600000,"label":"01Dec"},{"v":1291266000000,"label":"02Dec"},{"v":1291352400000,"label":"03Dec"},{"v":1291438800000,"label":"04Dec"},{"v":1291525200000,"label":"05Dec"},{"v":1291611600000,"label":"06Dec"},{"v":1291698000000,"label":"07Dec"},{"v":1291784400000,"label":"08Dec"},{"v":1291870800000,"label":"09Dec"}], Dygraph.dateTicker(1291179600000, 1291870800000, 600, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1294376400000,"label":"07Jan"},{"v":1294462800000,"label":"08Jan"},{"v":1294549200000,"label":"09Jan"},{"v":1294635600000,"label":"10Jan"},{"v":1294722000000,"label":"11Jan"},{"v":1294808400000,"label":"12Jan"},{"v":1294894800000,"label":"13Jan"},{"v":1294981200000,"label":"14Jan"}], Dygraph.dateTicker(1294376400000, 1294981200000, 480, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"}], Dygraph.dateTicker(1307922400112, 1307922450165, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"}], Dygraph.dateTicker(1307922400112, 1307922451166, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"}], Dygraph.dateTicker(1307922400112, 1307922452167, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"}], Dygraph.dateTicker(1307922400112, 1307922453167, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"}], Dygraph.dateTicker(1307922400112, 1307922454168, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"}], Dygraph.dateTicker(1307922400112, 1307922455169, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"}], Dygraph.dateTicker(1307922400112, 1307922456169, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"}], Dygraph.dateTicker(1307922400112, 1307922457170, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"}], Dygraph.dateTicker(1307922400112, 1307922458171, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"}], Dygraph.dateTicker(1307922400112, 1307922459172, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"},{"v":1307922460112,"label":"19:47:40"}], Dygraph.dateTicker(1307922400112, 1307922460172, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"},{"v":1307922460112,"label":"19:47:40"}], Dygraph.dateTicker(1307922400112, 1307922461174, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"},{"v":1307922460112,"label":"19:47:40"}], Dygraph.dateTicker(1307922400112, 1307922462176, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"},{"v":1307922460112,"label":"19:47:40"}], Dygraph.dateTicker(1307922400112, 1307922463177, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"},{"v":1307922460112,"label":"19:47:40"}], Dygraph.dateTicker(1307922400112, 1307922464178, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922465112,"label":"19:47:45"}], Dygraph.dateTicker(1307922400112, 1307922465178, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922465112,"label":"19:47:45"}], Dygraph.dateTicker(1307922400112, 1307922466178, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922405112,"label":"19:46:45"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922415112,"label":"19:46:55"},{"v":1307922420112,"label":"19:47"},{"v":1307922425112,"label":"19:47:05"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922435112,"label":"19:47:15"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922445112,"label":"19:47:25"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922455112,"label":"19:47:35"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922465112,"label":"19:47:45"}], Dygraph.dateTicker(1307922400112, 1307922467179, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"}], Dygraph.dateTicker(1307922400112, 1307922468179, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"}], Dygraph.dateTicker(1307922400112, 1307922469179, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922470180, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922471180, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922472181, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922473181, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922474182, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922475182, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922476183, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922477183, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922478184, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"}], Dygraph.dateTicker(1307922400112, 1307922479185, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922480186, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922481187, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922482188, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922483188, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922484189, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922485190, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922486191, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922487192, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922488192, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"}], Dygraph.dateTicker(1307922400112, 1307922489193, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922490194, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922491194, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922492196, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922493196, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922494197, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922495197, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922496198, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922497199, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922498200, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"}], Dygraph.dateTicker(1307922400112, 1307922499200, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922500201, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922501201, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922502202, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922503203, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922504204, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922505205, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922506205, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922507206, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922508209, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"}], Dygraph.dateTicker(1307922400112, 1307922509209, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922510209, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922511210, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922512211, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922513211, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922514212, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922515213, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922516214, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922517214, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922518215, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922519215, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922520217, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922521218, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922522219, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922523219, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922524220, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922525221, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922526222, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922527222, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922528223, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"}], Dygraph.dateTicker(1307922400112, 1307922529223, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"},{"v":1307922530112,"label":"19:48:50"}], Dygraph.dateTicker(1307922400112, 1307922530224, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"},{"v":1307922530112,"label":"19:48:50"}], Dygraph.dateTicker(1307922400112, 1307922531225, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"},{"v":1307922530112,"label":"19:48:50"}], Dygraph.dateTicker(1307922400112, 1307922532226, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"},{"v":1307922530112,"label":"19:48:50"}], Dygraph.dateTicker(1307922400112, 1307922533227, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922400112,"label":"19:46:40"},{"v":1307922410112,"label":"19:46:50"},{"v":1307922420112,"label":"19:47"},{"v":1307922430112,"label":"19:47:10"},{"v":1307922440112,"label":"19:47:20"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922460112,"label":"19:47:40"},{"v":1307922470112,"label":"19:47:50"},{"v":1307922480112,"label":"19:48"},{"v":1307922490112,"label":"19:48:10"},{"v":1307922500112,"label":"19:48:20"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922520112,"label":"19:48:40"},{"v":1307922530112,"label":"19:48:50"}], Dygraph.dateTicker(1307922400112, 1307922534227, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922535227, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922536228, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922537230, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922538231, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"}], Dygraph.dateTicker(1307922400112, 1307922539232, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922540233, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922541233, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922542234, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922543240, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922544240, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922545240, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922546241, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922547241, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922548242, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922549243, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922550243, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922551244, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922552245, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922553245, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922554246, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922555247, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922556247, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922557248, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922558249, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922559250, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922560251, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922561252, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922562252, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922563253, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922564254, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922565254, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922566255, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922567256, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922568256, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"}], Dygraph.dateTicker(1307922400112, 1307922569257, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"},{"v":1307922570112,"label":"19:49:30"}], Dygraph.dateTicker(1307922400112, 1307922570258, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"},{"v":1307922570112,"label":"19:49:30"}], Dygraph.dateTicker(1307922400112, 1307922571258, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"},{"v":1307922570112,"label":"19:49:30"}], Dygraph.dateTicker(1307922400112, 1307922572259, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":1307922390112,"label":"19:46:30"},{"v":1307922420112,"label":"19:47"},{"v":1307922450112,"label":"19:47:30"},{"v":1307922480112,"label":"19:48"},{"v":1307922510112,"label":"19:48:30"},{"v":1307922540112,"label":"19:49"},{"v":1307922570112,"label":"19:49:30"}], Dygraph.dateTicker(1307922400112, 1307922573260, 800, this.createOptionsViewForAxis('x')));
-  assertEquals([{"v":978325200000,"label":"Jan 01"},{"v":986101200000,"label":"Apr 01"},{"v":993960000000,"label":"Jul 01"},{"v":1001908800000,"label":"Oct 01"}], Dygraph.dateTicker(978325200000, 1001908800000, 400, this.createOptionsViewForAxis('x')));
-};
-
-TickerTestCase.prototype.testAllNumericTickers = function() {
-  assertEquals([{"v":-0.5,"label":"-0.5"},{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"}], Dygraph.numericTicks(-0.4, 4.4, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-1.5,"label":"-1.5"},{"v":-1,"label":"-1"},{"v":-0.5,"label":"-0.5"},{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"}], Dygraph.numericTicks(-1.4157430939856124, 1.4157430939856124, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-10,"label":"-10"},{"v":-8,"label":"-8"},{"v":-6,"label":"-6"},{"v":-4,"label":"-4"},{"v":-2,"label":"-2"},{"v":0,"label":"0"},{"v":2,"label":"2"},{"v":4,"label":"4"},{"v":6,"label":"6"},{"v":8,"label":"8"}], Dygraph.numericTicks(-10, 9.98046875, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-200,"label":"-200"},{"v":0,"label":"0"},{"v":200,"label":"200"},{"v":400,"label":"400"},{"v":600,"label":"600"},{"v":800,"label":"800"},{"v":1000,"label":"1000"}], Dygraph.numericTicks(-101.10000000000001, 1100.1, 300, this.createOptionsViewForAxis('y',{"logscale":false,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-20,"label":"-20"},{"v":-10,"label":"-10"},{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"}], Dygraph.numericTicks(-11.687459005175139, 42.287459005175144, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-15,"label":"-15"},{"v":-10,"label":"-10"},{"v":-5,"label":"-5"},{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"}], Dygraph.numericTicks(-12, 12, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-15,"label":"-15"},{"v":-10,"label":"-10"},{"v":-5,"label":"-5"},{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"}], Dygraph.numericTicks(-13.19792086872138, 13.197062407353386, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-220,"label":"-220"},{"v":-200,"label":"-200"},{"v":-180,"label":"-180"},{"v":-160,"label":"-160"},{"v":-140,"label":"-140"},{"v":-120,"label":"-120"}], Dygraph.numericTicks(-220, -100, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-40,"label":"-40"},{"v":-20,"label":"-20"},{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"},{"v":120,"label":"120"}], Dygraph.numericTicks(-32.8, 132.8, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-40,"label":"-40"},{"v":-30,"label":"-30"},{"v":-20,"label":"-20"},{"v":-10,"label":"-10"},{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"}], Dygraph.numericTicks(-34.309, 89.279, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-60,"label":"-60"},{"v":-40,"label":"-40"},{"v":-20,"label":"-20"},{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"}], Dygraph.numericTicks(-60, 60, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":-60,"label":"-60"},{"v":-40,"label":"-40"},{"v":-20,"label":"-20"},{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"}], Dygraph.numericTicks(-60, 60, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":0.0001,"label":"1.00e-4"},{"v":0.0002,"label":"2.00e-4"},{"v":0.00030000000000000003,"label":"3.00e-4"},{"v":0.0004,"label":"4.00e-4"},{"v":0.0005,"label":"5.00e-4"}], Dygraph.numericTicks(0, 0.00055, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":0},{"v":0.0001,"label":0.0001},{"v":0.0002,"label":0.0002},{"v":0.00030000000000000003,"label":0.0003},{"v":0.0004,"label":0.0004},{"v":0.0005,"label":0.0005}], Dygraph.numericTicks(0, 0.00055, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":0.2,"label":"0.2"},{"v":0.4,"label":"0.4"},{"v":0.6000000000000001,"label":"0.6"},{"v":0.8,"label":"0.8"}], Dygraph.numericTicks(0, 1, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":0.2,"label":"0.2"},{"v":0.4,"label":"0.4"},{"v":0.6000000000000001,"label":"0.6"},{"v":0.8,"label":"0.8"}], Dygraph.numericTicks(0, 1, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":0.1,"label":"0.1"},{"v":0.2,"label":"0.2"},{"v":0.30000000000000004,"label":"0.3"},{"v":0.4,"label":"0.4"},{"v":0.5,"label":"0.5"},{"v":0.6000000000000001,"label":"0.6"},{"v":0.7000000000000001,"label":"0.7"},{"v":0.8,"label":"0.8"},{"v":0.9,"label":"0.9"},{"v":1,"label":"1"},{"v":1.1,"label":"1.1"},{"v":1.2000000000000002,"label":"1.2"}], Dygraph.numericTicks(0, 1.2, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(0, 100, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 104.53192180924043, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 109.9856877755916, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":2,"label":"2"},{"v":4,"label":"4"},{"v":6,"label":"6"},{"v":8,"label":"8"},{"v":10,"label":"10"}], Dygraph.numericTicks(0, 11, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 110, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 110, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 110, 350, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":200,"label":"200"},{"v":400,"label":"400"},{"v":600,"label":"600"},{"v":800,"label":"800"},{"v":1000,"label":"1000"}], Dygraph.numericTicks(0, 1100, 300, this.createOptionsViewForAxis('y',{"logscale":false,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":1000000,"label":"1M"},{"v":2000000,"label":"2M"},{"v":3000000,"label":"3M"},{"v":4000000,"label":"4M"},{"v":5000000,"label":"5M"},{"v":6000000,"label":"6M"},{"v":7000000,"label":"7M"},{"v":8000000,"label":"8M"},{"v":9000000,"label":"9M"},{"v":10000000,"label":"10M"}], Dygraph.numericTicks(0, 11000000, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(0, 119, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"},{"v":120,"label":"120"}], Dygraph.numericTicks(0, 130.9, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"},{"v":120,"label":"120"}], Dygraph.numericTicks(0, 131, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":2000,"label":"2000"},{"v":4000,"label":"4000"},{"v":6000,"label":"6000"},{"v":8000,"label":"8000"},{"v":10000,"label":"10000"},{"v":12000,"label":"12000"},{"v":14000,"label":"14000"},{"v":16000,"label":"16000"}], Dygraph.numericTicks(0, 16977.4, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"}], Dygraph.numericTicks(0, 2, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":0.2,"label":"0.2"},{"v":0.4,"label":"0.4"},{"v":0.6000000000000001,"label":"0.6"},{"v":0.8,"label":"0.8"},{"v":1,"label":"1"},{"v":1.2000000000000002,"label":"1.2"},{"v":1.4000000000000001,"label":"1.4"},{"v":1.6,"label":"1.6"},{"v":1.8,"label":"1.8"}], Dygraph.numericTicks(0, 2, 400, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"}], Dygraph.numericTicks(0, 2.2, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":200000,"label":"200K"},{"v":400000,"label":"400K"},{"v":600000,"label":"600K"},{"v":800000,"label":"800K"},{"v":1000000,"label":"1M"},{"v":1200000,"label":"1.2M"},{"v":1400000,"label":"1.4M"},{"v":1600000,"label":"1.6M"},{"v":1800000,"label":"1.8M"},{"v":2000000,"label":"2M"}], Dygraph.numericTicks(0, 2200000, 350, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
-  assertEquals([{"v":0,"label":"0"},{"v":50,"label":"50"},{"v":100,"label":"100"},{"v":150,"label":"150"},{"v":200,"label":"200"}], Dygraph.numericTicks(0, 249, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":500,"label":"500"},{"v":1000,"label":"1000"},{"v":1500,"label":"1500"},{"v":2000,"label":"2000"},{"v":2500,"label":"2500"}], Dygraph.numericTicks(0, 2747.9970998900817, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":200,"label":"200"},{"v":400,"label":"400"},{"v":600,"label":"600"},{"v":800,"label":"800"},{"v":1000,"label":"1K"},{"v":1200,"label":"1.2K"},{"v":1400,"label":"1.4K"},{"v":1600,"label":"1.6K"},{"v":1800,"label":"1.8K"},{"v":2000,"label":"2K"},{"v":2200,"label":"2.2K"},{"v":2400,"label":"2.4K"},{"v":2600,"label":"2.6K"}], Dygraph.numericTicks(0, 2747.9970998900817, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
-  assertEquals([{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"},{"v":15,"label":"15"},{"v":20,"label":"20"},{"v":25,"label":"25"},{"v":30,"label":"30"}], Dygraph.numericTicks(0, 32.698942321287205, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":500000,"label":"500000"},{"v":1000000,"label":"1.00e+6"},{"v":1500000,"label":"1.50e+6"},{"v":2000000,"label":"2.00e+6"},{"v":2500000,"label":"2.50e+6"},{"v":3000000,"label":"3.00e+6"}], Dygraph.numericTicks(0, 3263100.6418021005, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"},{"v":15,"label":"15"},{"v":20,"label":"20"},{"v":25,"label":"25"},{"v":30,"label":"30"}], Dygraph.numericTicks(0, 33.16213467701236, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"}], Dygraph.numericTicks(0, 4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"}], Dygraph.numericTicks(0, 4.4, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"},{"v":15,"label":"15"},{"v":20,"label":"20"},{"v":25,"label":"25"},{"v":30,"label":"30"},{"v":35,"label":"35"},{"v":40,"label":"40"}], Dygraph.numericTicks(0, 42, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
-  assertEquals([{"v":0,"label":"0"},{"v":8,"label":"8"},{"v":16,"label":"16"},{"v":24,"label":"24"},{"v":32,"label":"32"},{"v":40,"label":"40"}], Dygraph.numericTicks(0, 42, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":true,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":0},{"v":8,"label":8},{"v":16,"label":16},{"v":24,"label":24},{"v":32,"label":32},{"v":40,"label":40}], Dygraph.numericTicks(0, 42, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":true,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":1000000000000,"label":"1T"},{"v":2000000000000,"label":"2T"},{"v":3000000000000,"label":"3T"},{"v":4000000000000,"label":"4T"}], Dygraph.numericTicks(0, 4837851162214.3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
-  assertEquals([{"v":0,"label":"0"},{"v":549755813888,"label":"512G"},{"v":1099511627776,"label":"1T"},{"v":1649267441664,"label":"1.5T"},{"v":2199023255552,"label":"2T"},{"v":2748779069440,"label":"2.5T"},{"v":3298534883328,"label":"3T"},{"v":3848290697216,"label":"3.5T"},{"v":4398046511104,"label":"4T"}], Dygraph.numericTicks(0, 4837851162214.3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":true,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":0},{"v":549755813888,"label":"512G"},{"v":1099511627776,"label":"1T"},{"v":1649267441664,"label":"1.5T"},{"v":2199023255552,"label":"2T"},{"v":2748779069440,"label":"2.5T"},{"v":3298534883328,"label":"3T"},{"v":3848290697216,"label":"3.5T"},{"v":4398046511104,"label":"4T"}], Dygraph.numericTicks(0, 4837851162214.3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":true,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":1000,"label":"1000"},{"v":2000,"label":"2000"},{"v":3000,"label":"3000"},{"v":4000,"label":"4000"},{"v":5000,"label":"5000"}], Dygraph.numericTicks(0, 5451.6, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":100,"label":"100"},{"v":200,"label":"200"},{"v":300,"label":"300"},{"v":400,"label":"400"},{"v":500,"label":"500"}], Dygraph.numericTicks(0, 550, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"}], Dygraph.numericTicks(0, 64.9, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":100,"label":"100"},{"v":200,"label":"200"},{"v":300,"label":"300"},{"v":400,"label":"400"},{"v":500,"label":"500"},{"v":600,"label":"600"}], Dygraph.numericTicks(0, 667.9, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"}], Dygraph.numericTicks(0, 7.7, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"}], Dygraph.numericTicks(0, 7.9347329768293005, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"}], Dygraph.numericTicks(0, 72.6, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"}], Dygraph.numericTicks(0, 99, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"}], Dygraph.numericTicks(0, 99, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(0, 99, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":200,"label":"200"},{"v":400,"label":"400"},{"v":600,"label":"600"},{"v":800,"label":"800"}], Dygraph.numericTicks(0, 999, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0.000001,"label":"1.00e-6"},{"v":0.000002,"label":""},{"v":0.000003,"label":""},{"v":0.000004,"label":""},{"v":0.0000049999999999999996,"label":""},{"v":0.000006,"label":""},{"v":0.000007,"label":""},{"v":0.000008,"label":""},{"v":0.000009,"label":""},{"v":0.00001,"label":"1.00e-5"},{"v":0.00002,"label":""},{"v":0.000030000000000000004,"label":""},{"v":0.00004,"label":""},{"v":0.00005,"label":""},{"v":0.00006000000000000001,"label":""},{"v":0.00007000000000000001,"label":""},{"v":0.00008,"label":""},{"v":0.00009,"label":""},{"v":0.0001,"label":"1.00e-4"},{"v":0.0002,"label":""},{"v":0.00030000000000000003,"label":""},{"v":0.0004,"label":""},{"v":0.0005,"label":""},{"v":0.0006000000000000001,"label":""},{"v":0.0007,"label":""},{"v":0.0008,"label":""},{"v":0.0009000000000000001,"label":""},{"v":0.001,"label":"1.00e-3"},{"v":0.002,"label":""},{"v":0.003,"label":""},{"v":0.004,"label":""},{"v":0.005,"label":""},{"v":0.006,"label":""},{"v":0.007,"label":""},{"v":0.008,"label":""},{"v":0.009000000000000001,"label":""},{"v":0.01,"label":"0.01"},{"v":0.02,"label":""},{"v":0.03,"label":""},{"v":0.04,"label":""},{"v":0.05,"label":""},{"v":0.06,"label":""},{"v":0.07,"label":""},{"v":0.08,"label":""},{"v":0.09,"label":""},{"v":0.1,"label":"0.1"},{"v":0.2,"label":""},{"v":0.30000000000000004,"label":""},{"v":0.4,"label":""},{"v":0.5,"label":""},{"v":0.6000000000000001,"label":""},{"v":0.7000000000000001,"label":""},{"v":0.8,"label":""},{"v":0.9,"label":""},{"v":1,"label":"1"},{"v":2,"label":""},{"v":3,"label":""},{"v":4,"label":""},{"v":5,"label":""},{"v":6,"label":""},{"v":7,"label":""},{"v":8,"label":""},{"v":9,"label":""},{"v":10,"label":"10"},{"v":20,"label":""},{"v":30,"label":""},{"v":40,"label":""},{"v":50,"label":""},{"v":60,"label":""},{"v":70,"label":""},{"v":80,"label":""},{"v":90,"label":""},{"v":100,"label":"100"},{"v":200,"label":""},{"v":300,"label":""},{"v":400,"label":""},{"v":500,"label":""},{"v":600,"label":""},{"v":700,"label":""},{"v":800,"label":""},{"v":900,"label":""},{"v":1000,"label":"1000"}], Dygraph.numericTicks(0.000001, 1099.9999999, 300, this.createOptionsViewForAxis('y',{"logscale":true,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"}], Dygraph.numericTicks(0.6, 5.4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(0.6373123361267239, 4.824406504982038, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(0.6373123361267239, 4.824406504982038, 353, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0.6000000000000001,"label":"0.6"},{"v":0.8,"label":"0.8"},{"v":1,"label":"1"},{"v":1.2000000000000002,"label":"1.2"},{"v":1.4000000000000001,"label":"1.4"},{"v":1.6,"label":"1.6"},{"v":1.8000000000000003,"label":"1.8"},{"v":2,"label":"2"},{"v":2.2,"label":"2.2"},{"v":2.4000000000000004,"label":"2.4"},{"v":2.6,"label":"2.6"},{"v":2.8000000000000003,"label":"2.8"},{"v":3.0000000000000004,"label":"3"},{"v":3.2,"label":"3.2"},{"v":3.4000000000000004,"label":"3.4"},{"v":3.6,"label":"3.6"},{"v":3.8000000000000003,"label":"3.8"},{"v":4,"label":"4"},{"v":4.2,"label":"4.2"},{"v":4.4,"label":"4.4"},{"v":4.6,"label":"4.6"},{"v":4.800000000000001,"label":"4.8"}], Dygraph.numericTicks(0.6373123361267239, 4.824406504982038, 743, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(0.6386658954698001, 4.8095173522082, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0.5,"label":"0.5"},{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"}], Dygraph.numericTicks(0.7101014279158788, 4.023726495301334, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20,"label":"20"},{"v":40,"label":"40"},{"v":60,"label":"60"},{"v":80,"label":"80"},{"v":100,"label":"100"}], Dygraph.numericTicks(1, 109, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"}], Dygraph.numericTicks(1, 3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"}], Dygraph.numericTicks(1, 4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"}], Dygraph.numericTicks(1, 4, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(1, 5, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":1},{"v":1.5,"label":1.5},{"v":2,"label":2},{"v":2.5,"label":2.5},{"v":3,"label":3},{"v":3.5,"label":3.5},{"v":4,"label":4},{"v":4.5,"label":4.5}], Dygraph.numericTicks(1, 5, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"}], Dygraph.numericTicks(1, 6, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"}], Dygraph.numericTicks(1, 7, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"},{"v":8,"label":"8"}], Dygraph.numericTicks(1, 9, 300, this.createOptionsViewForAxis('y',{"logscale":false,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":""},{"v":7,"label":"7"},{"v":8,"label":""},{"v":9,"label":"9"}], Dygraph.numericTicks(1, 9, 300, this.createOptionsViewForAxis('y',{"logscale":true,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"},{"v":8,"label":"8"}], Dygraph.numericTicks(1, 9, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":2,"label":"2"},{"v":4,"label":"4"},{"v":6,"label":"6"},{"v":8,"label":"8"},{"v":10,"label":"10"}], Dygraph.numericTicks(1.2, 10.8, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":1.5,"label":"1.5"},{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(1.2872947778969237, 4.765317192093838, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":1,"label":"1"},{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"}], Dygraph.numericTicks(1.5, 7.5, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":5,"label":"5"},{"v":10,"label":"10"},{"v":15,"label":"15"},{"v":20,"label":"20"},{"v":25,"label":"25"}], Dygraph.numericTicks(1.7999999999999998, 28.2, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":10,"label":"10"},{"v":10.1,"label":"10.1"},{"v":10.2,"label":"10.2"},{"v":10.3,"label":"10.3"},{"v":10.4,"label":"10.4"},{"v":10.5,"label":"10.5"},{"v":10.6,"label":"10.6"},{"v":10.7,"label":"10.7"},{"v":10.8,"label":"10.8"},{"v":10.9,"label":"10.9"}], Dygraph.numericTicks(10, 11, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":100,"label":"100"},{"v":120,"label":"120"},{"v":140,"label":"140"},{"v":160,"label":"160"},{"v":180,"label":"180"}], Dygraph.numericTicks(100, 200, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":10000,"label":"10000"},{"v":12000,"label":"12000"},{"v":14000,"label":"14000"},{"v":16000,"label":"16000"},{"v":18000,"label":"18000"},{"v":20000,"label":"20000"},{"v":22000,"label":"22000"},{"v":24000,"label":"24000"},{"v":26000,"label":"26000"},{"v":28000,"label":"28000"},{"v":30000,"label":"30000"},{"v":32000,"label":"32000"},{"v":34000,"label":"34000"},{"v":36000,"label":"36000"}], Dygraph.numericTicks(10122.8, 36789.2, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":11000,"label":"11000"},{"v":11200,"label":"11200"},{"v":11400,"label":"11400"},{"v":11600,"label":"11600"},{"v":11800,"label":"11800"},{"v":12000,"label":"12000"},{"v":12200,"label":"12200"},{"v":12400,"label":"12400"},{"v":12600,"label":"12600"},{"v":12800,"label":"12800"},{"v":13000,"label":"13000"},{"v":13200,"label":"13200"},{"v":13400,"label":"13400"}], Dygraph.numericTicks(11110.5, 13579.5, 480, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":162000,"label":"162000"},{"v":164000,"label":"164000"},{"v":166000,"label":"166000"},{"v":168000,"label":"168000"},{"v":170000,"label":"170000"},{"v":172000,"label":"172000"},{"v":174000,"label":"174000"},{"v":176000,"label":"176000"},{"v":178000,"label":"178000"}], Dygraph.numericTicks(163038.4, 179137.6, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":2,"label":"2"},{"v":2.5,"label":"2.5"},{"v":3,"label":"3"},{"v":3.5,"label":"3.5"}], Dygraph.numericTicks(2, 4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":2,"label":"2"},{"v":3,"label":"3"},{"v":4,"label":"4"},{"v":5,"label":"5"},{"v":6,"label":"6"},{"v":7,"label":"7"}], Dygraph.numericTicks(2.6, 7.4, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(21.7, 97.3, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(21.7, 97.3, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(24, 96, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"}], Dygraph.numericTicks(26.185714285714287, 90.81428571428572, 20, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(26.185714285714287, 90.81428571428572, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false,pixelsPerLabel:20})));
-  assertEquals([{"v":25,"label":"25"},{"v":30,"label":"30"},{"v":35,"label":"35"},{"v":40,"label":"40"},{"v":45,"label":"45"},{"v":50,"label":"50"},{"v":55,"label":"55"},{"v":60,"label":"60"},{"v":65,"label":"65"},{"v":70,"label":"70"},{"v":75,"label":"75"},{"v":80,"label":"80"},{"v":85,"label":"85"},{"v":90,"label":"90"}], Dygraph.numericTicks(26.185714285714287, 90.81428571428572, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false,pixelsPerLabel:20})));
-  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(26.185714285714287, 90.81428571428572, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":20,"label":"20"},{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"}], Dygraph.numericTicks(28.33333333333333, 88.33333333333334, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":3,"label":"3"},{"v":3.5,"label":"3.5"},{"v":4,"label":"4"},{"v":4.5,"label":"4.5"}], Dygraph.numericTicks(3, 5, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":3000,"label":"3K"},{"v":2500,"label":"2.5K"},{"v":2000,"label":"2K"},{"v":1500,"label":"1.5K"},{"v":1000,"label":"1K"},{"v":500,"label":"500"}], Dygraph.numericTicks(3000, 0, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
-  assertEquals([{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"}], Dygraph.numericTicks(33.11333333333334, 83.75333333333333, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":30,"label":"30"},{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"}], Dygraph.numericTicks(36.921241050119335, 88.32696897374701, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":50,"label":""},{"v":60,"label":"60"},{"v":70,"label":""},{"v":80,"label":""},{"v":90,"label":""},{"v":100,"label":"100"},{"v":200,"label":""},{"v":300,"label":"300"},{"v":400,"label":""},{"v":500,"label":""},{"v":600,"label":"600"},{"v":700,"label":""},{"v":800,"label":""},{"v":900,"label":""},{"v":1000,"label":"1000"},{"v":2000,"label":""},{"v":3000,"label":"3000"},{"v":4000,"label":""},{"v":5000,"label":""},{"v":6000,"label":"6000"},{"v":7000,"label":""},{"v":8000,"label":""},{"v":9000,"label":""},{"v":10000,"label":"10000"}], Dygraph.numericTicks(41.220000000000084, 15576.828000000018, 400, this.createOptionsViewForAxis('y',{"logscale":true,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":40,"label":"40"},{"v":50,"label":"50"},{"v":60,"label":"60"},{"v":70,"label":"70"},{"v":80,"label":"80"},{"v":90,"label":"90"}], Dygraph.numericTicks(44.5, 98.5, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":5,"label":"5"},{"v":6,"label":""},{"v":7,"label":""},{"v":8,"label":""},{"v":9,"label":""},{"v":10,"label":"10"},{"v":20,"label":"20"},{"v":30,"label":""},{"v":40,"label":""},{"v":50,"label":"50"},{"v":60,"label":""},{"v":70,"label":""},{"v":80,"label":""},{"v":90,"label":""},{"v":100,"label":"100"},{"v":200,"label":"200"},{"v":300,"label":""},{"v":400,"label":""},{"v":500,"label":"500"},{"v":600,"label":""},{"v":700,"label":""},{"v":800,"label":""},{"v":900,"label":""},{"v":1000,"label":"1000"}], Dygraph.numericTicks(5, 1099.5, 300, this.createOptionsViewForAxis('y',{"logscale":true,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":50,"label":"50"},{"v":55,"label":"55"},{"v":60,"label":"60"},{"v":65,"label":"65"},{"v":70,"label":"70"},{"v":75,"label":"75"},{"v":80,"label":"80"}], Dygraph.numericTicks(52.5, 82.5, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":68,"label":"68"},{"v":70,"label":"70"},{"v":72,"label":"72"},{"v":74,"label":"74"},{"v":76,"label":"76"},{"v":78,"label":"78"},{"v":80,"label":"80"}], Dygraph.numericTicks(69, 81, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":0,"label":"0"},{"v":20000,"label":"20K"},{"v":40000,"label":"40K"},{"v":60000,"label":"60K"},{"v":80000,"label":"80K"}], Dygraph.numericTicks(7921.099999999999, 81407.9, 240, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
-  assertEquals([{"v":8,"label":"8"},{"v":10,"label":"10"},{"v":12,"label":"12"},{"v":14,"label":"14"},{"v":16,"label":"16"},{"v":18,"label":"18"},{"v":20,"label":"20"}], Dygraph.numericTicks(9, 21, 300, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":8,"label":"8"},{"v":10,"label":"10"},{"v":12,"label":"12"},{"v":14,"label":"14"},{"v":16,"label":"16"},{"v":18,"label":"18"},{"v":20,"label":"20"}], Dygraph.numericTicks(9, 21, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":9,"label":"9"},{"v":10,"label":"10"},{"v":11,"label":"11"},{"v":12,"label":"12"},{"v":13,"label":"13"},{"v":14,"label":"14"},{"v":15,"label":"15"},{"v":16,"label":"16"},{"v":17,"label":"17"},{"v":18,"label":"18"}], Dygraph.numericTicks(9.2, 18.8, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":80,"label":"80"},{"v":100,"label":"100"},{"v":120,"label":"120"},{"v":140,"label":"140"},{"v":160,"label":"160"},{"v":180,"label":"180"},{"v":200,"label":"200"}], Dygraph.numericTicks(90, 210, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":true})));
-  assertEquals([{"v":95,"label":"95"},{"v":96,"label":"96"},{"v":97,"label":"97"},{"v":98,"label":"98"},{"v":99,"label":"99"},{"v":100,"label":"100"},{"v":101,"label":"101"},{"v":102,"label":"102"},{"v":103,"label":"103"},{"v":104,"label":"104"}], Dygraph.numericTicks(95.71121718377088, 104.23150357995226, 320, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-  assertEquals([{"v":950,"label":"950"},{"v":1000,"label":"1000"},{"v":1050,"label":"1050"},{"v":1100,"label":"1100"},{"v":1150,"label":"1150"},{"v":1200,"label":"1200"}], Dygraph.numericTicks(980.1, 1218.9, 200, this.createOptionsViewForAxis('y',{"logscale":null,"labelsKMG2":false,"labelsKMB":false})));
-};
index 3030bc7..0a1c390 100644 (file)
@@ -486,6 +486,12 @@ Dygraph.OPTIONS_REFERENCE =  // <JSON>
     "type": "boolean",
     "description": "When set, display the graph as a step plot instead of a line plot. This option may either be set for the whole graph or for single series."
   },
+  "labelsDateUTC": {
+    "default": "false",
+    "labels": ["Value display/formatting"],
+    "type": "boolean",
+    "description": "Show date/time labels according to UTC (instead of local time)."
+  },
   "labelsKMB": {
     "default": "false",
     "labels": ["Value display/formatting"],
index a3fe90a..1e0c61d 100644 (file)
@@ -241,56 +241,42 @@ Dygraph.DECADAL = 19;
 Dygraph.CENTENNIAL = 20;
 Dygraph.NUM_GRANULARITIES = 21;
 
-/** @type {Array.<number>} */
-Dygraph.SHORT_SPACINGS = [];
-Dygraph.SHORT_SPACINGS[Dygraph.SECONDLY]        = 1000 * 1;
-Dygraph.SHORT_SPACINGS[Dygraph.TWO_SECONDLY]    = 1000 * 2;
-Dygraph.SHORT_SPACINGS[Dygraph.FIVE_SECONDLY]   = 1000 * 5;
-Dygraph.SHORT_SPACINGS[Dygraph.TEN_SECONDLY]    = 1000 * 10;
-Dygraph.SHORT_SPACINGS[Dygraph.THIRTY_SECONDLY] = 1000 * 30;
-Dygraph.SHORT_SPACINGS[Dygraph.MINUTELY]        = 1000 * 60;
-Dygraph.SHORT_SPACINGS[Dygraph.TWO_MINUTELY]    = 1000 * 60 * 2;
-Dygraph.SHORT_SPACINGS[Dygraph.FIVE_MINUTELY]   = 1000 * 60 * 5;
-Dygraph.SHORT_SPACINGS[Dygraph.TEN_MINUTELY]    = 1000 * 60 * 10;
-Dygraph.SHORT_SPACINGS[Dygraph.THIRTY_MINUTELY] = 1000 * 60 * 30;
-Dygraph.SHORT_SPACINGS[Dygraph.HOURLY]          = 1000 * 3600;
-Dygraph.SHORT_SPACINGS[Dygraph.TWO_HOURLY]      = 1000 * 3600 * 2;
-Dygraph.SHORT_SPACINGS[Dygraph.SIX_HOURLY]      = 1000 * 3600 * 6;
-Dygraph.SHORT_SPACINGS[Dygraph.DAILY]           = 1000 * 86400;
-Dygraph.SHORT_SPACINGS[Dygraph.WEEKLY]          = 1000 * 604800;
+// Date components enumeration (in the order of the arguments in Date)
+// TODO: make this an @enum
+Dygraph.DATEFIELD_Y = 0;
+Dygraph.DATEFIELD_M = 1;
+Dygraph.DATEFIELD_D = 2;
+Dygraph.DATEFIELD_HH = 3;
+Dygraph.DATEFIELD_MM = 4;
+Dygraph.DATEFIELD_SS = 5;
+Dygraph.DATEFIELD_MS = 6;
+Dygraph.NUM_DATEFIELDS = 7;
+
+
+/** @type {Array.<{datefield:number, step:number, spacing:number}>} */
+Dygraph.TICK_PLACEMENT = [];
+Dygraph.TICK_PLACEMENT[Dygraph.SECONDLY]        = {datefield: Dygraph.DATEFIELD_SS, step:   1, spacing: 1000 * 1};
+Dygraph.TICK_PLACEMENT[Dygraph.TWO_SECONDLY]    = {datefield: Dygraph.DATEFIELD_SS, step:   2, spacing: 1000 * 2};
+Dygraph.TICK_PLACEMENT[Dygraph.FIVE_SECONDLY]   = {datefield: Dygraph.DATEFIELD_SS, step:   5, spacing: 1000 * 5};
+Dygraph.TICK_PLACEMENT[Dygraph.TEN_SECONDLY]    = {datefield: Dygraph.DATEFIELD_SS, step:  10, spacing: 1000 * 10};
+Dygraph.TICK_PLACEMENT[Dygraph.THIRTY_SECONDLY] = {datefield: Dygraph.DATEFIELD_SS, step:  30, spacing: 1000 * 30};
+Dygraph.TICK_PLACEMENT[Dygraph.MINUTELY]        = {datefield: Dygraph.DATEFIELD_MM, step:   1, spacing: 1000 * 60};
+Dygraph.TICK_PLACEMENT[Dygraph.TWO_MINUTELY]    = {datefield: Dygraph.DATEFIELD_MM, step:   2, spacing: 1000 * 60 * 2};
+Dygraph.TICK_PLACEMENT[Dygraph.FIVE_MINUTELY]   = {datefield: Dygraph.DATEFIELD_MM, step:   5, spacing: 1000 * 60 * 5};
+Dygraph.TICK_PLACEMENT[Dygraph.TEN_MINUTELY]    = {datefield: Dygraph.DATEFIELD_MM, step:  10, spacing: 1000 * 60 * 10};
+Dygraph.TICK_PLACEMENT[Dygraph.THIRTY_MINUTELY] = {datefield: Dygraph.DATEFIELD_MM, step:  30, spacing: 1000 * 60 * 30};
+Dygraph.TICK_PLACEMENT[Dygraph.HOURLY]          = {datefield: Dygraph.DATEFIELD_HH, step:   1, spacing: 1000 * 3600};
+Dygraph.TICK_PLACEMENT[Dygraph.TWO_HOURLY]      = {datefield: Dygraph.DATEFIELD_HH, step:   2, spacing: 1000 * 3600 * 2};
+Dygraph.TICK_PLACEMENT[Dygraph.SIX_HOURLY]      = {datefield: Dygraph.DATEFIELD_HH, step:   6, spacing: 1000 * 3600 * 6};
+Dygraph.TICK_PLACEMENT[Dygraph.DAILY]           = {datefield: Dygraph.DATEFIELD_D,  step:   1, spacing: 1000 * 86400};
+Dygraph.TICK_PLACEMENT[Dygraph.WEEKLY]          = {datefield: Dygraph.DATEFIELD_D,  step:   7, spacing: 1000 * 604800};
+Dygraph.TICK_PLACEMENT[Dygraph.MONTHLY]         = {datefield: Dygraph.DATEFIELD_M,  step:   1, spacing: 1000 * 7200  * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 / 12
+Dygraph.TICK_PLACEMENT[Dygraph.QUARTERLY]       = {datefield: Dygraph.DATEFIELD_M,  step:   3, spacing: 1000 * 21600 * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 / 4
+Dygraph.TICK_PLACEMENT[Dygraph.BIANNUAL]        = {datefield: Dygraph.DATEFIELD_M,  step:   6, spacing: 1000 * 43200 * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 / 2
+Dygraph.TICK_PLACEMENT[Dygraph.ANNUAL]          = {datefield: Dygraph.DATEFIELD_Y,  step:   1, spacing: 1000 * 86400   * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 * 1
+Dygraph.TICK_PLACEMENT[Dygraph.DECADAL]         = {datefield: Dygraph.DATEFIELD_Y,  step:  10, spacing: 1000 * 864000  * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 * 10
+Dygraph.TICK_PLACEMENT[Dygraph.CENTENNIAL]      = {datefield: Dygraph.DATEFIELD_Y,  step: 100, spacing: 1000 * 8640000 * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 * 100
 
-/** 
- * A collection of objects specifying where it is acceptable to place tick
- * marks for granularities larger than WEEKLY.  
- * 'months' is an array of month indexes on which to place tick marks.
- * 'year_mod' ticks are placed when year % year_mod = 0.
- * @type {Array.<Object>} 
- */
-Dygraph.LONG_TICK_PLACEMENTS = [];
-Dygraph.LONG_TICK_PLACEMENTS[Dygraph.MONTHLY] = {
-  months : [0,1,2,3,4,5,6,7,8,9,10,11], 
-  year_mod : 1
-};
-Dygraph.LONG_TICK_PLACEMENTS[Dygraph.QUARTERLY] = {
-  months: [0,3,6,9], 
-  year_mod: 1
-};
-Dygraph.LONG_TICK_PLACEMENTS[Dygraph.BIANNUAL] = {
-  months: [0,6], 
-  year_mod: 1
-};
-Dygraph.LONG_TICK_PLACEMENTS[Dygraph.ANNUAL] = {
-  months: [0], 
-  year_mod: 1
-};
-Dygraph.LONG_TICK_PLACEMENTS[Dygraph.DECADAL] = {
-  months: [0], 
-  year_mod: 10
-};
-Dygraph.LONG_TICK_PLACEMENTS[Dygraph.CENTENNIAL] = {
-  months: [0], 
-  year_mod: 100
-};
 
 /**
  * This is a list of human-friendly values at which to show tick marks on a log
@@ -317,8 +303,7 @@ Dygraph.PREFERRED_LOG_TICK_VALUES = function() {
  * @param {number} a Left edge of the chart (ms)
  * @param {number} b Right edge of the chart (ms)
  * @param {number} pixels Size of the chart in the relevant dimension (width).
- * @param {function(string):*} opts Function mapping from option name ->
- *     value.
+ * @param {function(string):*} opts Function mapping from option name -&gt; value.
  * @return {number} The appropriate axis granularity for this chart. See the
  *     enumeration of possible values in dygraph-tickers.js.
  */
@@ -334,26 +319,19 @@ Dygraph.pickDateTickGranularity = function(a, b, pixels, opts) {
 };
 
 /**
+ * Compute the number of ticks on a date axis for a given granularity.
  * @param {number} start_time
  * @param {number} end_time
  * @param {number} granularity (one of the granularities enumerated above)
- * @return {number} Number of ticks that would result.
+ * @return {number} (Approximate) number of ticks that would result.
  */
 Dygraph.numDateTicks = function(start_time, end_time, granularity) {
-  if (granularity < Dygraph.MONTHLY) {
-    // Generate one tick mark for every fixed interval of time.
-    var spacing = Dygraph.SHORT_SPACINGS[granularity];
-    return Math.floor(0.5 + 1.0 * (end_time - start_time) / spacing);
-  } else {
-    var tickPlacement = Dygraph.LONG_TICK_PLACEMENTS[granularity];
-
-    var msInYear = 365.2524 * 24 * 3600 * 1000;
-    var num_years = 1.0 * (end_time - start_time) / msInYear;
-    return Math.floor(0.5 + 1.0 * num_years * tickPlacement.months.length / tickPlacement.year_mod);
-  }
+  var spacing = Dygraph.TICK_PLACEMENT[granularity].spacing;
+  return Math.round(1.0 * (end_time - start_time) / spacing);
 };
 
 /**
+ * Compute the positions and labels of ticks on a date axis for a given granularity.
  * @param {number} start_time
  * @param {number} end_time
  * @param {number} granularity (one of the granularities enumerated above)
@@ -364,112 +342,112 @@ Dygraph.numDateTicks = function(start_time, end_time, granularity) {
 Dygraph.getDateAxis = function(start_time, end_time, granularity, opts, dg) {
   var formatter = /** @type{AxisLabelFormatter} */(
       opts("axisLabelFormatter"));
-  var ticks = [];
-  var t;
-
-  if (granularity < Dygraph.MONTHLY) {
-    // Generate one tick mark for every fixed interval of time.
-    var spacing = Dygraph.SHORT_SPACINGS[granularity];
-
-    // Find a time less than start_time which occurs on a "nice" time boundary
-    // for this granularity.
-    var g = spacing / 1000;
-    var d = new Date(start_time);
-    Dygraph.setDateSameTZ(d, {ms: 0});
-
-    var x;
-    if (g <= 60) {  // seconds
-      x = d.getSeconds();
-      Dygraph.setDateSameTZ(d, {s: x - x % g});
-    } else {
-      Dygraph.setDateSameTZ(d, {s: 0});
-      g /= 60;
-      if (g <= 60) {  // minutes
-        x = d.getMinutes();
-        Dygraph.setDateSameTZ(d, {m: x - x % g});
-      } else {
-        Dygraph.setDateSameTZ(d, {m: 0});
-        g /= 60;
-
-        if (g <= 24) {  // days
-          x = d.getHours();
-          d.setHours(x - x % g);
-        } else {
-          d.setHours(0);
-          g /= 24;
-
-          if (g == 7) {  // one week
-            d.setDate(d.getDate() - d.getDay());
-          }
-        }
-      }
-    }
-    start_time = d.getTime();
-
-    // For spacings coarser than two-hourly, we want to ignore daylight
-    // savings transitions to get consistent ticks. For finer-grained ticks,
-    // it's essential to show the DST transition in all its messiness.
-    var start_offset_min = new Date(start_time).getTimezoneOffset();
-    var check_dst = (spacing >= Dygraph.SHORT_SPACINGS[Dygraph.TWO_HOURLY]);
-
-    for (t = start_time; t <= end_time; t += spacing) {
-      d = new Date(t);
-
-      // This ensures that we stay on the same hourly "rhythm" across
-      // daylight savings transitions. Without this, the ticks could get off
-      // by an hour. See tests/daylight-savings.html or issue 147.
-      if (check_dst && d.getTimezoneOffset() != start_offset_min) {
-        var delta_min = d.getTimezoneOffset() - start_offset_min;
-        t += delta_min * 60 * 1000;
-        d = new Date(t);
-        start_offset_min = d.getTimezoneOffset();
-
-        // Check whether we've backed into the previous timezone again.
-        // This can happen during a "spring forward" transition. In this case,
-        // it's best to skip this tick altogether (we may be shooting for a
-        // non-existent time like the 2AM that's skipped) and go to the next
-        // one.
-        if (new Date(t + spacing).getTimezoneOffset() != start_offset_min) {
-          t += spacing;
-          d = new Date(t);
-          start_offset_min = d.getTimezoneOffset();
-        }
-      }
-
-      ticks.push({ v:t,
-                   label: formatter(d, granularity, opts, dg)
-                 });
-    }
+  var utc = opts("labelsDateUTC");
+  
+  var step = Dygraph.TICK_PLACEMENT[granularity].step;
+  var datefield = Dygraph.TICK_PLACEMENT[granularity].datefield;
+  
+  // Choose appropiate date methods according to UTC or local time option.
+  // weekday:        return the day of week from a Date object.
+  // decompose_date: decompose a Date object into an array of datefields.
+  // compose_date:   compose a Date object from an array of date fields.
+  var compose_date, decompose_date, weekday;
+  if (utc) {
+    weekday = function (d) {
+      return d.getUTCDay();
+    };
+    decompose_date = function (d) {
+      var a = [];
+      a[Dygraph.DATEFIELD_Y]  = d.getUTCFullYear();
+      a[Dygraph.DATEFIELD_M]  = d.getUTCMonth();
+      a[Dygraph.DATEFIELD_D]  = d.getUTCDate();
+      a[Dygraph.DATEFIELD_HH] = d.getUTCHours();
+      a[Dygraph.DATEFIELD_MM] = d.getUTCMinutes();
+      a[Dygraph.DATEFIELD_SS] = d.getUTCSeconds();
+      a[Dygraph.DATEFIELD_MS] = d.getUTCMilliseconds();
+      return a;
+    };
+    compose_date = function (a) {
+      var d = new Date(Date.UTC(a[Dygraph.DATEFIELD_Y],
+                                a[Dygraph.DATEFIELD_M],
+                                a[Dygraph.DATEFIELD_D],
+                                a[Dygraph.DATEFIELD_HH],
+                                a[Dygraph.DATEFIELD_MM],
+                                a[Dygraph.DATEFIELD_SS],
+                                a[Dygraph.DATEFIELD_MS]));
+      return d;
+    };
   } else {
-    // Display a tick mark on the first of a set of months of each year.
-    // Years get a tick mark iff y % year_mod == 0. This is useful for
-    // displaying a tick mark once every 10 years, say, on long time scales.
-    var months;
-    var year_mod = 1;  // e.g. to only print one point every 10 years.
-
-    if (granularity < Dygraph.NUM_GRANULARITIES) {
-      months = Dygraph.LONG_TICK_PLACEMENTS[granularity].months;
-      year_mod = Dygraph.LONG_TICK_PLACEMENTS[granularity].year_mod;
-    } else {
-      Dygraph.warn("Span of dates is too long");
-    }
+    weekday = function(d) {
+      return d.getDay();
+    };
+    decompose_date = function (d) {
+      var a = [];
+      a[Dygraph.DATEFIELD_Y]  = d.getFullYear();
+      a[Dygraph.DATEFIELD_M]  = d.getMonth();
+      a[Dygraph.DATEFIELD_D]  = d.getDate();
+      a[Dygraph.DATEFIELD_HH] = d.getHours();
+      a[Dygraph.DATEFIELD_MM] = d.getMinutes();
+      a[Dygraph.DATEFIELD_SS] = d.getSeconds();
+      a[Dygraph.DATEFIELD_MS] = d.getMilliseconds();
+      return a;
+    };
+    compose_date = function (a) {
+      var d = new Date(a[Dygraph.DATEFIELD_Y], 
+                       a[Dygraph.DATEFIELD_M],
+                       a[Dygraph.DATEFIELD_D],
+                       a[Dygraph.DATEFIELD_HH],
+                       a[Dygraph.DATEFIELD_MM],
+                       a[Dygraph.DATEFIELD_SS],
+                       a[Dygraph.DATEFIELD_MS]);
+      return d;
+    };
+  }
+  
+  // Choose a nice tick position before the initial instant.
+  // Currently, this code deals properly with the existent daily granularities:
+  // DAILY (with step of 1) and WEEKLY (with step of 7 but specially handled).
+  // Other daily granularities (say TWO_DAILY) should also be handled specially
+  // by setting the start_date_offset to 0.
+  var start_date = new Date(start_time);
+  var date_array = decompose_date(start_date);
+  var start_date_offset = date_array[datefield] % step;
+  if (granularity == Dygraph.WEEKLY) {
+    // This will put the ticks on Sundays.
+    start_date_offset = weekday(start_date);
+  }
+  date_array[datefield] -= start_date_offset;
+  for (var df = datefield + 1; df < Dygraph.NUM_DATEFIELDS; df++) {
+    // The minimum value is 1 for the day of month, and 0 for all other fields.
+    date_array[df] = (df === Dygraph.DATEFIELD_D) ? 1 : 0;
+  }
 
-    var start_year = new Date(start_time).getFullYear();
-    var end_year   = new Date(end_time).getFullYear();
-    for (var i = start_year; i <= end_year; i++) {
-      if (i % year_mod !== 0) continue;
-      for (var j = 0; j < months.length; j++) {
-        var dt = new Date(i, months[j], 1);
-        dt.setFullYear(i);
-        t = dt.getTime();
-        if (t < start_time || t > end_time) continue;
-        ticks.push({ v:t,
-                     label: formatter(new Date(t), granularity, opts, dg)
-                   });
-      }
+  // Generate the ticks.
+  // This relies on the roll over property of the Date functions:
+  // when some date field is set to a value outside of its logical range,
+  // the excess 'rolls over' the next (more significant) field.
+  // When using local time with DST transitions, different dates may represent 
+  // the same time instant, so do not repeat the tick. At each step, 
+  // we have to check that the date is effectively increased because native 
+  // JS date functions do not assert that on DST transitions.
+  // Since start_date is no later than start_time (but possibly equal), 
+  // assuming a previous tick just before start_time also removes an spurious
+  // tick outside the given time range.
+  var ticks = [];
+  var next_tick_date = compose_date(date_array);
+  var next_tick_time = next_tick_date.getTime();
+  var prev_tick_time = start_time - 1;
+  while (next_tick_time <= end_time) {
+    if (next_tick_time > prev_tick_time) {
+      ticks.push({ v: next_tick_time,
+                   label: formatter(next_tick_date, granularity, opts, dg)
+                 });
+      prev_tick_time = next_tick_time;
     }
+    date_array[datefield] += step;
+    next_tick_date = compose_date(date_array);
+    next_tick_time = next_tick_date.getTime();
   }
-
   return ticks;
 };
 
index 63fc1e0..14aac18 100644 (file)
@@ -477,45 +477,60 @@ Dygraph.zeropad = function(x) {
 
 /**
  * Return a string version of the hours, minutes and seconds portion of a date.
- *
- * @param {number} date The JavaScript date (ms since epoch)
- * @return {string} A time of the form "HH:MM:SS"
+ * @param {number} hh The hours (from 0-23)
+ * @param {number} mm The minutes (from 0-59)
+ * @param {number} ss The seconds (from 0-59)
+ * @return {string} A time of the form "HH:MM" or "HH:MM:SS"
  * @private
  */
-Dygraph.hmsString_ = function(date) {
+Dygraph.hmsString_ = function(hh, mm, ss) {
   var zeropad = Dygraph.zeropad;
-  var d = new Date(date);
-  if (d.getSeconds()) {
-    return zeropad(d.getHours()) + ":" +
-           zeropad(d.getMinutes()) + ":" +
-           zeropad(d.getSeconds());
-  } else {
-    return zeropad(d.getHours()) + ":" + zeropad(d.getMinutes());
+  var ret = zeropad(hh) + ":" + zeropad(mm);
+  if (ss) {
+    ret += ":" + zeropad(ss);
   }
+  return ret;
 };
 
 /**
- * Convert a JS date (millis since epoch) to YYYY/MM/DD
+ * Convert a JS date (millis since epoch) to a formatted string.
  * @param {number} date The JavaScript date (ms since epoch)
- * @return {string} A date of the form "YYYY/MM/DD"
+ * @param {boolean} utc Wether output UTC or local time
+ * @return {string} A date of one of these forms:
+ *     "YYYY/MM/DD", "YYYY/MM/DD HH:MM" or "YYYY/MM/DD HH:MM:SS"
  * @private
  */
-Dygraph.dateString_ = function(date) {
+Dygraph.dateString_ = function(date, utc) {
   var zeropad = Dygraph.zeropad;
-  var d = new Date(date);
-
-  // Get the year:
-  var year = "" + d.getFullYear();
+  var dt = new Date(date);
+  var y, m, d, hh, mm, ss;
+  if (utc) {
+    y = dt.getUTCFullYear();
+    m = dt.getUTCMonth();
+    d = dt.getUTCDate();
+    hh = dt.getUTCHours();
+    mm = dt.getUTCMinutes();
+    ss = dt.getUTCSeconds();
+  } else {
+    y = dt.getFullYear();
+    m = dt.getMonth();
+    d = dt.getDate();
+    hh = dt.getHours();
+    mm = dt.getMinutes();
+    ss = dt.getSeconds();
+  }
+  // Get a year string:
+  var year = "" + y;
   // Get a 0 padded month string
-  var month = zeropad(d.getMonth() + 1);  //months are 0-offset, sigh
+  var month = zeropad(m + 1);  //months are 0-offset, sigh
   // Get a 0 padded day string
-  var day = zeropad(d.getDate());
-
-  var ret = "";
-  var frac = d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds();
-  if (frac) ret = " " + Dygraph.hmsString_(date);
-
-  return year + "/" + month + "/" + day + ret;
+  var day = zeropad(d);
+  var frac = hh * 3600 + mm * 60 + ss;
+  var ret = year + "/" + month + "/" + day;
+  if (frac) {
+    ret += " " + Dygraph.hmsString_(hh,mm,ss);
+  }
+  return ret;
 };
 
 /**
@@ -1183,37 +1198,6 @@ Dygraph.pow = function(base, exp) {
   return Math.pow(base, exp);
 };
 
-// For Dygraph.setDateSameTZ, below.
-Dygraph.dateSetters = {
-  ms: Date.prototype.setMilliseconds,
-  s: Date.prototype.setSeconds,
-  m: Date.prototype.setMinutes,
-  h: Date.prototype.setHours
-};
-
-/**
- * This is like calling d.setSeconds(), d.setMinutes(), etc, except that it
- * adjusts for time zone changes to keep the date/time parts consistent.
- *
- * For example, d.getSeconds(), d.getMinutes() and d.getHours() will all be
- * the same before/after you call setDateSameTZ(d, {ms: 0}). The same is not
- * true if you call d.setMilliseconds(0).
- *
- * @type {function(!Date, Object.<number>)}
- */
-Dygraph.setDateSameTZ = function(d, parts) {
-  var tz = d.getTimezoneOffset();
-  for (var k in parts) {
-    if (!parts.hasOwnProperty(k)) continue;
-    var setter = Dygraph.dateSetters[k];
-    if (!setter) throw "Invalid setter: " + k;
-    setter.call(d, parts[k]);
-    if (d.getTimezoneOffset() != tz) {
-      d.setTime(d.getTime() + (tz - d.getTimezoneOffset()) * 60 * 1000);
-    }
-  }
-};
-
 /**
  * Converts any valid CSS color (hex, rgb(), named color) to an RGB tuple.
  *
index b3243bd..06d899a 100644 (file)
@@ -202,30 +202,62 @@ Dygraph.SHORT_MONTH_NAMES_ = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', '
 
 /**
  * Convert a JS date to a string appropriate to display on an axis that
- * is displaying values at the stated granularity.
+ * is displaying values at the stated granularity. This respects the 
+ * labelsDateUTC option.
  * @param {Date} date The date to format
  * @param {number} granularity One of the Dygraph granularity constants
- * @return {string} The formatted date
+ * @param {Dygraph} opts An options view
+ * @return {string} The date formatted as local time
  * @private
  */
-Dygraph.dateAxisFormatter = function(date, granularity) {
+Dygraph.dateAxisLabelFormatter = function(date, granularity, opts) {
+  var utc = opts('labelsDateUTC');
+  var year, month, day, hours, mins, secs, millis;
+  if (utc) {
+    year = date.getUTCFullYear();
+    month = date.getUTCMonth();
+    day = date.getUTCDate();
+    hours = date.getUTCHours();
+    mins = date.getUTCMinutes();
+    secs = date.getUTCSeconds();
+    millis = date.getUTCMilliseconds();
+  } else {
+    year = date.getFullYear();
+    month = date.getMonth();
+    day = date.getDate();
+    hours = date.getHours();
+    mins = date.getMinutes();
+    secs = date.getSeconds();
+    millis = date.getMilliseconds();
+  }
   if (granularity >= Dygraph.DECADAL) {
-    return '' + date.getFullYear();
+    return '' + year;
   } else if (granularity >= Dygraph.MONTHLY) {
-    return Dygraph.SHORT_MONTH_NAMES_[date.getMonth()] + ' ' + date.getFullYear();
+    return Dygraph.SHORT_MONTH_NAMES_[month] + ' ' + Dygraph.zeropad(year % 100);
   } else {
-    var frac = date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds() + date.getMilliseconds();
+    // 1e-3 factor on millis missing in original implementation
+    var frac = hours * 3600 + mins * 60 + secs + 1e-3 * millis;
     if (frac === 0 || granularity >= Dygraph.DAILY) {
       // e.g. '21Jan' (%d%b)
-      var nd = new Date(date.getTime() + 3600*1000);
-      return Dygraph.zeropad(nd.getDate()) + Dygraph.SHORT_MONTH_NAMES_[nd.getMonth()];
+      return Dygraph.zeropad(day) + Dygraph.SHORT_MONTH_NAMES_[month];
     } else {
-      return Dygraph.hmsString_(date.getTime());
+      return Dygraph.hmsString_(hours, mins, secs);
     }
   }
 };
 
 /**
+ * @private
+ * Return a string version of a JS date for a value label. This respects the 
+ * labelsDateUTC option.
+ * @param {Date} date The date to be formatted
+ * @param {Dygraph} opts An options view
+ */
+Dygraph.dateValueFormatter = function(d, opts) {
+  return Dygraph.dateString_(d, opts('labelsDateUTC'));
+};
+
+/**
  * Standard plotters. These may be used by clients.
  * Available plotters are:
  * - Dygraph.Plotters.linePlotter: draws central lines (most common)
@@ -335,8 +367,8 @@ Dygraph.DEFAULT_ATTRS = {
   axes: {
     x: {
       pixelsPerLabel: 60,
-      axisLabelFormatter: Dygraph.dateAxisFormatter,
-      valueFormatter: Dygraph.dateString_,
+      axisLabelFormatter: Dygraph.dateAxisLabelFormatter,
+      valueFormatter: Dygraph.dateValueFormatter,
       drawGrid: true,
       drawAxis: true,
       independentTicks: true,
@@ -2987,9 +3019,9 @@ Dygraph.prototype.detectTypeFromString_ = function(str) {
 Dygraph.prototype.setXAxisOptions_ = function(isDate) {
   if (isDate) {
     this.attrs_.xValueParser = Dygraph.dateParser;
-    this.attrs_.axes.x.valueFormatter = Dygraph.dateString_;
+    this.attrs_.axes.x.valueFormatter = Dygraph.dateValueFormatter;
     this.attrs_.axes.x.ticker = Dygraph.dateTicker;
-    this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisFormatter;
+    this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisLabelFormatter;
   } else {
     /** @private (shut up, jsdoc!) */
     this.attrs_.xValueParser = function(x) { return parseFloat(x); };
@@ -3187,9 +3219,9 @@ Dygraph.prototype.parseArray_ = function(data) {
 
   if (Dygraph.isDateLike(data[0][0])) {
     // Some intelligent defaults for a date x-axis.
-    this.attrs_.axes.x.valueFormatter = Dygraph.dateString_;
+    this.attrs_.axes.x.valueFormatter = Dygraph.dateValueFormatter;
     this.attrs_.axes.x.ticker = Dygraph.dateTicker;
-    this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisFormatter;
+    this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisLabelFormatter;
 
     // Assume they're all dates.
     var parsedData = Dygraph.clone(data);
@@ -3246,9 +3278,9 @@ Dygraph.prototype.parseDataTable_ = function(data) {
   var indepType = data.getColumnType(0);
   if (indepType == 'date' || indepType == 'datetime') {
     this.attrs_.xValueParser = Dygraph.dateParser;
-    this.attrs_.axes.x.valueFormatter = Dygraph.dateString_;
+    this.attrs_.axes.x.valueFormatter = Dygraph.dateValueFormatter;
     this.attrs_.axes.x.ticker = Dygraph.dateTicker;
-    this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisFormatter;
+    this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisLabelFormatter;
   } else if (indepType == 'number') {
     this.attrs_.xValueParser = function(x) { return parseFloat(x); };
     this.attrs_.axes.x.valueFormatter = function(x) { return x; };
diff --git a/tests/labelsDateUTC.html b/tests/labelsDateUTC.html
new file mode 100644 (file)
index 0000000..a4abfc3
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9">
+    <title>UTC date labels</title>
+    <!--[if IE]>
+    <script type="text/javascript" src="../excanvas.js"></script>
+    <![endif]-->
+    <!--
+    For production (minified) code, use:
+    <script type="text/javascript" src="dygraph-combined.js"></script>
+    -->
+    <script type="text/javascript" src="../dygraph-dev.js"></script>
+  </head>
+  <body>
+
+    <h2>UTC date and time labels</h2>
+
+    <p>This shows how date ticks and labels may be generated according to local 
+    time (default) or UTC with the option <code>labelsDateUTC</code>.</p>
+    
+    <p>72 hours of random hourly data since 2009-Jul-23 18:00 UTC 
+    according to local time (top) and UTC (bottom):</p>
+    
+    <div id="div_loc" style="width:600px; height:200px;"></div>
+    <div id="div_utc" style="width:600px; height:200px;"></div>
+    
+    <p>Please note the offset between the respective ticks in both plots.
+    It should match your local time zone offset.</p>
+    
+    <p>You can also check it by hovering over corresponding points and comparing
+    the value labels.</p>
+    
+    <p>Try different zoom levels to show that ticks are always placed at nice
+    time boundaries.</p>
+
+    <script type="text/javascript">
+      var data = (function() {
+        var rand10 = function () { return Math.round(10 * Math.random()); };
+        var a = []
+        for (var y = 2009, m = 6, d = 23, hh = 18, n=0; n < 72; n++) {
+          a.push([new Date(Date.UTC(y, m, d, hh + n, 0, 0)), rand10()]);
+        }
+        return a;
+      })();
+      gloc = new Dygraph(
+                   document.getElementById("div_loc"),
+                   data,
+                   {
+                     labels: ['local time', 'random']
+                   }
+                 );
+      gutc = new Dygraph(
+                   document.getElementById("div_utc"),
+                   data,
+                   {
+                     labelsDateUTC: true,
+                     labels: ['UTC', 'random']
+                   }
+                 );
+    </script>
+
+  </body>
+</html>
index d216c97..9983391 100644 (file)
@@ -47,8 +47,8 @@
             { 
               axes: {
                 x: {
-                  axisLabelFormatter: function(d, gran) {
-                      return Dygraph.dateAxisFormatter(new Date(d.getTime() + 7200*1000), gran);
+                  axisLabelFormatter: function(d, gran, opts) {
+                      return Dygraph.dateAxisLabelFormatter(new Date(d.getTime() + 7200*1000), gran, opts);
                   }
                 }
               }