UNPKG

rosbag

Version:

`rosbag` is a node.js & browser compatible module for reading [rosbag](http://wiki.ros.org/rosbag) binary data files.

98 lines (85 loc) 4.03 kB
// Copyright (c) 2018-present, Cruise LLC // This source code is licensed under the Apache License, Version 2.0, // found in the LICENSE file in the root directory of this source tree. // You may not use this file except in compliance with the License. import * as TimeUtil from "./TimeUtil"; import { Time } from "./types"; describe("TimeUtil", () => { const date = new Date(1511798097280); it("can be created from a date", () => { const time = TimeUtil.fromDate(date); expect(time.sec).toBe(Math.floor(1511798097280 / 1000)); expect(time.nsec).toBe(280000000); }); it("can convert to a date", () => { const time = { sec: 1511798097, nsec: 280000000 }; expect(TimeUtil.toDate(time)).toEqual(date); }); it("can sort by compare", () => { const times = [ { sec: 1, nsec: 1 }, { sec: 0, nsec: 0 }, { sec: 1, nsec: 0 }, { sec: 0, nsec: 1 }, ]; times.sort(TimeUtil.compare); expect(times).toEqual([ { sec: 0, nsec: 0 }, { sec: 0, nsec: 1 }, { sec: 1, nsec: 0 }, { sec: 1, nsec: 1 }, ]); }); it("has lessThan functionality", () => { const min = { sec: 0, nsec: 0 }; const oneNano = { sec: 0, nsec: 1 }; const max = { sec: 1, nsec: 1 }; expect(TimeUtil.isLessThan(min, min)).toBe(false); expect(TimeUtil.isLessThan(max, min)).toBe(false); expect(TimeUtil.isLessThan(oneNano, min)).toBe(false); expect(TimeUtil.isLessThan(min, oneNano)).toBe(true); expect(TimeUtil.isLessThan(min, max)).toBe(true); }); it("has greaterThan functionality", () => { const min = { sec: 0, nsec: 0 }; const oneNano = { sec: 0, nsec: 1 }; const max = { sec: 1, nsec: 1 }; expect(TimeUtil.isGreaterThan(min, min)).toBe(false); expect(TimeUtil.isGreaterThan(max, min)).toBe(true); expect(TimeUtil.isGreaterThan(oneNano, min)).toBe(true); expect(TimeUtil.isGreaterThan(min, oneNano)).toBe(false); expect(TimeUtil.isGreaterThan(min, max)).toBe(false); }); it("tests for sameness", () => { const min = { sec: 0, nsec: 0 }; const min2 = { sec: 0, nsec: 0 }; const oneNano = { sec: 0, nsec: 1 }; expect(min === min2).toBe(false); expect(TimeUtil.areSame(min, min2)).toBe(true); expect(TimeUtil.areSame(min, oneNano)).toBe(false); }); const testAddition = (left: Time, right: Time, expected: Time) => { expect(TimeUtil.add(left, right)).toEqual(expected); expect(TimeUtil.add(right, left)).toEqual(expected); }; it("can add two times together", () => { testAddition({ sec: 0, nsec: 0 }, { sec: 0, nsec: 0 }, { sec: 0, nsec: 0 }); testAddition({ sec: 1, nsec: 100 }, { sec: 2, nsec: 200 }, { sec: 3, nsec: 300 }); testAddition({ sec: 0, nsec: 1e9 - 1 }, { sec: 0, nsec: 1 }, { sec: 1, nsec: 0 }); testAddition({ sec: 0, nsec: 1e9 - 1 }, { sec: 0, nsec: 101 }, { sec: 1, nsec: 100 }); testAddition({ sec: 3, nsec: 0 }, { sec: 0, nsec: 2 * -1e9 }, { sec: 1, nsec: 0 }); testAddition({ sec: 1, nsec: 1 }, { sec: 0, nsec: -2 }, { sec: 0, nsec: 1e9 - 1 }); testAddition({ sec: 1, nsec: 1 }, { sec: 0, nsec: -2 }, { sec: 0, nsec: 1e9 - 1 }); testAddition({ sec: 3, nsec: 1 }, { sec: -2, nsec: -2 }, { sec: 0, nsec: 1e9 - 1 }); testAddition({ sec: 1, nsec: 0 }, { sec: 0, nsec: -1e9 }, { sec: 0, nsec: 0 }); testAddition({ sec: 3, nsec: 1 }, { sec: 1, nsec: -2 }, { sec: 3, nsec: 1e9 - 1 }); testAddition({ sec: 3, nsec: 0 }, { sec: 0, nsec: -(2 * 1e9) + 1 }, { sec: 1, nsec: 1 }); testAddition({ sec: 10, nsec: 0 }, { sec: 10, nsec: 10 * 1e9 }, { sec: 30, nsec: 0 }); testAddition({ sec: 10, nsec: 0 }, { sec: 10, nsec: -10 * 1e9 }, { sec: 10, nsec: 0 }); testAddition({ sec: 0, nsec: 0 }, { sec: 10, nsec: -10 * 1e9 }, { sec: 0, nsec: 0 }); }); it("throws when addition results in negative time", () => { expect(() => TimeUtil.add({ sec: 0, nsec: 0 }, { sec: -1, nsec: 0 })).toThrow(); expect(() => TimeUtil.add({ sec: 0, nsec: 0 }, { sec: 0, nsec: -1 })).toThrow(); }); });