UNPKG

semantic-ds-toolkit

Version:

Performance-first semantic layer for modern data stacks - Stable Column Anchors & intelligent inference

102 lines 4.81 kB
"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