import { describe, expect, it } from "vitest"; import { Expect, AssertEqual, AssertFalse, AssertTrue } from "inferred-types/types"; import { isVariant } from "~/utils/isVariant"; describe("isVariant(val)", () => { it("wide string produces boolean type, runtime resolves", () => { const t1 = isVariant("string" as string); expect(t1).toBe(true); type cases = [ Expect> ]; }); it("wide tokens", () => { const t1 = isVariant("string"); const t2 = isVariant("number"); const t3 = isVariant("boolean"); expect(t1).toBe(true); expect(t2).toBe(true); expect(t3).toBe(true); type cases = [ Expect>, Expect>, Expect>, ]; }); it("wide array tokens", () => { const t1 = isVariant("string[]"); const t2 = isVariant("number[]"); const t3 = isVariant("boolean[]"); const t4 = isVariant("Array"); const t5 = isVariant("Array"); const t6 = isVariant("Array"); expect(t1).toBe(true); expect(t2).toBe(true); expect(t3).toBe(true); expect(t4).toBe(true); expect(t5).toBe(true); expect(t6).toBe(true); type cases = [ Expect>, Expect>, Expect>, Expect>, Expect>, Expect>, ]; }); it("literal tokens", () => { const f1 = isVariant(`"foo"`); const f2 = isVariant(`42`); const f3 = isVariant(`true`); expect(f1).toBe(false); expect(f2).toBe(false); expect(f3).toBe(false); type cases = [ Expect>, Expect>, Expect>, ]; }); it("non-token literal", () => { const f1 = isVariant("foo"); type cases = [ Expect> ]; }); });