blob: 519cbba8594d70f494a2a75f07f39c47adc5f160 [file] [log] [blame]
// Copyright (C) 2018 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import {Time} from '../base/time';
import {HighPrecisionTime} from '../common/high_precision_time';
import {PxSpan, TimeScale} from './time_scale';
describe('TimeScale', () => {
const ts =
new TimeScale(new HighPrecisionTime(40n), 100, new PxSpan(200, 1000));
it('converts timescales to pixels', () => {
expect(ts.timeToPx(Time.fromRaw(40n))).toEqual(200);
expect(ts.timeToPx(Time.fromRaw(140n))).toEqual(1000);
expect(ts.timeToPx(Time.fromRaw(90n))).toEqual(600);
expect(ts.timeToPx(Time.fromRaw(240n))).toEqual(1800);
expect(ts.timeToPx(Time.fromRaw(-60n))).toEqual(-600);
});
it('converts pixels to HPTime objects', () => {
let result = ts.pxToHpTime(200);
expect(result.base).toEqual(40n);
expect(result.offset).toBeCloseTo(0);
result = ts.pxToHpTime(1000);
expect(result.base).toEqual(140n);
expect(result.offset).toBeCloseTo(0);
result = ts.pxToHpTime(600);
expect(result.base).toEqual(90n);
expect(result.offset).toBeCloseTo(0);
result = ts.pxToHpTime(1800);
expect(result.base).toEqual(240n);
expect(result.offset).toBeCloseTo(0);
result = ts.pxToHpTime(-600);
expect(result.base).toEqual(-60n);
expect(result.offset).toBeCloseTo(0);
});
it('converts durations to pixels', () => {
expect(ts.durationToPx(0n)).toEqual(0);
expect(ts.durationToPx(1n)).toEqual(8);
expect(ts.durationToPx(1000n)).toEqual(8000);
});
it('converts pxDeltaToDurations to HPTime durations', () => {
let result = ts.pxDeltaToDuration(0);
expect(result.base).toEqual(0n);
expect(result.offset).toBeCloseTo(0);
result = ts.pxDeltaToDuration(1);
expect(result.base).toEqual(0n);
expect(result.offset).toBeCloseTo(0.125);
result = ts.pxDeltaToDuration(100);
expect(result.base).toEqual(12n);
expect(result.offset).toBeCloseTo(0.5);
});
});