semantic-ds-toolkit
Version:
Performance-first semantic layer for modern data stacks - Stable Column Anchors & intelligent inference
102 lines • 4.81 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const unit_convert_1 = require("../src/operators/unit-convert");
const fx_cache_1 = require("../src/operators/fx-cache");
const timezone_handler_1 = require("../src/operators/timezone-handler");
const grain_adjuster_1 = require("../src/operators/grain-adjuster");
describe('Basic Unit Conversion & Time Alignment Tests', () => {
describe('UnitConverter', () => {
test('should convert same units', async () => {
const converter = new unit_convert_1.UnitConverter();
const result = await converter.convert(100, 'USD', 'USD');
expect(result.value).toBe(100);
expect(result.fromUnit).toBe('USD');
expect(result.toUnit).toBe('USD');
});
test('should convert temperature units', async () => {
const converter = new unit_convert_1.UnitConverter();
const result = await converter.convert(0, 'C', 'F');
expect(result.value).toBe(32);
});
test('should convert distance units', async () => {
const converter = new unit_convert_1.UnitConverter();
const result = await converter.convert(1000, 'm', 'km');
expect(result.value).toBe(1);
});
test('should handle performance target', async () => {
const converter = new unit_convert_1.UnitConverter();
const start = Date.now();
await converter.convert(100, 'ft', 'm');
const elapsed = Date.now() - start;
expect(elapsed).toBeLessThan(50);
});
});
describe('FXCache', () => {
test('should handle same currency', async () => {
const cache = new fx_cache_1.FXCache();
const result = await cache.getExchangeRate('USD', 'USD');
expect(result.rate).toBe(1);
expect(result.fromCurrency).toBe('USD');
expect(result.toCurrency).toBe('USD');
});
test('should provide cache stats', () => {
const cache = new fx_cache_1.FXCache();
const stats = cache.getCacheStats();
expect(stats).toHaveProperty('size');
expect(stats).toHaveProperty('hitRate');
});
});
describe('TimezoneHandler', () => {
test('should detect timezone from timestamps', () => {
const handler = new timezone_handler_1.TimezoneHandler();
const timestamps = [
new Date('2023-01-01T12:00:00Z'),
new Date('2023-01-01T13:00:00Z')
];
const timezone = handler.detectTimezone(timestamps);
expect(typeof timezone).toBe('string');
});
test('should convert between timezones', async () => {
const handler = new timezone_handler_1.TimezoneHandler();
const utcTime = new Date('2023-01-01T12:00:00Z');
const result = await handler.convertTimezone(utcTime, 'UTC', 'America/New_York');
expect(result).toBeInstanceOf(Date);
expect(result.getTime()).not.toBe(utcTime.getTime());
});
test('should validate timezones', () => {
const handler = new timezone_handler_1.TimezoneHandler();
expect(handler.validateTimezone('UTC')).toBe(true);
expect(handler.validateTimezone('Invalid/Timezone')).toBe(false);
});
});
describe('GrainAdjuster', () => {
test('should detect time grain', () => {
const adjuster = new grain_adjuster_1.GrainAdjuster();
const hourlyTimestamps = [
new Date('2023-01-01T00:00:00Z'),
new Date('2023-01-01T01:00:00Z'),
new Date('2023-01-01T02:00:00Z')
];
const grain = adjuster.detectGrain(hourlyTimestamps);
expect(grain).toBe('hour');
});
test('should adjust grain', async () => {
const adjuster = new grain_adjuster_1.GrainAdjuster();
const timestamps = [
new Date('2023-01-01T00:30:00Z'),
new Date('2023-01-01T01:30:00Z')
];
const result = await adjuster.adjustGrain(timestamps, 'auto', 'hour', 'floor');
expect(result.adjustedTimestamps).toHaveLength(2);
expect(result.adjustedTimestamps[0].getMinutes()).toBe(0);
});
test('should create time grids', () => {
const adjuster = new grain_adjuster_1.GrainAdjuster();
const start = new Date('2023-01-01T00:00:00Z');
const end = new Date('2023-01-01T03:00:00Z');
const grid = adjuster.createTimeGrid(start, end, 'hour');
expect(grid).toHaveLength(4);
});
});
});
//# sourceMappingURL=unit-time-basic.test.js.map