+ if ( phylogenies_3.length != 2 ) {
+ return false;
+ }
+ final Phylogeny a = phylogenies_3[ 0 ];
+ if ( !a.getName().equals( "tree 4" ) ) {
+ return false;
+ }
+ if ( a.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !a.getNode( "node b1" ).getNodeData().getSequence().getName().equals( "b1 gene" ) ) {
+ return false;
+ }
+ if ( !a.getNode( "node b1" ).getNodeData().getTaxonomy().getCommonName().equals( "b1 species" ) ) {
+ return false;
+ }
+ final Phylogeny[] phylogenies_4 = factory.create( Test.PATH_TO_TEST_DATA + "special_characters.xml",
+ xml_parser );
+ if ( xml_parser.getErrorCount() > 0 ) {
+ System.out.println( xml_parser.getErrorMessages().toString() );
+ return false;
+ }
+ if ( phylogenies_4.length != 1 ) {
+ return false;
+ }
+ final Phylogeny s = phylogenies_4[ 0 ];
+ if ( s.getNumberOfExternalNodes() != 6 ) {
+ return false;
+ }
+ s.getNode( "first" );
+ s.getNode( "<>" );
+ s.getNode( "\"<a'b&c'd\">\"" );
+ s.getNode( "'''\"" );
+ s.getNode( "\"\"\"" );
+ s.getNode( "dick & doof" );
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testBasicProtein() {
+ try {
+ final BasicProtein p0 = new BasicProtein( "p0", "owl", 0 );
+ final Domain a = new BasicDomain( "a", 1, 10, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain b = new BasicDomain( "b", 11, 20, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain c = new BasicDomain( "c", 9, 23, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain d = new BasicDomain( "d", 15, 30, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain e = new BasicDomain( "e", 60, 70, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain x = new BasicDomain( "x", 100, 110, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain y = new BasicDomain( "y", 100, 110, ( short ) 1, ( short ) 5, 0.1, -12 );
+ p0.addProteinDomain( y );
+ p0.addProteinDomain( e );
+ p0.addProteinDomain( b );
+ p0.addProteinDomain( c );
+ p0.addProteinDomain( d );
+ p0.addProteinDomain( a );
+ p0.addProteinDomain( x );
+ if ( !p0.toDomainArchitectureString( "~" ).equals( "a~b~c~d~e~x~y" ) ) {
+ return false;
+ }
+ if ( !p0.toDomainArchitectureString( "~", 3, "=" ).equals( "a~b~c~d~e~x~y" ) ) {
+ return false;
+ }
+ //
+ final BasicProtein aa0 = new BasicProtein( "aa", "owl", 0 );
+ final Domain a1 = new BasicDomain( "a", 1, 10, ( short ) 1, ( short ) 5, 0.1, -12 );
+ aa0.addProteinDomain( a1 );
+ if ( !aa0.toDomainArchitectureString( "~" ).equals( "a" ) ) {
+ return false;
+ }
+ if ( !aa0.toDomainArchitectureString( "~", 3, "" ).equals( "a" ) ) {
+ return false;
+ }
+ //
+ final BasicProtein aa1 = new BasicProtein( "aa", "owl", 0 );
+ final Domain a11 = new BasicDomain( "a", 1, 10, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain a12 = new BasicDomain( "a", 2, 20, ( short ) 1, ( short ) 5, 0.1, -12 );
+ aa1.addProteinDomain( a11 );
+ aa1.addProteinDomain( a12 );
+ if ( !aa1.toDomainArchitectureString( "~" ).equals( "a~a" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 3, "" ).equals( "a~a" ) ) {
+ return false;
+ }
+ aa1.addProteinDomain( new BasicDomain( "a", 20, 30, ( short ) 1, ( short ) 5, 0.1, -12 ) );
+ if ( !aa1.toDomainArchitectureString( "~" ).equals( "a~a~a" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 3, "" ).equals( "aaa" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 4, "" ).equals( "a~a~a" ) ) {
+ return false;
+ }
+ aa1.addProteinDomain( new BasicDomain( "a", 30, 40, ( short ) 1, ( short ) 5, 0.1, -12 ) );
+ if ( !aa1.toDomainArchitectureString( "~" ).equals( "a~a~a~a" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 3, "" ).equals( "aaa" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 4, "" ).equals( "aaa" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 5, "" ).equals( "a~a~a~a" ) ) {
+ return false;
+ }
+ aa1.addProteinDomain( new BasicDomain( "b", 32, 40, ( short ) 1, ( short ) 5, 0.1, -12 ) );
+ if ( !aa1.toDomainArchitectureString( "~" ).equals( "a~a~a~a~b" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 3, "" ).equals( "aaa~b" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 4, "" ).equals( "aaa~b" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 5, "" ).equals( "a~a~a~a~b" ) ) {
+ return false;
+ }
+ aa1.addProteinDomain( new BasicDomain( "c", 1, 2, ( short ) 1, ( short ) 5, 0.1, -12 ) );
+ if ( !aa1.toDomainArchitectureString( "~" ).equals( "c~a~a~a~a~b" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 3, "" ).equals( "c~aaa~b" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 4, "" ).equals( "c~aaa~b" ) ) {
+ return false;
+ }
+ if ( !aa1.toDomainArchitectureString( "~", 5, "" ).equals( "c~a~a~a~a~b" ) ) {
+ return false;
+ }
+ //
+ final BasicProtein p00 = new BasicProtein( "p0", "owl", 0 );
+ final Domain a0 = new BasicDomain( "a", 1, 10, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain b0 = new BasicDomain( "b", 11, 20, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain c0 = new BasicDomain( "c", 9, 23, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain d0 = new BasicDomain( "d", 15, 30, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain e0 = new BasicDomain( "e", 60, 70, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain e1 = new BasicDomain( "e", 61, 71, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain e2 = new BasicDomain( "e", 62, 72, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain e3 = new BasicDomain( "e", 63, 73, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain e4 = new BasicDomain( "e", 64, 74, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain e5 = new BasicDomain( "e", 65, 75, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain x0 = new BasicDomain( "x", 100, 110, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain y0 = new BasicDomain( "y", 100, 110, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain y1 = new BasicDomain( "y", 120, 130, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain y2 = new BasicDomain( "y", 140, 150, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain y3 = new BasicDomain( "y", 160, 170, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain z0 = new BasicDomain( "z", 200, 210, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain z1 = new BasicDomain( "z", 300, 310, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain z2 = new BasicDomain( "z", 400, 410, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain zz0 = new BasicDomain( "Z", 500, 510, ( short ) 1, ( short ) 5, 0.1, -12 );
+ final Domain zz1 = new BasicDomain( "Z", 600, 610, ( short ) 1, ( short ) 5, 0.1, -12 );
+ p00.addProteinDomain( y0 );
+ p00.addProteinDomain( e0 );
+ p00.addProteinDomain( b0 );
+ p00.addProteinDomain( c0 );
+ p00.addProteinDomain( d0 );
+ p00.addProteinDomain( a0 );
+ p00.addProteinDomain( x0 );
+ p00.addProteinDomain( y1 );
+ p00.addProteinDomain( y2 );
+ p00.addProteinDomain( y3 );
+ p00.addProteinDomain( e1 );
+ p00.addProteinDomain( e2 );
+ p00.addProteinDomain( e3 );
+ p00.addProteinDomain( e4 );
+ p00.addProteinDomain( e5 );
+ p00.addProteinDomain( z0 );
+ p00.addProteinDomain( z1 );
+ p00.addProteinDomain( z2 );
+ p00.addProteinDomain( zz0 );
+ p00.addProteinDomain( zz1 );
+ if ( !p00.toDomainArchitectureString( "~", 3, "" ).equals( "a~b~c~d~eee~x~yyy~zzz~Z~Z" ) ) {
+ return false;
+ }
+ if ( !p00.toDomainArchitectureString( "~", 4, "" ).equals( "a~b~c~d~eee~x~yyy~z~z~z~Z~Z" ) ) {
+ return false;
+ }
+ if ( !p00.toDomainArchitectureString( "~", 5, "" ).equals( "a~b~c~d~eee~x~y~y~y~y~z~z~z~Z~Z" ) ) {
+ return false;
+ }
+ if ( !p00.toDomainArchitectureString( "~", 6, "" ).equals( "a~b~c~d~eee~x~y~y~y~y~z~z~z~Z~Z" ) ) {
+ return false;
+ }
+ if ( !p00.toDomainArchitectureString( "~", 7, "" ).equals( "a~b~c~d~e~e~e~e~e~e~x~y~y~y~y~z~z~z~Z~Z" ) ) {
+ return false;
+ }
+ // A0 A10 B15 A20 B25 A30 B35 B40 C50 A60 C70 D80
+ final Domain A0 = new BasicDomain( "A", 0, 25, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain A10 = new BasicDomain( "A", 10, 11, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain B15 = new BasicDomain( "B", 11, 16, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain A20 = new BasicDomain( "A", 20, 100, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain B25 = new BasicDomain( "B", 25, 26, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain A30 = new BasicDomain( "A", 30, 31, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain B35 = new BasicDomain( "B", 31, 40, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain B40 = new BasicDomain( "B", 40, 600, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain C50 = new BasicDomain( "C", 50, 59, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain A60 = new BasicDomain( "A", 60, 395, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain C70 = new BasicDomain( "C", 70, 71, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final Domain D80 = new BasicDomain( "D", 80, 81, ( short ) 1, ( short ) 4, 0.1, -12 );
+ final BasicProtein p = new BasicProtein( "p", "owl", 0 );
+ p.addProteinDomain( B15 );
+ p.addProteinDomain( C50 );
+ p.addProteinDomain( A60 );
+ p.addProteinDomain( A30 );
+ p.addProteinDomain( C70 );
+ p.addProteinDomain( B35 );
+ p.addProteinDomain( B40 );
+ p.addProteinDomain( A0 );
+ p.addProteinDomain( A10 );
+ p.addProteinDomain( A20 );
+ p.addProteinDomain( B25 );
+ p.addProteinDomain( D80 );
+ List<String> domains_ids = new ArrayList<String>();
+ domains_ids.add( "A" );
+ domains_ids.add( "B" );
+ domains_ids.add( "C" );
+ if ( !p.contains( domains_ids, false ) ) {
+ return false;
+ }
+ if ( !p.contains( domains_ids, true ) ) {
+ return false;
+ }
+ domains_ids.add( "X" );
+ 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( "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 ) {
+ return false;
+ }
+ final char[] a9 = new char[] { 'a' };
+ final Phylogeny t9 = factory.create( a9, new NHXParser() )[ 0 ];
+ if ( t9.getHeight() != 0 ) {
+ return false;
+ }
+ final char[] a10 = new char[] { 'a', ':', '6' };
+ final Phylogeny t10 = factory.create( a10, new NHXParser() )[ 0 ];
+ if ( t10.getHeight() != 6 ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testConfidenceAssessor() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final Phylogeny t0 = factory.create( "((((A,B)ab,C)abc,D)abcd,E)abcde", new NHXParser() )[ 0 ];
+ final Phylogeny[] ev0 = factory
+ .create( "((((A,B),C),D),E);((((A,B),C),D),E);((((A,B),C),D),E);((((A,B),C),D),E);",
+ new NHXParser() );
+ ConfidenceAssessor.evaluate( "bootstrap", ev0, t0, false, 1, 0, 2 );
+ if ( !isEqual( t0.getNode( "ab" ).getBranchData().getConfidence( 0 ).getValue(), 3 ) ) {
+ return false;
+ }
+ if ( !isEqual( t0.getNode( "abc" ).getBranchData().getConfidence( 0 ).getValue(), 3 ) ) {
+ return false;
+ }
+ final Phylogeny t1 = factory.create( "((((A,B)ab[&&NHX:B=50],C)abc,D)abcd,E)abcde", new NHXParser() )[ 0 ];
+ final Phylogeny[] ev1 = factory
+ .create( "((((A,B),C),D),E);((A,B),((E,D),C));(((A,B),C),(E,D));(A,(((E,D),C),B));(B,(A,((E,D),C)));(C,((E,D),(A,B)));(D,(E,((A,B),C)));",
+ new NHXParser() );
+ ConfidenceAssessor.evaluate( "bootstrap", ev1, t1, false, 1 );
+ if ( !isEqual( t1.getNode( "ab" ).getBranchData().getConfidence( 1 ).getValue(), 7 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "abc" ).getBranchData().getConfidence( 0 ).getValue(), 7 ) ) {
+ return false;
+ }
+ final Phylogeny t_b = factory.create( "((((A,C)ac,D)acd,E)acde,B)abcde", new NHXParser() )[ 0 ];
+ final Phylogeny[] ev_b = factory
+ .create( "((A,C),X);((A,X),C);(A,C);((((A,B),C),D),E);((A,B),((E,D),C));(((A,B),C),(E,D));(A,(((E,D),C),B));(B,(A,((E,D),C)));(C,((E,D),(A,B)));(D,(E,((A,B),C)));((((A,C)ac,D)acd,E)acde,B)abcd",
+ new NHXParser() );
+ ConfidenceAssessor.evaluate( "bootstrap", ev_b, t_b, false, 1 );
+ if ( !isEqual( t_b.getNode( "ac" ).getBranchData().getConfidence( 0 ).getValue(), 4 ) ) {
+ return false;
+ }
+ if ( !isEqual( t_b.getNode( "acd" ).getBranchData().getConfidence( 0 ).getValue(), 1 ) ) {
+ return false;
+ }
+ //
+ final Phylogeny t1x = factory.create( "((((A,B)ab,C)abc,D)abcd,E)abcde", new NHXParser() )[ 0 ];
+ final Phylogeny[] ev1x = factory
+ .create( "((((A,B),C),D),E);((A,B),((E,D),C));(((A,B),C),(E,D));(A,(((E,D),C),B));(B,(A,((E,D),C)));(C,((E,D),(A,B)));(D,(E,((A,B),C)));",
+ new NHXParser() );
+ ConfidenceAssessor.evaluate( "bootstrap", ev1x, t1x, true, 1 );
+ if ( !isEqual( t1x.getNode( "ab" ).getBranchData().getConfidence( 0 ).getValue(), 7 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1x.getNode( "abc" ).getBranchData().getConfidence( 0 ).getValue(), 7 ) ) {
+ return false;
+ }
+ final Phylogeny t_bx = factory.create( "((((A,C)ac,D)acd,E)acde,B)abcde", new NHXParser() )[ 0 ];
+ final Phylogeny[] ev_bx = factory
+ .create( "((((A,B),C),D),E);((A,B),((E,D),C));(((A,B),C),(E,D));(A,(((E,D),C),B));(B,(A,((E,D),C)));(C,((E,D),(A,B)));(D,(E,((A,B),C)));((((A,C)ac,D)acd,E)acde,B)abcd",
+ new NHXParser() );
+ ConfidenceAssessor.evaluate( "bootstrap", ev_bx, t_bx, true, 1 );
+ if ( !isEqual( t_bx.getNode( "ac" ).getBranchData().getConfidence( 0 ).getValue(), 1 ) ) {
+ return false;
+ }
+ if ( !isEqual( t_bx.getNode( "acd" ).getBranchData().getConfidence( 0 ).getValue(), 1 ) ) {
+ return false;
+ }
+ final Phylogeny[] t2 = factory
+ .create( "((((a,b),c),d),e);(((a,b),c),(d,e));(((((a,b),c),d),e),f);((((a,b),c),(d,e)),f);(((a,b),c),d,e);((a,b,c),d,e);",
+ new NHXParser() );
+ final Phylogeny[] ev2 = factory
+ .create( "((((a,b),c),d),e);((((a,b),c),d),e);((((a,b),e),d),c);((((a,b),e),d),c);(((a,b),(c,d)),e);((a,b),x);((a,b),(x,y));(a,b);(a,e);(a,b,c);",
+ new NHXParser() );
+ for( final Phylogeny target : t2 ) {
+ ConfidenceAssessor.evaluate( "bootstrap", ev2, target, false, 1 );
+ }
+ final Phylogeny t4 = factory.create( "((((((A,B)ab,C)abc,D)abcd,E)abcde,F)abcdef,G)abcdefg",
+ new NHXParser() )[ 0 ];
+ final Phylogeny[] ev4 = factory.create( "(((A,B),C),(X,Y));((F,G),((A,B,C),(D,E)))", new NHXParser() );
+ ConfidenceAssessor.evaluate( "bootstrap", ev4, t4, false, 1 );
+ if ( !isEqual( t4.getNode( "ab" ).getBranchData().getConfidence( 0 ).getValue(), 1 ) ) {
+ return false;
+ }
+ if ( !isEqual( t4.getNode( "abc" ).getBranchData().getConfidence( 0 ).getValue(), 2 ) ) {
+ return false;
+ }
+ if ( !isEqual( t4.getNode( "abcde" ).getBranchData().getConfidence( 0 ).getValue(), 1 ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testCopyOfNodeData() {
+ try {
+ final PhylogenyNode n1 = PhylogenyNode
+ .createInstanceFromNhxString( "n5:0.1[&&NHX:S=Ecoli:E=1.1.1.1:D=Y:Co=Y:B=56:T=1:O=22:SO=33:SN=44:W=2:C=10.20.30:XN=S=tag1=value1=unit1]" );
+ final PhylogenyNode n2 = n1.copyNodeData();
+ if ( !n1.toNewHampshireX().equals( n2.toNewHampshireX() ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testCreateBalancedPhylogeny() {
+ try {
+ final Phylogeny p0 = DevelopmentTools.createBalancedPhylogeny( 6, 5 );
+ if ( p0.getRoot().getNumberOfDescendants() != 5 ) {
+ return false;
+ }
+ if ( p0.getNumberOfExternalNodes() != 15625 ) {
+ return false;
+ }
+ final Phylogeny p1 = DevelopmentTools.createBalancedPhylogeny( 2, 10 );
+ if ( p1.getRoot().getNumberOfDescendants() != 10 ) {
+ return false;
+ }
+ if ( p1.getNumberOfExternalNodes() != 100 ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testCreateUriForSeqWeb() {
+ try {
+ final PhylogenyNode n = new PhylogenyNode();
+ n.setName( "tr|B3RJ64" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.UNIPROT_KB + "B3RJ64" ) ) {
+ return false;
+ }
+ n.setName( "B0LM41_HUMAN" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.UNIPROT_KB + "B0LM41_HUMAN" ) ) {
+ return false;
+ }
+ n.setName( "NP_001025424" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_PROTEIN + "NP_001025424" ) ) {
+ return false;
+ }
+ n.setName( "_NM_001030253-" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_NUCCORE + "NM_001030253" ) ) {
+ return false;
+ }
+ n.setName( "XM_002122186" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_NUCCORE + "XM_002122186" ) ) {
+ return false;
+ }
+ n.setName( "dgh_AAA34956_gdg" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_PROTEIN + "AAA34956" ) ) {
+ return false;
+ }
+ n.setName( "AAA34956" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_PROTEIN + "AAA34956" ) ) {
+ return false;
+ }
+ n.setName( "GI:394892" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_GI + "394892" ) ) {
+ System.out.println( TreePanelUtil.createUriForSeqWeb( n, null, null ) );
+ return false;
+ }
+ n.setName( "gi_394892" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_GI + "394892" ) ) {
+ System.out.println( TreePanelUtil.createUriForSeqWeb( n, null, null ) );
+ return false;
+ }
+ n.setName( "gi6335_gi_394892_56635_Gi_43" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_GI + "394892" ) ) {
+ System.out.println( TreePanelUtil.createUriForSeqWeb( n, null, null ) );
+ return false;
+ }
+ n.setName( "P12345" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.UNIPROT_KB + "P12345" ) ) {
+ System.out.println( TreePanelUtil.createUriForSeqWeb( n, null, null ) );
+ return false;
+ }
+ n.setName( "gi_fdgjmn-3jk5-243 mnefmn fg023-0 P12345 4395jtmnsrg02345m1ggi92450jrg890j4t0j240" );
+ if ( !TreePanelUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.UNIPROT_KB + "P12345" ) ) {
+ System.out.println( TreePanelUtil.createUriForSeqWeb( n, null, null ) );
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testDataObjects() {
+ try {
+ final Confidence s0 = new Confidence();
+ final Confidence s1 = new Confidence();
+ if ( !s0.isEqual( s1 ) ) {
+ return false;
+ }
+ final Confidence s2 = new Confidence( 0.23, "bootstrap" );
+ final Confidence s3 = new Confidence( 0.23, "bootstrap" );
+ if ( s2.isEqual( s1 ) ) {
+ return false;
+ }
+ if ( !s2.isEqual( s3 ) ) {
+ return false;
+ }
+ final Confidence s4 = ( Confidence ) s3.copy();
+ if ( !s4.isEqual( s3 ) ) {
+ return false;
+ }
+ s3.asSimpleText();
+ s3.asText();
+ // Taxonomy
+ // ----------
+ final Taxonomy t1 = new Taxonomy();
+ final Taxonomy t2 = new Taxonomy();
+ final Taxonomy t3 = new Taxonomy();
+ final Taxonomy t4 = new Taxonomy();
+ final Taxonomy t5 = new Taxonomy();
+ t1.setIdentifier( new Identifier( "ecoli" ) );
+ t1.setTaxonomyCode( "ECOLI" );
+ t1.setScientificName( "E. coli" );
+ t1.setCommonName( "coli" );
+ final Taxonomy t0 = ( Taxonomy ) t1.copy();
+ if ( !t1.isEqual( t0 ) ) {
+ return false;
+ }
+ t2.setIdentifier( new Identifier( "ecoli" ) );
+ t2.setTaxonomyCode( "OTHER" );
+ t2.setScientificName( "what" );
+ t2.setCommonName( "something" );
+ if ( !t1.isEqual( t2 ) ) {