@Test public void testNegationOptimizations() { assertThat(new Expr(TRUE).negate(), is(new Expr(FALSE))); assertThat(new Expr(FALSE).negate(), is(new Expr(TRUE))); assertThat(new Expr(IS_IN_RING).negate(), is(new Expr(IS_IN_CHAIN))); assertThat(new Expr(IS_IN_CHAIN).negate(), is(new Expr(IS_IN_RING))); assertThat(new Expr(IS_ALIPHATIC).negate(), is(new Expr(IS_AROMATIC))); assertThat(new Expr(IS_AROMATIC).negate(), is(new Expr(IS_ALIPHATIC))); assertThat(new Expr(ELEMENT, 8).negate(), is(new Expr(NOT, new Expr(ELEMENT, 8), null))); assertThat(new Expr(NOT, new Expr(ELEMENT, 8), null).negate(), is(new Expr(ELEMENT, 8))); assertThat(new Expr(HAS_UNSPEC_ISOTOPE).negate(), is(new Expr(HAS_ISOTOPE))); assertThat(new Expr(HAS_ISOTOPE).negate(), is(new Expr(HAS_UNSPEC_ISOTOPE))); }
@Test public void adjacentHetero0() { IAtomContainer mol = new AtomContainer(); assertTrue(Smarts.parse(mol, "[Z0]", Smarts.FLAVOR_CACTVS)); Expr actual = getAtomExpr(mol.getAtom(0)); Expr expected = expr(HAS_ALIPHATIC_HETERO_SUBSTITUENT).negate(); assertThat(actual, is(expected)); }
@Test public void usrRecrNot() { Expr expr = new Expr(ELEMENT, 9) .or(new Expr(ELEMENT, 17)) .or(new Expr(ELEMENT, 35)) .negate(); assertThat(Smarts.generateAtom(expr), is("[!$([F,Cl,Br])]")); }
@Test public void testTrivialRecursive2() { Expr expr = getAtomExpr("[!$([F,Cl,Br])]"); assertThat(expr, is(or(expr(ELEMENT, 9), or(expr(ELEMENT, 17), expr(ELEMENT, 35))).negate())); }
@Test public void testToString() { assertThat(new Expr(TRUE).toString(), is("TRUE")); assertThat(new Expr(ELEMENT, 8).toString(), is("ELEMENT=8")); assertThat(new Expr(ELEMENT, 8).or(new Expr(DEGREE, 3)).toString(), is("OR(ELEMENT=8,DEGREE=3)")); assertThat(new Expr(ELEMENT, 8).and(new Expr(DEGREE, 3)).toString(), is("AND(ELEMENT=8,DEGREE=3)")); assertThat(new Expr(ELEMENT, 8).negate().toString(), is("NOT(ELEMENT=8)")); assertThat(new Expr(RECURSIVE, null).toString(), is("RECURSIVE(...)")); }
if (!parseBondExpr(expr, bond, '!')) return false; expr.negate(); break; case '/':
expr = new Expr(HAS_ALIPHATIC_HETERO_SUBSTITUENT); else if (num == 0) expr = new Expr(HAS_ALIPHATIC_HETERO_SUBSTITUENT).negate(); else expr = new Expr(ALIPHATIC_HETERO_SUBSTITUENT_COUNT, num); expr = new Expr(HAS_HETERO_SUBSTITUENT); else if (num == 0) expr = new Expr(HAS_HETERO_SUBSTITUENT).negate(); else expr = new Expr(HETERO_SUBSTITUENT_COUNT, num); if (!parseAtomExpr(atom, expr, '!')) return false; expr.negate(); break; case '$':