SPB Git forge

spb/immbot-ai

Public
1commits 1branches 0releases
1.5 MBsize
maindefault branch
20 days agolast push
TypeScript 98.3% CSS 0.9% Shell 0.7%
1.5 KB · 43 lines typescript
Raw Blame History
1import { describe, expect, it } from "vitest";2import { initialCardState, reviewCard } from "../lib/learning/sm2.ts";34describe("SM-2 (répétition espacée)", () => {5  it("suit la progression 1j → 6j → ~15j pour des rappels « Bien »", () => {6    let s = initialCardState();7    let r = reviewCard(s, 4);8    expect(r.intervalDays).toBe(1);9    r = reviewCard(r, 4);10    expect(r.intervalDays).toBe(6);11    r = reviewCard(r, 4);12    expect(r.intervalDays).toBeGreaterThanOrEqual(13);13    expect(r.intervalDays).toBeLessThanOrEqual(17);14  });1516  it("réinitialise la carte en cas d'échec (Encore) et compte la défaillance", () => {17    let s = { ef: 2.5, intervalDays: 30, reps: 5, lapses: 0 };18    const r = reviewCard(s, 2);19    expect(r.reps).toBe(0);20    expect(r.lapses).toBe(1);21    expect(r.dueInDays).toBe(0);22  });2324  it("borne le facteur de facilité à 1.3 minimum", () => {25    let s = initialCardState();26    for (let i = 0; i < 20; i++) s = reviewCard(s, 2);27    expect(s.ef).toBeGreaterThanOrEqual(1.3);28  });2930  it("« Facile » allonge davantage que « Difficile »", () => {31    const base = { ef: 2.5, intervalDays: 10, reps: 3, lapses: 0 };32    const easy = reviewCard({ ...base }, 5);33    const hard = reviewCard({ ...base }, 3);34    expect(easy.intervalDays).toBeGreaterThan(hard.intervalDays);35  });3637  it("plafonne l'intervalle à 365 jours", () => {38    let s = { ef: 2.5, intervalDays: 300, reps: 8, lapses: 0 };39    const r = reviewCard(s, 5);40    expect(r.intervalDays).toBeLessThanOrEqual(365);41  });42});43