1import { Combiner, Number, String } from "effect"
2import { describe, it } from "vitest"
3import { strictEqual } from "./utils/assert.ts"
4
5describe("Combiner", () => {
6 it("flip", () => {
7 const C = Combiner.flip(String.ReducerConcat)
8 strictEqual(C.combine("a", "b"), "ba")
9 })
10
11 it("min", () => {
12 const C = Combiner.min(Number.Order)
13 strictEqual(C.combine(1, 2), 1)
14 strictEqual(C.combine(2, 1), 1)
15 })
16
17 it("max", () => {
18 const C = Combiner.max(Number.Order)
19 strictEqual(C.combine(1, 2), 2)
20 strictEqual(C.combine(2, 1), 2)
21 })
22
23 it("first", () => {
24 const C = Combiner.first<number>()
25 strictEqual(C.combine(1, 2), 1)
26 })
27
28 it("last", () => {
29 const C = Combiner.last<number>()
30 strictEqual(C.combine(1, 2), 2)
31 })
32
33 it("constant", () => {
34 const C = Combiner.constant(0)
35 strictEqual(C.combine(1, 2), 0)
36 })
37
38 it("intercalate", () => {
39 const C = Combiner.intercalate("+")(String.ReducerConcat)
40 strictEqual(C.combine("a", "b"), "a+b")
41 })
42})