import { Result } from "../../primitive/result"; import { Option } from "../../primitive/option"; class Foo { n: u32; } describe("PrimitiveResult", () => { it("offsetof", () => { expect(offsetof>()).toBe(6); expect(offsetof>()).toBe(17); expect(offsetof>()).toBe(9); }); it("clone", () => { const o = Result.Ok(1); expect(o == o.clone()).toBe(true); const o2 = Result.Err("233"); expect(o2 == o2.clone()).toBe(true); }); it("isOk", () => { { const x = Result.Ok("233"); expect(x.isOk).toBe(true); } { const x = Result.Ok(1); expect(x.isOk).toBe(true); } { const x = Result.Err("233"); expect(x.isOk).toBe(false); } }); it("isErr", () => { const x = Result.Err("233"); expect(x.isErr).toBe(true); }); it("unwrap, expect", () => { const x = Result.Ok("233"); expect(x.unwrap()).toBe("233"); expect(() => { const x2 = Result.Err("233"); x2.unwrap(); }).toThrow(); expect(() => { const x2 = Result.Err("233"); x2.expect("panic"); }).toThrow(); }); it("unwrapErr, expectErr", () => { const x = Result.Err("233"); expect(x.unwrapErr()).toBe("233"); expect(() => { const x2 = Result.Ok(instantiate()); x2.unwrapErr(); }).toThrow(); expect(() => { const x2 = Result.Ok(instantiate()); x2.expectErr("panic"); }).toThrow(); }); it("unwrapOr", () => { { const x = Result.Ok("233"); expect(x.unwrapOr("333")).toBe("233"); } }); it("unwrapOrElse", () => { { const x = Result.Ok("ok"); expect(x.unwrapOrElse((): string => "333")).toBe("ok"); } { const x = Result.Err("err"); expect(x.unwrapOrElse((): string => "233")).toBe("233"); } }); it("map", () => { const x = Result.Ok("233"); expect(x.map((s) => s + s).unwrap()).toBe("233233"); }); it("mapErr", () => { const x = Result.Err("233"); expect(x.mapErr((s) => s + s).unwrapErr()).toBe("233233"); }); it("mapOr", () => { const x = Result.Ok("ok"); expect(x.mapOr("ok2", (s: string) => s + s)).toBe("okok"); const x2 = Result.Err("err"); expect(x2.mapOr("err2", (s: string) => s + s)).toBe("err2"); }); it("mapOrElse", () => { const x = Result.Ok("233"); expect( x.mapOrElse( () => "233", (s: string) => s + s ) ).toBe("233233"); }); it("flatMap, andThen", () => { const x = Result.Ok("ok"); expect( x.andThen((s) => Result.Ok(s + s)).unwrap() ).toBe("okok"); const x2 = Result.Err("err"); expect( x2.andThen((s) => Result.Ok(s + s)) ).toStrictEqual(Result.Err("err")); }); it("or", () => { const x = Result.Ok("ok"); expect(x.or(Result.Ok("or"))).toStrictEqual( Result.Ok("ok") ); const x2 = Result.Err("err"); expect(x2.or(Result.Ok("ok"))).toStrictEqual( Result.Ok("ok") ); }); it("and", () => { const x = Result.Ok("ok"); expect(x.and(Result.Ok("ok2"))).toStrictEqual( Result.Ok("ok2") ); expect(x.and(Result.Err("err"))).toStrictEqual( Result.Err("err") ); const x2 = Result.Err("err"); expect(x2.and(Result.Ok("ok"))).toStrictEqual( Result.Err("err") ); expect(x2.and(Result.Err("ok"))).toStrictEqual( Result.Err("err") ); }); it("orElse", () => { const x = Result.Ok("ok"); expect( x.orElse(() => Result.Ok("ok")) ).toStrictEqual(Result.Ok("ok")); const x2 = Result.Err("err"); expect( x2.orElse(() => Result.Ok("err2")) ).toStrictEqual(Result.Ok("err2")); }); it("ok, err", () => { const x = Result.Ok("ok"); expect(x.ok()).toStrictEqual(Option.Some("ok")); expect(x.err()).toStrictEqual(Option.None()); const x2 = Result.Err("ok"); expect(x2.err()).toStrictEqual(Option.Some("ok")); expect(x2.ok()).toStrictEqual(Option.None()); }); it("eq", () => { const x = Result.Ok("ok"); const x2 = Result.Ok("ok"); const x3 = Result.Err("err"); const x4 = Result.Err("err"); expect(x.eq(x2)).toBe(true); expect(x.eq(x3)).toBe(false); expect(x3.eq(x4)).toBe(true); expect(x == x2).toBe(true); expect(x == x3).toBe(false); expect(x3 == x4).toBe(true); }); it("notEq", () => { const x = Result.Ok("ok"); const x2 = Result.Ok("ok"); const x3 = Result.Err("err"); const x4 = Result.Err("err"); expect(x.notEq(x2)).toBe(false); expect(x.notEq(x3)).toBe(true); expect(x3.notEq(x4)).toBe(false); expect(x != x2).toBe(false); expect(x != x3).toBe(true); expect(x3 != x4).toBe(false); }); });