UNPKG

chrono-node

Version:

A natural language date parser in Javascript

166 lines (159 loc) 6.84 kB
import { addDuration, reverseDuration } from "../src/calculation/duration"; test("Test - Adding Duration w/ single timeunit", () => { { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "year": 1 }); expect(output).toStrictEqual(new Date("Sun, Aug 27 2023 12:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "month": 1 }); expect(output).toStrictEqual(new Date("Wed, Sep 27 2022 12:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "week": 1 }); expect(output).toStrictEqual(new Date("Sat, Sep 3 2022 12:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "day": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 28 2022 12:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "hour": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 13:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "minute": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:53:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "second": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:12")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11:00"); const output = addDuration(reference, { "millisecond": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:11:01")); } }); test("Test - Adding Duration w/ single timeunit shorten", () => { { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "y": 1 }); expect(output).toStrictEqual(new Date("Sun, Aug 27 2023 12:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "M": 1 }); expect(output).toStrictEqual(new Date("Wed, Sep 27 2022 12:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "w": 1 }); expect(output).toStrictEqual(new Date("Sat, Sep 3 2022 12:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "d": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 28 2022 12:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "h": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 13:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "m": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:53:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "s": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:12")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11:00"); const output = addDuration(reference, { "ms": 1 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:11:01")); } }); test("Test - Adding Duration w/ multiple timeunits", () => { { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "month": 1, "day": 4 }); expect(output).toStrictEqual(new Date("Wed, Oct 1 2022 12:52:11")); } { const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "month": 1, "day": 4, "hour": 12 }); expect(output).toStrictEqual(new Date("Wed, Oct 2 2022 00:52:11")); } }); test("Test - Adding Duration w/ fractions", () => { { // 0.5 year (aka. half year) => 6 months const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "year": 0.5 }); expect(output).toStrictEqual(new Date("Mon, Feb 27 2023 12:52:11")); } { // 0.5 month => 2 weeks const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "month": 0.5 }); expect(output).toStrictEqual(new Date("Sat, Sep 10 2022 12:52:11")); } { // 0.5 week => 4 days (actually 3.5 days, but we round up to 4 days) const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "week": 0.5 }); expect(output).toStrictEqual(new Date("Sat, Aug 31 2022 12:52:11")); } { // 0.5 day (aka. half day) => 12 hours const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "day": 0.5 }); expect(output).toStrictEqual(new Date("Sat, Aug 28 2022 00:52:11")); } { // 0.5 hour (aka. half hour) => 30 minutes const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "hour": 0.5 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 13:22:11")); } { // 0.5 minute (aka. half minute) => 30 seconds const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "minute": 0.5 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:41")); } { // 0.5 second (aka. half second) => 500 milliseconds const reference = new Date("Sat, Aug 27 2022 12:52:11:00"); const output = addDuration(reference, { "second": 0.5 }); expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:11:500")); } }); test("Test - Adding Duration w/ multiple fractions", () => { { // 0.5 year (aka. half year) => 6 months const reference = new Date("Sat, Aug 27 2022 12:52:11"); const output = addDuration(reference, { "year": 0.5, "month": 2 }); expect(output).toStrictEqual(new Date("Thu, April 27 2023 12:52:11")); } }); test("Test - Reverse Duration", () => { { const timeunits = { year: 5, month: 5 }; expect(reverseDuration(timeunits)).toStrictEqual({ year: -5, month: -5 }); } { const timeunits = { year: -5, month: -5 }; expect(reverseDuration(timeunits)).toStrictEqual({ year: 5, month: 5 }); } });