public abstract Projection complement(int fieldsNumber);
@Test
    void testComplement() {
        assertThat(Projection.of(new int[] {4, 1, 2}).complement(5))
                .isEqualTo(Projection.of(new int[] {0, 3}));

        assertThat(
                        Projection.of(new int[][] {new int[] {4}, new int[] {1}, new int[] {2}})
                                .complement(5))
                .isEqualTo(Projection.of(new int[] {0, 3}));

        assertThatThrownBy(
                        () ->
                                Projection.of(
                                                new int[][] {
                                                    new int[] {4}, new int[] {1, 3}, new int[] {2}
                                                })
                                        .complement(10))
                .isInstanceOf(IllegalStateException.class);
    }