// Path: src/main/java/org/smallibs/suitcase/cases/core/Cases.java
// static <T> Case.WithoutCapture<T, T> Any() {
//     return new Case0<T, T>(Optional::of).$();
// }
// 
// Path: src/main/java/org/smallibs/suitcase/cases/core/Cases.java
// static <T> Case.WithoutCapture<T, T> Null() {
//     return new Null<>();
// }
// 
// Path: src/main/java/org/smallibs/suitcase/cases/core/Cases.java
// static <T> Var.WithoutInnerCapture<T, T> Var() {
//     return Var(Any());
// }


import junit.framework.TestCase;
import org.junit.Test;
import java.util.Objects;
import static org.smallibs.suitcase.cases.core.Cases.Any;
import static org.smallibs.suitcase.cases.core.Cases.Null;
import static org.smallibs.suitcase.cases.core.Cases.Var;
        TestCase.assertTrue(isInteger.match(0));
        TestCase.assertFalse(isInteger.match("0"));
    }

    @Test
    public void shouldMatchIntegerByValue() throws Exception {
        final Matcher<Integer, Boolean> isZero = Matcher.create();

        isZero.caseOf(0).then(true);
        isZero.caseOf(Any()).then(false);

        TestCase.assertTrue(isZero.match(0));
        TestCase.assertFalse(isZero.match(1));
    }

    @Test
    public void shouldMatchIntegerByValueAndSuppliers() throws Exception {
        final Matcher<Integer, Boolean> isZero = Matcher.create();

        isZero.caseOf(0).then(() -> true);
        isZero.caseOf(Any()).then(() -> false);

        TestCase.assertTrue(isZero.match(0));
        TestCase.assertFalse(isZero.match(1));
    }

    @Test
    public void shouldMatchIntegerByValueAndConditional() throws Exception {
        final Matcher<Integer, Boolean> isZero = Matcher.create();

// Path: src/main/java/org/smallibs/suitcase/cases/core/Cases.java
// static <T> Case.WithoutCapture<T, T> Any() {
//     return new Case0<T, T>(Optional::of).$();
// }
// 
// Path: src/main/java/org/smallibs/suitcase/cases/core/Cases.java
// static <T> Case.WithoutCapture<T, T> Null() {
//     return new Null<>();
// }
// 
// Path: src/main/java/org/smallibs/suitcase/cases/core/Cases.java
// static <T> Var.WithoutInnerCapture<T, T> Var() {
//     return Var(Any());
// }


// Path: src/test/java/org/smallibs/suitcase/match/MatcherTest.java
import junit.framework.TestCase;
import org.junit.Test;
import java.util.Objects;
import static org.smallibs.suitcase.cases.core.Cases.Any;
import static org.smallibs.suitcase.cases.core.Cases.Null;
import static org.smallibs.suitcase.cases.core.Cases.Var;

        TestCase.assertTrue(isInteger.match(0));
        TestCase.assertFalse(isInteger.match("0"));
    }

    @Test
    public void shouldMatchIntegerByValue() throws Exception {
        final Matcher<Integer, Boolean> isZero = Matcher.create();

        isZero.caseOf(0).then(true);
        isZero.caseOf(Any()).then(false);

        TestCase.assertTrue(isZero.match(0));
        TestCase.assertFalse(isZero.match(1));
    }

    @Test
    public void shouldMatchIntegerByValueAndSuppliers() throws Exception {
        final Matcher<Integer, Boolean> isZero = Matcher.create();

        isZero.caseOf(0).then(() -> true);
        isZero.caseOf(Any()).then(() -> false);

        TestCase.assertTrue(isZero.match(0));
        TestCase.assertFalse(isZero.match(1));
    }

    @Test
    public void shouldMatchIntegerByValueAndConditional() throws Exception {
        final Matcher<Integer, Boolean> isZero = Matcher.create();

        isZero.caseOf(Var()).when(i -> i == 0).then(i -> true);