### Question:
PatternBlock implements Block { @Override public boolean equals(Object o) { if (o == this) { return true; } else if (o instanceof PatternBlock) { PatternBlock p = (PatternBlock) o; return p.subject.equals(subject) && p.predicate.equals(predicate) && p.object.equals(object) && Objects.equal(p.context, context); } else { return false; } } PatternBlock(Expression<ID> subject, Expression<UID> predicate, Expression<NODE> object, @Nullable Expression<UID> context);  PatternBlock(Expression<ID> subject, Expression<UID> predicate, Expression<NODE> object); OptionalBlock asOptional(); Expression<ID> getSubject(); Expression<UID> getPredicate(); Expression<NODE> getObject(); @Nullable Expression<UID> getContext(); @Override Predicate not(); @Override @SuppressWarnings("unchecked") R accept(Visitor<R, C> v, C context); @Override Class<? extends Boolean> getType(); @Override BooleanExpression exists(); @Override int hashCode(); @Override boolean equals(Object o); @Override String toString();  }### Answer:
@Test public void Equals() { assertFalse(Blocks.SPOC.equals(Blocks.SPO)); }