AtomTypeDiff { public static IDifference difference(IChemObject first, IChemObject second) { if (!(first instanceof IAtomType && second instanceof IAtomType)) { return null; } IAtomType firstElem = (IAtomType) first; IAtomType secondElem = (IAtomType) second; ChemObjectDifference totalDiff = new ChemObjectDifference("AtomTypeDiff"); totalDiff.addChild(StringDifference.construct("N", firstElem.getAtomTypeName(), secondElem.getAtomTypeName())); totalDiff.addChild(BondOrderDifference.construct("MBO", firstElem.getMaxBondOrder(), secondElem.getMaxBondOrder())); totalDiff .addChild(DoubleDifference.construct("BOS", firstElem.getBondOrderSum(), secondElem.getBondOrderSum())); totalDiff .addChild(IntegerDifference.construct("FC", firstElem.getFormalCharge(), secondElem.getFormalCharge())); totalDiff.addChild(AtomTypeHybridizationDifference.construct("H", firstElem.getHybridization(), secondElem.getHybridization())); totalDiff.addChild(IntegerDifference.construct("NC", firstElem.getFormalNeighbourCount(), secondElem.getFormalNeighbourCount())); totalDiff.addChild(DoubleDifference.construct("CR", firstElem.getCovalentRadius(), secondElem.getCovalentRadius())); totalDiff.addChild(IntegerDifference.construct("V", firstElem.getValency(), secondElem.getValency())); totalDiff.addChild(IsotopeDiff.difference(first, second)); if (totalDiff.childCount() > 0) { return totalDiff; } else { return null; } } private  AtomTypeDiff(); static String diff(IChemObject first, IChemObject second); static IDifference difference(IChemObject first, IChemObject second);  }
@Test public void testDifference() { IAtomType element1 = mock(IAtomType.class); IAtomType element2 = mock(IAtomType.class); when(element1.getHybridization()).thenReturn(PLANAR3); when(element2.getHybridization()).thenReturn(SP3); IDifference difference = AtomTypeDiff.difference(element1, element2); Assert.assertNotNull(difference); }