+ if ( p.contains( domains_ids, true ) ) {
+ return false;
+ }
+ domains_ids = new ArrayList<String>();
+ domains_ids.add( "A" );
+ domains_ids.add( "C" );
+ domains_ids.add( "D" );
+ if ( !p.contains( domains_ids, false ) ) {
+ return false;
+ }
+ if ( !p.contains( domains_ids, true ) ) {
+ return false;
+ }
+ domains_ids = new ArrayList<String>();
+ domains_ids.add( "A" );
+ domains_ids.add( "D" );
+ domains_ids.add( "C" );
+ if ( !p.contains( domains_ids, false ) ) {
+ return false;
+ }
+ if ( p.contains( domains_ids, true ) ) {
+ return false;
+ }
+ domains_ids = new ArrayList<String>();
+ domains_ids.add( "A" );
+ domains_ids.add( "A" );
+ domains_ids.add( "B" );
+ if ( !p.contains( domains_ids, false ) ) {
+ return false;
+ }
+ if ( !p.contains( domains_ids, true ) ) {
+ return false;
+ }
+ domains_ids = new ArrayList<String>();
+ domains_ids.add( "A" );
+ domains_ids.add( "A" );
+ domains_ids.add( "A" );
+ domains_ids.add( "B" );
+ domains_ids.add( "B" );
+ if ( !p.contains( domains_ids, false ) ) {
+ return false;
+ }
+ if ( !p.contains( domains_ids, true ) ) {
+ return false;
+ }
+ domains_ids = new ArrayList<String>();
+ domains_ids.add( "A" );
+ domains_ids.add( "A" );
+ domains_ids.add( "B" );
+ domains_ids.add( "A" );
+ domains_ids.add( "B" );
+ domains_ids.add( "B" );
+ domains_ids.add( "A" );
+ domains_ids.add( "B" );
+ domains_ids.add( "C" );
+ domains_ids.add( "A" );
+ domains_ids.add( "C" );
+ domains_ids.add( "D" );
+ if ( !p.contains( domains_ids, false ) ) {
+ return false;
+ }
+ if ( p.contains( domains_ids, true ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testBasicTable() {
+ try {
+ final BasicTable<String> t0 = new BasicTable<String>();
+ if ( t0.getNumberOfColumns() != 0 ) {
+ return false;
+ }
+ if ( t0.getNumberOfRows() != 0 ) {
+ return false;
+ }
+ t0.setValue( 3, 2, "23" );
+ t0.setValue( 10, 1, "error" );
+ t0.setValue( 10, 1, "110" );
+ t0.setValue( 9, 1, "19" );
+ t0.setValue( 1, 10, "101" );
+ t0.setValue( 10, 10, "1010" );
+ t0.setValue( 100, 10, "10100" );
+ t0.setValue( 0, 0, "00" );
+ if ( !t0.getValue( 3, 2 ).equals( "23" ) ) {
+ return false;
+ }
+ if ( !t0.getValue( 10, 1 ).equals( "110" ) ) {
+ return false;
+ }
+ if ( !t0.getValueAsString( 1, 10 ).equals( "101" ) ) {
+ return false;
+ }
+ if ( !t0.getValueAsString( 10, 10 ).equals( "1010" ) ) {
+ return false;
+ }
+ if ( !t0.getValueAsString( 100, 10 ).equals( "10100" ) ) {
+ return false;
+ }
+ if ( !t0.getValueAsString( 9, 1 ).equals( "19" ) ) {
+ return false;
+ }
+ if ( !t0.getValueAsString( 0, 0 ).equals( "00" ) ) {
+ return false;
+ }
+ if ( t0.getNumberOfColumns() != 101 ) {
+ return false;
+ }
+ if ( t0.getNumberOfRows() != 11 ) {
+ return false;
+ }
+ if ( t0.getValueAsString( 49, 4 ) != null ) {
+ return false;
+ }
+ final String l = ForesterUtil.getLineSeparator();
+ final StringBuffer source = new StringBuffer();
+ source.append( "" + l );
+ source.append( "# 1 1 1 1 1 1 1 1" + l );
+ source.append( " 00 01 02 03" + l );
+ source.append( " 10 11 12 13 " + l );
+ source.append( "20 21 22 23 " + l );
+ source.append( " 30 31 32 33" + l );
+ source.append( "40 41 42 43" + l );
+ source.append( " # 1 1 1 1 1 " + l );
+ source.append( "50 51 52 53 54" + l );
+ final BasicTable<String> t1 = BasicTableParser.parse( source.toString(), ' ' );
+ if ( t1.getNumberOfColumns() != 5 ) {
+ return false;
+ }
+ if ( t1.getNumberOfRows() != 6 ) {
+ return false;
+ }
+ if ( !t1.getValueAsString( 0, 0 ).equals( "00" ) ) {
+ return false;
+ }
+ if ( !t1.getValueAsString( 1, 0 ).equals( "01" ) ) {
+ return false;
+ }
+ if ( !t1.getValueAsString( 3, 0 ).equals( "03" ) ) {
+ return false;
+ }
+ if ( !t1.getValueAsString( 4, 5 ).equals( "54" ) ) {
+ return false;
+ }
+ final StringBuffer source1 = new StringBuffer();
+ source1.append( "" + l );
+ source1.append( "# 1; 1; 1; 1 ;1 ;1; 1 ;1;" + l );
+ source1.append( " 00; 01 ;02;03" + l );
+ source1.append( " 10; 11; 12; 13 " + l );
+ source1.append( "20; 21; 22; 23 " + l );
+ source1.append( " 30; 31; 32; 33" + l );
+ source1.append( "40;41;42;43" + l );
+ source1.append( " # 1 1 1 1 1 " + l );
+ source1.append( ";;;50 ; ;52; 53;;54 " + l );
+ final BasicTable<String> t2 = BasicTableParser.parse( source1.toString(), ';' );
+ if ( t2.getNumberOfColumns() != 5 ) {
+ return false;
+ }
+ if ( t2.getNumberOfRows() != 6 ) {
+ return false;
+ }
+ if ( !t2.getValueAsString( 0, 0 ).equals( "00" ) ) {
+ return false;
+ }
+ if ( !t2.getValueAsString( 1, 0 ).equals( "01" ) ) {
+ return false;
+ }
+ if ( !t2.getValueAsString( 3, 0 ).equals( "03" ) ) {
+ return false;
+ }
+ if ( !t2.getValueAsString( 3, 3 ).equals( "33" ) ) {
+ return false;
+ }
+ if ( !t2.getValueAsString( 3, 5 ).equals( "53" ) ) {
+ return false;
+ }
+ if ( !t2.getValueAsString( 1, 5 ).equals( "" ) ) {
+ return false;
+ }
+ final StringBuffer source2 = new StringBuffer();
+ source2.append( "" + l );
+ source2.append( "comment: 1; 1; 1; 1 ;1 ;1; 1 ;1;" + l );
+ source2.append( " 00; 01 ;02;03" + l );
+ source2.append( " 10; 11; 12; 13 " + l );
+ source2.append( "20; 21; 22; 23 " + l );
+ source2.append( " " + l );
+ source2.append( " 30; 31; 32; 33" + l );
+ source2.append( "40;41;42;43" + l );
+ source2.append( " comment: 1 1 1 1 1 " + l );
+ source2.append( ";;;50 ; 52; 53;;54 " + l );
+ final List<BasicTable<String>> tl = BasicTableParser.parse( source2.toString(),
+ ';',
+ false,
+ false,
+ "comment:",
+ false );
+ if ( tl.size() != 2 ) {
+ return false;
+ }
+ final BasicTable<String> t3 = tl.get( 0 );
+ final BasicTable<String> t4 = tl.get( 1 );
+ if ( t3.getNumberOfColumns() != 4 ) {
+ return false;
+ }
+ if ( t3.getNumberOfRows() != 3 ) {
+ return false;
+ }
+ if ( t4.getNumberOfColumns() != 4 ) {
+ return false;
+ }
+ if ( t4.getNumberOfRows() != 3 ) {
+ return false;
+ }
+ if ( !t3.getValueAsString( 0, 0 ).equals( "00" ) ) {
+ return false;
+ }
+ if ( !t4.getValueAsString( 0, 0 ).equals( "30" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testBasicTolXMLparsing() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final TolParser parser = new TolParser();
+ final Phylogeny[] phylogenies_0 = factory.create( Test.PATH_TO_TEST_DATA + "tol_2484.tol", parser );
+ if ( parser.getErrorCount() > 0 ) {
+ System.out.println( parser.getErrorMessages().toString() );
+ return false;
+ }
+ if ( phylogenies_0.length != 1 ) {
+ return false;
+ }
+ final Phylogeny t1 = phylogenies_0[ 0 ];
+ if ( t1.getNumberOfExternalNodes() != 5 ) {
+ return false;
+ }
+ if ( !t1.isRooted() ) {
+ return false;
+ }
+ if ( !t1.getRoot().getNodeData().getTaxonomy().getScientificName().equals( "Mesozoa" ) ) {
+ return false;
+ }
+ if ( !t1.getRoot().getNodeData().getTaxonomy().getIdentifier().getValue().equals( "2484" ) ) {
+ return false;
+ }
+ if ( !t1.getRoot().getChildNode( 0 ).getNodeData().getTaxonomy().getScientificName().equals( "Rhombozoa" ) ) {
+ return false;
+ }
+ if ( t1.getRoot().getChildNode( 0 ).getNumberOfDescendants() != 3 ) {
+ return false;
+ }
+ final Phylogeny[] phylogenies_1 = factory.create( Test.PATH_TO_TEST_DATA + "tol_2.tol", parser );
+ if ( parser.getErrorCount() > 0 ) {
+ System.out.println( parser.getErrorMessages().toString() );
+ return false;
+ }
+ if ( phylogenies_1.length != 1 ) {
+ return false;
+ }
+ final Phylogeny t2 = phylogenies_1[ 0 ];
+ if ( t2.getNumberOfExternalNodes() != 664 ) {
+ return false;
+ }
+ if ( !t2.isRooted() ) {
+ return false;
+ }
+ if ( !t2.getRoot().getNodeData().getTaxonomy().getScientificName().equals( "Eubacteria" ) ) {
+ return false;
+ }
+ if ( !t2.getRoot().getNodeData().getTaxonomy().getIdentifier().getValue().equals( "2" ) ) {
+ return false;
+ }
+ if ( t2.getRoot().getNumberOfDescendants() != 24 ) {
+ return false;
+ }
+ if ( t2.getRoot().getNumberOfDescendants() != 24 ) {
+ return false;
+ }
+ if ( !t2.getRoot().getChildNode( 0 ).getNodeData().getTaxonomy().getScientificName().equals( "Aquificae" ) ) {
+ return false;
+ }
+ if ( !t2.getRoot().getChildNode( 0 ).getChildNode( 0 ).getNodeData().getTaxonomy().getScientificName()
+ .equals( "Aquifex" ) ) {
+ return false;
+ }
+ final Phylogeny[] phylogenies_2 = factory.create( Test.PATH_TO_TEST_DATA + "tol_5.tol", parser );
+ if ( parser.getErrorCount() > 0 ) {
+ System.out.println( parser.getErrorMessages().toString() );
+ return false;
+ }
+ if ( phylogenies_2.length != 1 ) {
+ return false;
+ }
+ final Phylogeny t3 = phylogenies_2[ 0 ];
+ if ( t3.getNumberOfExternalNodes() != 184 ) {
+ return false;
+ }
+ if ( !t3.getRoot().getNodeData().getTaxonomy().getScientificName().equals( "Viruses" ) ) {
+ return false;
+ }
+ if ( !t3.getRoot().getNodeData().getTaxonomy().getIdentifier().getValue().equals( "5" ) ) {
+ return false;
+ }
+ if ( t3.getRoot().getNumberOfDescendants() != 6 ) {
+ return false;
+ }
+ final Phylogeny[] phylogenies_3 = factory.create( Test.PATH_TO_TEST_DATA + "tol_4567.tol", parser );
+ if ( parser.getErrorCount() > 0 ) {
+ System.out.println( parser.getErrorMessages().toString() );
+ return false;
+ }
+ if ( phylogenies_3.length != 1 ) {
+ return false;
+ }
+ final Phylogeny t4 = phylogenies_3[ 0 ];
+ if ( t4.getNumberOfExternalNodes() != 1 ) {
+ return false;
+ }
+ if ( !t4.getRoot().getNodeData().getTaxonomy().getScientificName().equals( "Marpissa decorata" ) ) {
+ return false;
+ }
+ if ( !t4.getRoot().getNodeData().getTaxonomy().getIdentifier().getValue().equals( "4567" ) ) {
+ return false;
+ }
+ if ( t4.getRoot().getNumberOfDescendants() != 0 ) {
+ return false;
+ }
+ final Phylogeny[] phylogenies_4 = factory.create( Test.PATH_TO_TEST_DATA + "tol_16299.tol", parser );
+ if ( parser.getErrorCount() > 0 ) {
+ System.out.println( parser.getErrorMessages().toString() );
+ return false;
+ }
+ if ( phylogenies_4.length != 1 ) {
+ return false;
+ }
+ final Phylogeny t5 = phylogenies_4[ 0 ];
+ if ( t5.getNumberOfExternalNodes() != 13 ) {
+ return false;
+ }
+ if ( !t5.getRoot().getNodeData().getTaxonomy().getScientificName().equals( "Hominidae" ) ) {
+ return false;
+ }
+ if ( !t5.getRoot().getNodeData().getTaxonomy().getIdentifier().getValue().equals( "16299" ) ) {
+ return false;
+ }
+ if ( t5.getRoot().getNumberOfDescendants() != 2 ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testBasicTreeMethods() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final Phylogeny t2 = factory.create( "((A:1,B:2)AB:1,(C:3,D:5)CD:3)ABCD:0.5", new NHXParser() )[ 0 ];
+ if ( t2.getNumberOfExternalNodes() != 4 ) {
+ return false;
+ }
+ if ( t2.getHeight() != 8.5 ) {
+ return false;
+ }
+ if ( !t2.isCompletelyBinary() ) {
+ return false;
+ }
+ if ( t2.isEmpty() ) {
+ return false;
+ }
+ final Phylogeny t3 = factory.create( "((A:1,B:2,C:10)ABC:1,(D:3,E:5)DE:3)", new NHXParser() )[ 0 ];
+ if ( t3.getNumberOfExternalNodes() != 5 ) {
+ return false;
+ }
+ if ( t3.getHeight() != 11 ) {
+ return false;
+ }
+ if ( t3.isCompletelyBinary() ) {
+ return false;
+ }
+ final PhylogenyNode n = t3.getNode( "ABC" );
+ final Phylogeny t4 = factory.create( "((A:1,B:2,C:10)ABC:1,(D:3,E:5)DE:3,(F,G,H,I))", new NHXParser() )[ 0 ];
+ if ( t4.getNumberOfExternalNodes() != 9 ) {
+ return false;
+ }
+ if ( t4.getHeight() != 11 ) {
+ return false;
+ }
+ if ( t4.isCompletelyBinary() ) {
+ return false;
+ }
+ final StringBuffer sb5 = new StringBuffer( "(((A11:2)A1:2,(A21:1,A22:2,A23)A2:11,A3:2)A:2,B:10,C:3,D:8)" );
+ final Phylogeny t5 = factory.create( sb5, new NHXParser() )[ 0 ];
+ if ( t5.getNumberOfExternalNodes() != 8 ) {
+ return false;
+ }
+ if ( t5.getHeight() != 15 ) {
+ return false;
+ }
+ final StringBuffer sb6 = new StringBuffer( "(X,Y,Z,(((A111)A11:2)A1:2,(X,Y,Z,A21:1,A22:2,A23)A2:11,A3:2)A:2,B:10,C:3,D:8)" );
+ final Phylogeny t6 = factory.create( sb6, new NHXParser() )[ 0 ];
+ if ( t6.getHeight() != 15 ) {
+ return false;
+ }
+ final StringBuffer sb7 = new StringBuffer( "(((A11:2)A1:2,(A21:1,A22:2,A23)A2:11,A3:2)A:2,B:10,C:15,D:8)" );
+ final Phylogeny t7 = factory.create( sb7, new NHXParser() )[ 0 ];
+ if ( t7.getHeight() != 15 ) {
+ return false;
+ }
+ final StringBuffer sb8 = new StringBuffer( "(((A11:11)A1:2,(A21:2,A22:2,A23,A24,AA:)A2:11,A3:2)A:2,B:15,C:15,D:15)" );
+ final Phylogeny t8 = factory.create( sb8, new NHXParser() )[ 0 ];
+ if ( t8.getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( t8.getHeight() != 15 ) {