}
@Test
public void testDisjoints() {
KnowledgeBase kb = new KnowledgeBase();
ATermAppl A = term( "A" );
ATermAppl B = term( "B" );
ATermAppl C = term( "C" );
ATermAppl D = term( "D" );
kb.addClass( A );
kb.addClass( B );
kb.addClass( C );
kb.addClass( D );
kb.addSubClass( B, A );
kb.addSubClass( D, C );
kb.addComplementClass( B, C );
assertTrue( kb.isConsistent() );
assertIteratorValues( kb.getDisjointClasses( TOP ).iterator(),
new Object[] { singleton( BOTTOM ) } );
assertIteratorValues( kb.getDisjointClasses( A ).iterator(),
new Object[] { singleton( BOTTOM ) } );
assertIteratorValues( kb.getDisjointClasses( B ).iterator(), new Object[] {
singleton( BOTTOM ), singleton( C ), singleton( D ) } );
assertIteratorValues( kb.getDisjointClasses( C ).iterator(), new Object[] {
singleton( BOTTOM ), singleton( B ) } );
assertIteratorValues( kb.getDisjointClasses( D ).iterator(), new Object[] {
singleton( BOTTOM ), singleton( B ) } );
assertIteratorValues( kb.getDisjointClasses( BOTTOM ).iterator(), new Object[] {
singleton( TOP ), singleton( A ), singleton( B ), singleton( C ), singleton( D ),
singleton( BOTTOM ) } );
assertIteratorValues( kb.getComplements( TOP ).iterator(), new Object[] { BOTTOM } );
assertTrue( kb.getComplements( A ).isEmpty() );
assertIteratorValues( kb.getComplements( B ).iterator(), new Object[] { C } );
assertIteratorValues( kb.getComplements( C ).iterator(), new Object[] { B } );
assertTrue( kb.getComplements( D ).isEmpty() );
assertIteratorValues( kb.getComplements( BOTTOM ).iterator(), new Object[] { TOP } );
assertIteratorValues( kb.getDisjointClasses( not( A ) ).iterator(),
new Object[] { singleton( BOTTOM ), singleton( A ), singleton( B ) } );
assertIteratorValues( kb.getDisjointClasses( not( B ) ).iterator(), new Object[] {
singleton( BOTTOM ), singleton( B ) } );
assertIteratorValues( kb.getDisjointClasses( not( C ) ).iterator(), new Object[] {
singleton( BOTTOM ), singleton( C ), singleton( D ) } );
assertIteratorValues( kb.getDisjointClasses( not( D ) ).iterator(), new Object[] {
singleton( BOTTOM ), singleton( D ) } );
assertIteratorValues( kb.getComplements( not( A ) ).iterator(), new Object[] { A } );
assertIteratorValues( kb.getComplements( not( B ) ).iterator(), new Object[] { B } );
assertIteratorValues( kb.getComplements( not( C ) ).iterator(), new Object[] { C } );
assertIteratorValues( kb.getComplements( not( D ) ).iterator(), new Object[] { D } );
}