it("should convert any random date",function(){ var dates_to_check =[ new Date(1,1,1601), new Date(14,7,1789), new Date(14,4,1929), new Date(14,4,1968), new Date(14,4,1972), new Date(14,4,2172) ]; for(var i=0;i<100;i++) { dates_to_check.push(ec.randomDateTime()); } var date,check_date, check_date_bn; var bs = new BinaryStream(); for(var i=0;i<dates_to_check.length;i++) { date = dates_to_check[i]; var hl = date_time.bn_dateToHundredNanoSecondFrom1601(date); var hl_bn = bn_dateToHundredNanoSecondFrom1601_big_number(date); check_date = date_time.bn_hundredNanoSecondFrom1601ToDate(hl[0],hl[1]); check_date_bn = bn_hundredNanoSecondFrom1601ToDate_big_number(hl[0],hl[1]); check_date.toString().should.eql(date.toString()); ec.isValidUInt32(hl[0]).should.eql(true); ec.isValidUInt32(hl[1]).should.eql(true); ec.encodeDateTime(date,bs); bs.rewind(); } });
it("bn_dateToHundredNanoSecondFrom1601 should return n=(number of nanosecond in a single day) for January, 2nd 1601 00:00:00 UTC", function () { var date = new Date(Date.UTC(1601, 0, 2, 0, 0, 0 )); var nano = date_time.bn_dateToHundredNanoSecondFrom1601(date); var value = 24 * 60 * 60 * 1000 * 10000; // number of nanosecond in a single day nano[0].should.equal(Math.floor(value / 0x100000000)); nano[1].should.equal(value % 0x100000000); });
it("should ensure that fast method (bn_hundredNanoSecondFrom1601ToDate) is faster than slow method",function(done) { var date = new Date(2014, 0, 1); var nano = date_time.bn_dateToHundredNanoSecondFrom1601(date); var bench = new Benchmarker(); bench.add('bn_hundredNanoSecondFrom1601ToDate_safe', function() { bn_hundredNanoSecondFrom1601ToDate_big_number(nano[0],nano[1]); }) .add('bn_hundredNanoSecondFrom1601ToDate_fast', function() { date_time.bn_hundredNanoSecondFrom1601ToDate(nano[0],nano[1]); }) .on('cycle', function(message) { console.log(message); }) .on('complete', function() { console.log(' Fastest is ' + this.fastest.name); console.log(' Speed Up : x', this.speedUp); this.fastest.name.should.eql("bn_hundredNanoSecondFrom1601ToDate_fast"); done(); }) .run(); });
it("should check that slow and fast method produce same result",function() { var date = new Date(2014, 0, 1); var nano1 = bn_dateToHundredNanoSecondFrom1601_big_number(date); var nano2 = date_time.bn_dateToHundredNanoSecondFrom1601(date); nano1.should.eql(nano2); });
it("bn_dateToHundredNanoSecondFrom1601 should return 0x019DB1DE-D53E8000 = 116444736000000000 for January, 1st 1970 00:00:00 UTC", function () { var date = new Date(Date.UTC(1970, 0, 1, 0, 0, 0)); var nano = date_time.bn_dateToHundredNanoSecondFrom1601(date); var verif = bn_dateToHundredNanoSecondFrom1601_big_number(date); //xx console.log(date.toUTCString(), "0x0"+nano[0].toString(16),"0x"+nano[1].toString(16),nano,verif[0].toString(16),verif[1].toString(16)); nano[0].should.equal(0x019DB1DE); // hi nano[1].should.equal(0xD53E8000); // lo });
it("should handle 100 nanoseconds", function () { var date1 = new Date(Date.UTC(2013, 11, 12, 7, 36, 6)); date1.toISOString().should.eql("2013-12-12T07:36:06.000Z"); var t1 = date1.getTime(); var q1 = date_time.bn_dateToHundredNanoSecondFrom1601(date1); // construct the same date with 713 millisecond more ... var date2 = new Date(Date.UTC(2013, 11, 12, 7, 36, 6)); date2.setMilliseconds(713); date2.toISOString().should.eql("2013-12-12T07:36:06.713Z"); var t2 = date2.getTime(); var q2 = date_time.bn_dateToHundredNanoSecondFrom1601(date2); (t2 - t1).should.eql(713," there must be a difference of 713 milliseconds"); (q2[1] - q1[1]).should.eql(7130000,"there must be a difference of 7130000 nanseconds"); });
it("should create a BrowseRequest with correct default value in viewDescription", function () { var browseRequest = new browse_service.BrowseRequest({ view: {}, requestedMaxReferencesPerNode: 1, nodesToBrowse: [{}] }); // by default timeStamp shall be set to minDate browseRequest.view.viewId.toString().should.eql("ns=0;i=0"); browseRequest.view.viewVersion.should.eql(0); // timestamp shall be minDate( 01/01/1601) to satisfy the .NET server // implementation. var date_time = require("lib/misc/date_time"); date_time.bn_dateToHundredNanoSecondFrom1601(browseRequest.view.timestamp).should.eql([0, 0]); });
it("bn_dateToHundredNanoSecondFrom1601 should return 0 for January, 1st 1601 00:00:00 UTC", function () { var date = new Date(Date.UTC(1601, 0, 1, 0, 0, 0)); var nano = date_time.bn_dateToHundredNanoSecondFrom1601(date); nano[0].should.equal(0); nano[1].should.equal(0); });
.add('bn_dateToHundredNanoSecondFrom1601_fast', function() { var date = new Date(2014, 0, 1); var nano = date_time.bn_dateToHundredNanoSecondFrom1601(date); })