@Test
public void testSi4() throws Exception {

    IAtomContainer mol = DefaultChemObjectBuilder.getInstance().newInstance(IAtomContainer.class);
    IAtom si = DefaultChemObjectBuilder.getInstance().newInstance(IAtom.class, "Si");
    IAtom c1 = DefaultChemObjectBuilder.getInstance().newInstance(IAtom.class, "C");
    IAtom cl1 = DefaultChemObjectBuilder.getInstance().newInstance(IAtom.class, "Cl");
    IAtom cl2 = DefaultChemObjectBuilder.getInstance().newInstance(IAtom.class, "Cl");
    IAtom cl3 = DefaultChemObjectBuilder.getInstance().newInstance(IAtom.class, "Cl");
    c1.setImplicitHydrogenCount(3);
    IBond bond1 = DefaultChemObjectBuilder.getInstance().newInstance(IBond.class, si, c1, IBond.Order.SINGLE);
    IBond bond2 = DefaultChemObjectBuilder.getInstance().newInstance(IBond.class, si, cl1, IBond.Order.SINGLE);
    IBond bond3 = DefaultChemObjectBuilder.getInstance().newInstance(IBond.class, si, cl2, IBond.Order.SINGLE);
    IBond bond4 = DefaultChemObjectBuilder.getInstance().newInstance(IBond.class, si, cl3, IBond.Order.SINGLE);
    mol.addAtom(si);
    mol.addAtom(c1);
    mol.addAtom(cl1);
    mol.addAtom(cl2);
    mol.addAtom(cl3);
    mol.addBond(bond1);
    mol.addBond(bond2);
    mol.addBond(bond3);
    mol.addBond(bond4);
    StructGenMatcher matcher = new StructGenMatcher();
    IAtomType matched;
    matched = matcher.findMatchingAtomType(mol, mol.getAtom(0));
    assertAtomType(testedAtomTypes, "Si4", matched);
    matched = matcher.findMatchingAtomType(mol, mol.getAtom(1));
    assertAtomType(testedAtomTypes, "C4", matched);
    for (int i = 3; i < mol.getAtomCount(); i++) {
        matched = matcher.findMatchingAtomType(mol, mol.getAtom(i));
        assertAtomType(testedAtomTypes, "atom " + i + " failed to match", "Cl1", matched);
    }
}