leetcode

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

linkedListCycle.test.ts (1392B)


      1 import { test } from "node:test";
      2 import assert from "node:assert/strict";
      3 
      4 import { buildList, solution3, type ListNode } from "./linkedListCycle.ts";
      5 
      6 interface CycleCase {
      7   name: string;
      8   values: number[];
      9   pos: number; // index the tail links back to, or -1 for no cycle
     10   expected: boolean;
     11 }
     12 
     13 function fullCases(): CycleCase[] {
     14   return [
     15     { name: "case_1", values: [3, 2, 0, -4], pos: 1, expected: true },
     16     { name: "case_2", values: [1, 2], pos: 0, expected: true },
     17     { name: "case_3", values: [1], pos: -1, expected: false },
     18     { name: "case_4", values: [], pos: -1, expected: false },
     19     { name: "case_5", values: [1, 2], pos: -1, expected: false },
     20     {
     21       name: "case_6",
     22       values: [
     23         -21, 10, 17, 8, 4, 26, 5, 35, 33, -7, -16, 27, -12, 6, 29, -12, 5, 9,
     24         20, 14, 14, 2, 13, -24, 21, 23, -21, 5,
     25       ],
     26       pos: -1,
     27       expected: false,
     28     },
     29     { name: "case_7", values: [1, 1, 1, 1], pos: -1, expected: false },
     30   ];
     31 }
     32 
     33 function runSolverCases(
     34   solverName: string,
     35   solver: (head: ListNode | null) => boolean,
     36   cases: CycleCase[],
     37 ): void {
     38   for (const c of cases) {
     39     test(`${solverName}_${c.name}`, () => {
     40       const head = buildList(c.values, c.pos);
     41       assert.equal(solver(head), c.expected);
     42     });
     43   }
     44 }
     45 
     46 // runSolverCases("solution1", solution1, fullCases());
     47 runSolverCases("solution3", solution3, fullCases());