    @Test
    public void threeStrings() {

        List<List<Optional<String>>> combinations = Combinator
                .combinations(List.of("a", "b", "c"))
                .collect(Collectors.toList());

        assertEquals(8, combinations.size());
        assertSameSize(3, combinations);

        assertContains(List.of(Optional.empty(), Optional.empty(), Optional.empty()), combinations);
        assertContains(List.of(Optional.empty(), Optional.empty(), Optional.of("c")), combinations);
        assertContains(List.of(Optional.empty(), Optional.of("b"), Optional.empty()), combinations);
        assertContains(List.of(Optional.empty(), Optional.of("b"), Optional.of("c")), combinations);
        assertContains(List.of(Optional.of("a"), Optional.empty(), Optional.empty()), combinations);
        assertContains(List.of(Optional.of("a"), Optional.empty(), Optional.of("c")), combinations);
        assertContains(List.of(Optional.of("a"), Optional.of("b"), Optional.empty()), combinations);
        assertContains(List.of(Optional.of("a"), Optional.of("b"), Optional.of("c")), combinations);

    }