moving
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled

This commit is contained in:
Oleg Maslov
2026-09-02 10:10:29 +02:00
commit 0c3e2ead3b
3841 changed files with 970576 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
import { describe, it, expect } from 'vitest';
import { resolveRelativeDate } from '../../src/mind/resolve-relative-date.js';
describe('resolveRelativeDate', () => {
// Reference: 2023-05-08 is a Monday.
const REF = '2023-05-08';
it('resolves the canonical benchmark case (conv-26 q000)', () => {
// "I went to a LGBTQ support group yesterday" said on 2023-05-08 → event 2023-05-07.
const r = resolveRelativeDate('I went to a LGBTQ support group yesterday and it was powerful.', REF);
expect(r).toEqual({ cue: 'yesterday', iso: '2023-05-07' });
});
it('resolves "the day before yesterday" before "yesterday"', () => {
const r = resolveRelativeDate('We met the day before yesterday.', REF);
expect(r).toEqual({ cue: 'the day before yesterday', iso: '2023-05-06' });
});
it('resolves "N days ago"', () => {
expect(resolveRelativeDate('finished it 3 days ago', REF)).toEqual({ cue: '3 days ago', iso: '2023-05-05' });
});
it('resolves "last week" as 7 days', () => {
expect(resolveRelativeDate('ran a race last week', REF)).toEqual({ cue: 'last week', iso: '2023-05-01' });
});
it('resolves "N weeks ago"', () => {
expect(resolveRelativeDate('started 2 weeks ago', REF)).toEqual({ cue: '2 weeks ago', iso: '2023-04-24' });
});
it('resolves "last month" with month arithmetic', () => {
expect(resolveRelativeDate('moved house last month', REF)).toEqual({ cue: 'last month', iso: '2023-04-08' });
});
it('resolves "N months ago"', () => {
expect(resolveRelativeDate('quit 2 months ago', REF)).toEqual({ cue: '2 months ago', iso: '2023-03-08' });
});
it('resolves "last year" (Memori worked example: 4 May 2022 + "last year" → 2021)', () => {
expect(resolveRelativeDate('we went to India last year', '2022-05-04')).toEqual({ cue: 'last year', iso: '2021-05-04' });
});
it('resolves "last <weekday>" to the most recent prior occurrence', () => {
// REF 2023-05-08 is Monday; "last Friday" = 2023-05-05.
expect(resolveRelativeDate('went to a meeting last Friday', REF)).toEqual({ cue: 'last friday', iso: '2023-05-05' });
// "last Monday" from a Monday → the previous Monday (strictly before), 2023-05-01.
expect(resolveRelativeDate('it happened last Monday', REF)).toEqual({ cue: 'last monday', iso: '2023-05-01' });
});
it('handles month-end clamp (Mar 31 1 month → Feb 28, not Mar 3)', () => {
expect(resolveRelativeDate('it was last month', '2023-03-31')).toEqual({ cue: 'last month', iso: '2023-02-28' });
});
it('accepts a datetime reference, not just a date', () => {
expect(resolveRelativeDate('yesterday', '2023-05-08T13:56:00Z')).toEqual({ cue: 'yesterday', iso: '2023-05-07' });
});
it('returns null when there is no relative cue', () => {
expect(resolveRelativeDate('Caroline values self-acceptance.', REF)).toBeNull();
expect(resolveRelativeDate('I am playing Cyberpunk 2077 right now', REF)).toBeNull();
});
it('returns null on an unusable reference date', () => {
expect(resolveRelativeDate('yesterday', null)).toBeNull();
expect(resolveRelativeDate('yesterday', 'not-a-date')).toBeNull();
expect(resolveRelativeDate('yesterday', undefined)).toBeNull();
});
it('returns null on empty text', () => {
expect(resolveRelativeDate('', REF)).toBeNull();
});
it('does not match relative cues embedded in unrelated words', () => {
expect(resolveRelativeDate('he messaged me', REF)).toBeNull();
});
});