+ 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;
+ }