@Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof Projection)) {
            return false;
        }
        Projection other = (Projection) o;
        if (!this.isNested() && !other.isNested()) {
            return Arrays.equals(this.toTopLevelIndexes(), other.toTopLevelIndexes());
        }
        return Arrays.deepEquals(this.toNestedIndexes(), other.toNestedIndexes());
    }
@Test
    void testEquals() {
        assertThat(Projection.of(new int[][] {new int[] {1}, new int[] {2}, new int[] {3}}))
                .isEqualTo(Projection.of(new int[] {1, 2, 3}));
    }