CrossTable implements Iterable<CrossTable.Row> { @Override public boolean equals(final Object right) { if (!(right instanceof CrossTable)) { return false; } if (right == this) { return true; } CrossTable table = (CrossTable) right; return this.nrow == table.nrow && this.ncol == table.ncol && this.table.equals(table.table); } CrossTable();  CrossTable(final CrossTable that);  CrossTable(final CrossTable that, long plus); static CrossTable fromContext(final Context<G, M> context); long getNumberOfRows(); long getNumberOfColumns(); void addRow(final MutableBitSet bits); Row getRow(int index); static CrossTable complement(final CrossTable that); static CrossTable horizontalSum(final CrossTable that,
                                           final CrossTable other); static CrossTable verticalSum(final CrossTable that,
                                         final CrossTable other); static CrossTable directProduct(final CrossTable that,
                                           final CrossTable other); Decomposition parallelDecomposition(); Decomposition seriesDecomposition(); ConceptLattice asConceptLattice(final Graph graph); @Override Iterator<Row> iterator(); @Override String toString(); @Override boolean equals(final Object right);  }
@Test public void testEquals() { CrossTable that = new CrossTable(); that.addRow(bits(1, 2)); that.addRow(bits(2)); that.addRow(bits(1)); assertTrue(table.equals(that)); assertFalse(table.equals(other)); }