import {describe, it, assert} from 'vitest'; import {Duration, PlainTime} from '@/'; import {PlainDateTime} from '@/plain-date-time.js'; let values = [new Duration(0, 0, 0, 1), new Duration(0, 0, 1), new Duration(0, 1), new Duration(1)]; describe('PlainDateTime#add', () => { it('hour overflow', () => { let earlier = new PlainDateTime(2020, 5, 31, 23, 12, 38, 271); let result = earlier.add({hours: 2}); let expected = new PlainDateTime(2020, 6, 1, 1, 12, 38, 271); assert.ok(result.equals(expected), 'equals'); }); it('adds duration', () => { let jan31 = new PlainDateTime(2020, 1, 31, 15, 0); let result = jan31.add(Duration.from('P1MT1S')); let expected = new PlainDateTime(2020, 2, 29, 15, 0, 1, 0); assert.ok(result.equals(expected), 'equals'); }); it('regression: mod', () => { let jan31 = new PlainDateTime(2020, 1, 31); let result = jan31.add({minutes: -45}); let expected = new PlainDateTime(2020, 1, 30, 23, 15, 0, 0); assert.ok(result.equals(expected), 'equals'); }); it('regression: mods', () => { let jan31 = new PlainDateTime(2020, 2, 1); let result = jan31.add({minutes: -45}); let expected = new PlainDateTime(2020, 1, 31, 23, 15, 0, 0); assert.ok(result.equals(expected), 'equals'); }); describe('higher units', () => { const plainTime = new PlainTime(15, 23, 30, 123); it.each(values)('adds day', async duration => { let value = plainTime.add(duration); assert.deepEqual([value.hour, value.minute, value.second, value.millisecond], [15, 23, 30, 123]); }); }); });