+ if ( !it3.next().getName().equals( "C" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "D" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "E" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "F" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "G" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "1" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "2" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "3" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "4" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "5" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "6" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "f1" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "f2" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "f3" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "a" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "b" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "f21" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "X" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "Y" ) ) {
+ return false;
+ }
+ if ( !it3.next().getName().equals( "Z" ) ) {
+ return false;
+ }
+ if ( it3.hasNext() ) {
+ return false;
+ }
+ final Phylogeny t4 = factory.create( "((((D)C)B)A)r", new NHXParser() )[ 0 ];
+ PhylogenyNodeIterator it4;
+ for( it4 = t4.iteratorLevelOrder(); it4.hasNext(); ) {
+ it4.next();
+ }
+ for( it4.reset(); it4.hasNext(); ) {
+ it4.next();
+ }
+ final PhylogenyNodeIterator it5 = t4.iteratorLevelOrder();
+ if ( !it5.next().getName().equals( "r" ) ) {
+ return false;
+ }
+ if ( !it5.next().getName().equals( "A" ) ) {
+ return false;
+ }
+ if ( !it5.next().getName().equals( "B" ) ) {
+ return false;
+ }
+ if ( !it5.next().getName().equals( "C" ) ) {
+ return false;
+ }
+ if ( !it5.next().getName().equals( "D" ) ) {
+ return false;
+ }
+ final Phylogeny t5 = factory.create( "A", new NHXParser() )[ 0 ];
+ PhylogenyNodeIterator it6;
+ for( it6 = t5.iteratorLevelOrder(); it6.hasNext(); ) {
+ it6.next();
+ }
+ for( it6.reset(); it6.hasNext(); ) {
+ it6.next();
+ }
+ final PhylogenyNodeIterator it7 = t5.iteratorLevelOrder();
+ if ( !it7.next().getName().equals( "A" ) ) {
+ return false;
+ }
+ if ( it.hasNext() ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testMafft( final String path ) {
+ try {
+ final List<String> opts = new ArrayList<String>();
+ opts.add( "--maxiterate" );
+ opts.add( "1000" );
+ opts.add( "--localpair" );
+ opts.add( "--quiet" );
+ Msa msa = null;
+ final MsaInferrer mafft = Mafft.createInstance( path );
+ msa = mafft.infer( new File( PATH_TO_TEST_DATA + "ncbi_sn.fasta" ), opts );
+ if ( ( msa == null ) || ( msa.getLength() < 20 ) || ( msa.getNumberOfSequences() != 19 ) ) {
+ return false;
+ }
+ if ( !msa.getIdentifier( 0 ).toString().equals( "a" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testMidpointrooting() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final Phylogeny t0 = factory.create( "(A:1,B:4,C:2,D:2,E:6,F:1,G:1,H:1)", new NHXParser() )[ 0 ];
+ PhylogenyMethods.midpointRoot( t0 );
+ if ( !isEqual( t0.getNode( "E" ).getDistanceToParent(), 5 ) ) {
+ return false;
+ }
+ if ( !isEqual( t0.getNode( "B" ).getDistanceToParent(), 4 ) ) {
+ return false;
+ }
+ if ( !isEqual( PhylogenyMethods.calculateLCA( t0.getNode( "F" ), t0.getNode( "G" ) ).getDistanceToParent(),
+ 1 ) ) {
+ return false;
+ }
+ final Phylogeny t1 = factory.create( "((A:1,B:2)AB:1[&&NHX:B=55],(C:3,D:4)CD:3[&&NHX:B=10])ABCD:0.5",
+ new NHXParser() )[ 0 ];
+ if ( !t1.isRooted() ) {
+ return false;
+ }
+ PhylogenyMethods.midpointRoot( t1 );
+ if ( !isEqual( t1.getNode( "A" ).getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "B" ).getDistanceToParent(), 2 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "C" ).getDistanceToParent(), 3 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "D" ).getDistanceToParent(), 4 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "CD" ).getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "AB" ).getDistanceToParent(), 3 ) ) {
+ return false;
+ }
+ t1.reRoot( t1.getNode( "A" ) );
+ PhylogenyMethods.midpointRoot( t1 );
+ if ( !isEqual( t1.getNode( "A" ).getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "B" ).getDistanceToParent(), 2 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "C" ).getDistanceToParent(), 3 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "D" ).getDistanceToParent(), 4 ) ) {
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "CD" ).getDistanceToParent(), 1 ) ) {
+ System.exit( -1 );
+ return false;
+ }
+ if ( !isEqual( t1.getNode( "AB" ).getDistanceToParent(), 3 ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testMsaQualityMethod() {
+ try {
+ final Sequence s0 = BasicSequence.createAaSequence( "a", "ABAXEFGHIJ" );
+ final Sequence s1 = BasicSequence.createAaSequence( "b", "ABBXEFGHIJ" );
+ final Sequence s2 = BasicSequence.createAaSequence( "c", "AXCXEFGHIJ" );
+ final Sequence s3 = BasicSequence.createAaSequence( "d", "AXDDEFGHIJ" );
+ final List<Sequence> l = new ArrayList<Sequence>();
+ l.add( s0 );
+ l.add( s1 );
+ l.add( s2 );
+ l.add( s3 );
+ final Msa msa = BasicMsa.createInstance( l );
+ if ( !isEqual( 1, MsaMethods.calculateIdentityRatio( msa, 0 ) ) ) {
+ return false;
+ }
+ if ( !isEqual( 0.5, MsaMethods.calculateIdentityRatio( msa, 1 ) ) ) {
+ return false;
+ }
+ if ( !isEqual( 0.25, MsaMethods.calculateIdentityRatio( msa, 2 ) ) ) {
+ return false;
+ }
+ if ( !isEqual( 0.75, MsaMethods.calculateIdentityRatio( msa, 3 ) ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testNextNodeWithCollapsing() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ PhylogenyNode n;
+ List<PhylogenyNode> ext = new ArrayList<PhylogenyNode>();
+ final StringBuffer sb0 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h))fgh)cdefgh)abcdefgh" );
+ final Phylogeny t0 = factory.create( sb0, new NHXParser() )[ 0 ];
+ t0.getNode( "cd" ).setCollapse( true );
+ t0.getNode( "cde" ).setCollapse( true );
+ n = t0.getFirstExternalNode();
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( !ext.get( 0 ).getName().equals( "a" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "b" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "cde" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "f" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "g" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "h" ) ) {
+ return false;
+ }
+ ext.clear();
+ final StringBuffer sb1 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h))fgh)cdefgh)abcdefgh" );
+ final Phylogeny t1 = factory.create( sb1, new NHXParser() )[ 0 ];
+ t1.getNode( "ab" ).setCollapse( true );
+ t1.getNode( "cd" ).setCollapse( true );
+ t1.getNode( "cde" ).setCollapse( true );
+ n = t1.getNode( "ab" );
+ ext = new ArrayList<PhylogenyNode>();
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( !ext.get( 0 ).getName().equals( "ab" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "cde" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "f" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "g" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "h" ) ) {
+ return false;
+ }
+ //
+ //
+ ext.clear();
+ final StringBuffer sb2 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h)gh)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t2 = factory.create( sb2, new NHXParser() )[ 0 ];
+ t2.getNode( "ab" ).setCollapse( true );
+ t2.getNode( "cd" ).setCollapse( true );
+ t2.getNode( "cde" ).setCollapse( true );
+ t2.getNode( "c" ).setCollapse( true );
+ t2.getNode( "d" ).setCollapse( true );
+ t2.getNode( "e" ).setCollapse( true );
+ t2.getNode( "gh" ).setCollapse( true );
+ n = t2.getNode( "ab" );
+ ext = new ArrayList<PhylogenyNode>();
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( !ext.get( 0 ).getName().equals( "ab" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "cde" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "f" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "gh" ) ) {
+ return false;
+ }
+ //
+ //
+ ext.clear();
+ final StringBuffer sb3 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h)gh)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t3 = factory.create( sb3, new NHXParser() )[ 0 ];
+ t3.getNode( "ab" ).setCollapse( true );
+ t3.getNode( "cd" ).setCollapse( true );
+ t3.getNode( "cde" ).setCollapse( true );
+ t3.getNode( "c" ).setCollapse( true );
+ t3.getNode( "d" ).setCollapse( true );
+ t3.getNode( "e" ).setCollapse( true );
+ t3.getNode( "gh" ).setCollapse( true );
+ t3.getNode( "fgh" ).setCollapse( true );
+ n = t3.getNode( "ab" );
+ ext = new ArrayList<PhylogenyNode>();
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( !ext.get( 0 ).getName().equals( "ab" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "cde" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "fgh" ) ) {
+ return false;
+ }
+ //
+ //
+ ext.clear();
+ final StringBuffer sb4 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h)gh)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t4 = factory.create( sb4, new NHXParser() )[ 0 ];
+ t4.getNode( "ab" ).setCollapse( true );
+ t4.getNode( "cd" ).setCollapse( true );
+ t4.getNode( "cde" ).setCollapse( true );
+ t4.getNode( "c" ).setCollapse( true );
+ t4.getNode( "d" ).setCollapse( true );
+ t4.getNode( "e" ).setCollapse( true );
+ t4.getNode( "gh" ).setCollapse( true );
+ t4.getNode( "fgh" ).setCollapse( true );
+ t4.getNode( "abcdefgh" ).setCollapse( true );
+ n = t4.getNode( "abcdefgh" );
+ if ( n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes() != null ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb5 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h))fgh)cdefgh)abcdefgh" );
+ final Phylogeny t5 = factory.create( sb5, new NHXParser() )[ 0 ];
+ ext.clear();
+ n = t5.getFirstExternalNode();
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 8 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "a" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "b" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "c" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "d" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "f" ) ) {
+ return false;
+ }
+ if ( !ext.get( 6 ).getName().equals( "g" ) ) {
+ return false;
+ }
+ if ( !ext.get( 7 ).getName().equals( "h" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb6 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h))fgh)cdefgh)abcdefgh" );
+ final Phylogeny t6 = factory.create( sb6, new NHXParser() )[ 0 ];
+ ext.clear();
+ t6.getNode( "ab" ).setCollapse( true );
+ n = t6.getNode( "ab" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 7 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "ab" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "c" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "d" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "f" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "g" ) ) {
+ return false;
+ }
+ if ( !ext.get( 6 ).getName().equals( "h" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb7 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h))fgh)cdefgh)abcdefgh" );
+ final Phylogeny t7 = factory.create( sb7, new NHXParser() )[ 0 ];
+ ext.clear();
+ t7.getNode( "cd" ).setCollapse( true );
+ n = t7.getNode( "a" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 7 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "a" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "b" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "cd" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "f" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "g" ) ) {
+ return false;
+ }
+ if ( !ext.get( 6 ).getName().equals( "h" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb8 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h))fgh)cdefgh)abcdefgh" );
+ final Phylogeny t8 = factory.create( sb8, new NHXParser() )[ 0 ];
+ ext.clear();
+ t8.getNode( "cd" ).setCollapse( true );
+ t8.getNode( "c" ).setCollapse( true );
+ t8.getNode( "d" ).setCollapse( true );
+ n = t8.getNode( "a" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 7 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "a" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "b" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "cd" ) ) {
+ System.out.println( "2 fail" );
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "f" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "g" ) ) {
+ return false;
+ }
+ if ( !ext.get( 6 ).getName().equals( "h" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb9 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h)gh)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t9 = factory.create( sb9, new NHXParser() )[ 0 ];
+ ext.clear();
+ t9.getNode( "gh" ).setCollapse( true );
+ n = t9.getNode( "a" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 7 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "a" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "b" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "c" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "d" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "f" ) ) {
+ return false;
+ }
+ if ( !ext.get( 6 ).getName().equals( "gh" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb10 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h)gh)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t10 = factory.create( sb10, new NHXParser() )[ 0 ];
+ ext.clear();
+ t10.getNode( "gh" ).setCollapse( true );
+ t10.getNode( "g" ).setCollapse( true );
+ t10.getNode( "h" ).setCollapse( true );
+ n = t10.getNode( "a" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 7 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "a" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "b" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "c" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "d" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "f" ) ) {
+ return false;
+ }
+ if ( !ext.get( 6 ).getName().equals( "gh" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb11 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h)gh)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t11 = factory.create( sb11, new NHXParser() )[ 0 ];
+ ext.clear();
+ t11.getNode( "gh" ).setCollapse( true );
+ t11.getNode( "fgh" ).setCollapse( true );
+ n = t11.getNode( "a" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 6 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "a" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "b" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "c" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "d" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "fgh" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb12 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h)gh)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t12 = factory.create( sb12, new NHXParser() )[ 0 ];
+ ext.clear();
+ t12.getNode( "gh" ).setCollapse( true );
+ t12.getNode( "fgh" ).setCollapse( true );
+ t12.getNode( "g" ).setCollapse( true );
+ t12.getNode( "h" ).setCollapse( true );
+ t12.getNode( "f" ).setCollapse( true );
+ n = t12.getNode( "a" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 6 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "a" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "b" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "c" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "d" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "fgh" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb13 = new StringBuffer( "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h)gh)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t13 = factory.create( sb13, new NHXParser() )[ 0 ];
+ ext.clear();
+ t13.getNode( "ab" ).setCollapse( true );
+ t13.getNode( "b" ).setCollapse( true );
+ t13.getNode( "fgh" ).setCollapse( true );
+ t13.getNode( "gh" ).setCollapse( true );
+ n = t13.getNode( "ab" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 5 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "ab" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "c" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "d" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "fgh" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb14 = new StringBuffer( "((a,b,0)ab,(((c,d)cd,e)cde,(f,(g,h,1,2)gh,0)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t14 = factory.create( sb14, new NHXParser() )[ 0 ];
+ ext.clear();
+ t14.getNode( "ab" ).setCollapse( true );
+ t14.getNode( "a" ).setCollapse( true );
+ t14.getNode( "fgh" ).setCollapse( true );
+ t14.getNode( "gh" ).setCollapse( true );
+ n = t14.getNode( "ab" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 5 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "ab" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "c" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "d" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "fgh" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb15 = new StringBuffer( "((a,b,0)ab,(((c,d)cd,e)cde,x,(f,(g,h,1,2)gh,0)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t15 = factory.create( sb15, new NHXParser() )[ 0 ];
+ ext.clear();
+ t15.getNode( "ab" ).setCollapse( true );
+ t15.getNode( "a" ).setCollapse( true );
+ t15.getNode( "fgh" ).setCollapse( true );
+ t15.getNode( "gh" ).setCollapse( true );
+ n = t15.getNode( "ab" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 6 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "ab" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "c" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "d" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "e" ) ) {
+ return false;
+ }
+ if ( !ext.get( 4 ).getName().equals( "x" ) ) {
+ return false;
+ }
+ if ( !ext.get( 5 ).getName().equals( "fgh" ) ) {
+ return false;
+ }
+ //
+ //
+ final StringBuffer sb16 = new StringBuffer( "((a,b,0)ab,(((c,d)cd,e)cde,x,(f,(g,h,1,2)gh,0)fgh)cdefgh)abcdefgh" );
+ final Phylogeny t16 = factory.create( sb16, new NHXParser() )[ 0 ];
+ ext.clear();
+ t16.getNode( "ab" ).setCollapse( true );
+ t16.getNode( "a" ).setCollapse( true );
+ t16.getNode( "fgh" ).setCollapse( true );
+ t16.getNode( "gh" ).setCollapse( true );
+ t16.getNode( "cd" ).setCollapse( true );
+ t16.getNode( "cde" ).setCollapse( true );
+ t16.getNode( "d" ).setCollapse( true );
+ t16.getNode( "x" ).setCollapse( true );
+ n = t16.getNode( "ab" );
+ while ( n != null ) {
+ ext.add( n );
+ n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes();
+ }
+ if ( ext.size() != 4 ) {
+ return false;
+ }
+ if ( !ext.get( 0 ).getName().equals( "ab" ) ) {
+ return false;
+ }
+ if ( !ext.get( 1 ).getName().equals( "cde" ) ) {
+ return false;
+ }
+ if ( !ext.get( 2 ).getName().equals( "x" ) ) {
+ return false;
+ }
+ if ( !ext.get( 3 ).getName().equals( "fgh" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testNexusCharactersParsing() {
+ try {
+ final NexusCharactersParser parser = new NexusCharactersParser();
+ parser.setSource( new File( Test.PATH_TO_TEST_DATA + "nexus_test_7.nex" ) );
+ parser.parse();
+ String[] labels = parser.getCharStateLabels();
+ if ( labels.length != 7 ) {
+ return false;
+ }
+ if ( !labels[ 0 ].equals( "14-3-3" ) ) {
+ return false;
+ }
+ if ( !labels[ 1 ].equals( "2-Hacid_dh" ) ) {
+ return false;
+ }
+ if ( !labels[ 2 ].equals( "2-Hacid_dh_C" ) ) {
+ return false;
+ }
+ if ( !labels[ 3 ].equals( "2-oxoacid_dh" ) ) {
+ return false;
+ }
+ if ( !labels[ 4 ].equals( "2OG-FeII_Oxy" ) ) {
+ return false;
+ }
+ if ( !labels[ 5 ].equals( "3-HAO" ) ) {
+ return false;
+ }
+ if ( !labels[ 6 ].equals( "3_5_exonuc" ) ) {
+ return false;
+ }
+ parser.setSource( new File( Test.PATH_TO_TEST_DATA + "nexus_test_8.nex" ) );
+ parser.parse();
+ labels = parser.getCharStateLabels();
+ if ( labels.length != 7 ) {
+ return false;
+ }
+ if ( !labels[ 0 ].equals( "14-3-3" ) ) {
+ return false;
+ }
+ if ( !labels[ 1 ].equals( "2-Hacid_dh" ) ) {
+ return false;
+ }
+ if ( !labels[ 2 ].equals( "2-Hacid_dh_C" ) ) {
+ return false;
+ }
+ if ( !labels[ 3 ].equals( "2-oxoacid_dh" ) ) {
+ return false;
+ }
+ if ( !labels[ 4 ].equals( "2OG-FeII_Oxy" ) ) {
+ return false;
+ }
+ if ( !labels[ 5 ].equals( "3-HAO" ) ) {
+ return false;
+ }
+ if ( !labels[ 6 ].equals( "3_5_exonuc" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testNexusMatrixParsing() {
+ try {
+ final NexusBinaryStatesMatrixParser parser = new NexusBinaryStatesMatrixParser();
+ parser.setSource( new File( Test.PATH_TO_TEST_DATA + "nexus_test_9.nex" ) );
+ parser.parse();
+ final CharacterStateMatrix<BinaryStates> m = parser.getMatrix();
+ if ( m.getNumberOfCharacters() != 9 ) {
+ return false;
+ }
+ if ( m.getNumberOfIdentifiers() != 5 ) {
+ return false;
+ }
+ if ( m.getState( 0, 0 ) != BinaryStates.PRESENT ) {
+ return false;
+ }
+ if ( m.getState( 0, 1 ) != BinaryStates.ABSENT ) {
+ return false;
+ }
+ if ( m.getState( 1, 0 ) != BinaryStates.PRESENT ) {
+ return false;
+ }
+ if ( m.getState( 2, 0 ) != BinaryStates.ABSENT ) {
+ return false;
+ }
+ if ( m.getState( 4, 8 ) != BinaryStates.PRESENT ) {
+ return false;
+ }
+ if ( !m.getIdentifier( 0 ).equals( "MOUSE" ) ) {
+ return false;
+ }
+ if ( !m.getIdentifier( 4 ).equals( "ARATH" ) ) {
+ return false;
+ }
+ // if ( labels.length != 7 ) {
+ // return false;
+ // }
+ // if ( !labels[ 0 ].equals( "14-3-3" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 1 ].equals( "2-Hacid_dh" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 2 ].equals( "2-Hacid_dh_C" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 3 ].equals( "2-oxoacid_dh" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 4 ].equals( "2OG-FeII_Oxy" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 5 ].equals( "3-HAO" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 6 ].equals( "3_5_exonuc" ) ) {
+ // return false;
+ // }
+ // parser.setSource( new File( Test.PATH_TO_TEST_DATA + "nexus_test_8.nex" ) );
+ // parser.parse();
+ // labels = parser.getCharStateLabels();
+ // if ( labels.length != 7 ) {
+ // return false;
+ // }
+ // if ( !labels[ 0 ].equals( "14-3-3" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 1 ].equals( "2-Hacid_dh" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 2 ].equals( "2-Hacid_dh_C" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 3 ].equals( "2-oxoacid_dh" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 4 ].equals( "2OG-FeII_Oxy" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 5 ].equals( "3-HAO" ) ) {
+ // return false;
+ // }
+ // if ( !labels[ 6 ].equals( "3_5_exonuc" ) ) {
+ // return false;
+ // }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testNexusTreeParsing() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final NexusPhylogeniesParser parser = new NexusPhylogeniesParser();
+ Phylogeny[] phylogenies = factory.create( Test.PATH_TO_TEST_DATA + "nexus_test_1.nex", parser );
+ if ( phylogenies.length != 1 ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].getNumberOfExternalNodes() != 25 ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getName().equals( "" ) ) {
+ return false;
+ }
+ phylogenies = null;
+ phylogenies = factory.create( Test.PATH_TO_TEST_DATA + "nexus_test_2.nex", parser );
+ if ( phylogenies.length != 1 ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getName().equals( "name" ) ) {
+ return false;
+ }
+ phylogenies = null;
+ phylogenies = factory.create( Test.PATH_TO_TEST_DATA + "nexus_test_3.nex", parser );
+ if ( phylogenies.length != 1 ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getName().equals( "" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].isRooted() ) {
+ return false;
+ }
+ phylogenies = null;
+ phylogenies = factory.create( Test.PATH_TO_TEST_DATA + "nexus_test_4.nex", parser );
+ if ( phylogenies.length != 18 ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getName().equals( "tree 0" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 1 ].getName().equals( "tree 1" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 1 ].getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( phylogenies[ 2 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( phylogenies[ 3 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( phylogenies[ 4 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( phylogenies[ 5 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( phylogenies[ 6 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( phylogenies[ 7 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 8 ].getName().equals( "tree 8" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 8 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 8 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 9 ].getName().equals( "tree 9" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 9 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 9 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 10 ].getName().equals( "tree 10" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 10 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 10 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 11 ].getName().equals( "tree 11" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 11 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 11 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 12 ].getName().equals( "tree 12" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 12 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 12 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 13 ].getName().equals( "tree 13" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 13 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 13 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 14 ].getName().equals( "tree 14" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 14 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 14 ].getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phylogenies[ 15 ].getName().equals( "tree 15" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 15 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 15 ].getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phylogenies[ 16 ].getName().equals( "tree 16" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 16 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 16 ].getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phylogenies[ 17 ].getName().equals( "tree 17" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 17 ].isRooted() ) {
+ return false;
+ }
+ if ( phylogenies[ 17 ].getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testNexusTreeParsingIterating() {
+ try {
+ final NexusPhylogeniesParser p = new NexusPhylogeniesParser();
+ p.setSource( Test.PATH_TO_TEST_DATA + "nexus_test_1.nex" );
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ Phylogeny phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 25 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy != null ) {
+ return false;
+ }
+ //
+ p.reset();
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 25 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy != null ) {
+ return false;
+ }
+ ////
+ p.setSource( Test.PATH_TO_TEST_DATA + "nexus_test_2.nex" );
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "name" ) ) {
+ return false;
+ }
+ if ( p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy != null ) {
+ return false;
+ }
+ //
+ p.reset();
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "name" ) ) {
+ return false;
+ }
+ if ( p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy != null ) {
+ return false;
+ }
+ ////
+ p.setSource( Test.PATH_TO_TEST_DATA + "nexus_test_3.nex" );
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( phy.isRooted() ) {
+ return false;
+ }
+ if ( p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy != null ) {
+ return false;
+ }
+ //
+ p.reset();
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy != null ) {
+ return false;
+ }
+ ////
+ p.setSource( Test.PATH_TO_TEST_DATA + "nexus_test_4_1.nex" );
+ // if ( phylogenies.length != 18 ) {
+ // return false;
+ // }
+ //0
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 0" ) ) {
+ return false;
+ }
+ //1
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 1" ) ) {
+ return false;
+ }
+ //2
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( phy.isRooted() ) {
+ return false;
+ }
+ //3
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 4 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //4
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 5 ) {
+ System.out.println( phy.getNumberOfExternalNodes() );
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //5
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( phy.isRooted() ) {
+ return false;
+ }
+ //6
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 2 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //7
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.toNewHampshire().equals( "((a,b),c);" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //8
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.toNewHampshire().equals( "((AA,BB),CC);" ) ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 8" ) ) {
+ return false;
+ }
+ //9
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.toNewHampshire().equals( "((a,b),cc);" ) ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 9" ) ) {
+ return false;
+ }
+ //10
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.toNewHampshire().equals( "((a,b),c);" ) ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 10" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //11
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.toNewHampshire().equals( "((1,2),3);" ) ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 11" ) ) {
+ return false;
+ }
+ if ( phy.isRooted() ) {
+ return false;
+ }
+ //12
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.toNewHampshire().equals( "((aa,bb),cc);" ) ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 12" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //13
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.toNewHampshire().equals( "((a,b),c);" ) ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 13" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //14
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ System.out.println( phy.getNumberOfExternalNodes() );
+ return false;
+ }
+ if ( !phy
+ .toNewHampshire()
+ .equals( "(1:0.212481,8:0.297838,(9:0.222729,((6:0.201563,7:0.194547):0.282035,(4:1.146091,(3:1.008881,(10:0.384105,(2:0.235682,5:0.353432):0.32368):0.103875):0.41354):0.254687):0.095341):0.079254):0.0;" ) ) {
+ System.out.println( phy.toNewHampshire() );
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 14" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //15
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ System.out.println( phy.getNumberOfExternalNodes() );
+ return false;
+ }
+ if ( !phy
+ .toNewHampshire()
+ .equals( "(1:0.212481,8:0.297838,(9:0.222729,((6:0.201563,7:0.194547):0.282035,(4:1.146091,(3:1.008881,(10:0.384105,(2:0.235682,5:0.353432):0.32368):0.103875):0.41354):0.254687):0.095341):0.079254):0.0;" ) ) {
+ System.out.println( phy.toNewHampshire() );
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 15" ) ) {
+ return false;
+ }
+ if ( phy.isRooted() ) {
+ return false;
+ }
+ //16
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ System.out.println( phy.getNumberOfExternalNodes() );
+ return false;
+ }
+ if ( !phy
+ .toNewHampshire()
+ .equals( "(1:0.212481,8:0.297838,(9:0.222729,((6:0.201563,7:0.194547):0.282035,(4:1.146091,(3:1.008881,(10:0.384105,(2:0.235682,5:0.353432):0.32368):0.103875):0.41354):0.254687):0.095341):0.079254):0.0;" ) ) {
+ System.out.println( phy.toNewHampshire() );
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 16" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //17
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ System.out.println( phy.getNumberOfExternalNodes() );
+ return false;
+ }
+ if ( !phy
+ .toNewHampshire()
+ .equals( "(1:0.212481,8:0.297838,(9:0.222729,((6:0.201563,7:0.194547):0.282035,(4:1.146091,(3:1.008881,(10:0.384105,(2:0.235682,5:0.353432):0.32368):0.103875):0.41354):0.254687):0.095341):0.079254):0.0;" ) ) {
+ System.out.println( phy.toNewHampshire() );
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 17" ) ) {
+ return false;
+ }
+ if ( phy.isRooted() ) {
+ return false;
+ }
+ //
+ if ( p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy != null ) {
+ return false;
+ }
+ p.reset();
+ //0
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 0" ) ) {
+ return false;
+ }
+ //1
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 10 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "tree 1" ) ) {
+ return false;
+ }
+ //2
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( phy.isRooted() ) {
+ return false;
+ }
+ //3
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 4 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //4
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 5 ) {
+ System.out.println( phy.getNumberOfExternalNodes() );
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( !phy.isRooted() ) {
+ return false;
+ }
+ //5
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ phy = p.next();
+ if ( phy == null ) {
+ return false;
+ }
+ if ( phy.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phy.getName().equals( "" ) ) {
+ return false;
+ }
+ if ( phy.isRooted() ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testNexusTreeParsingTranslating() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final NexusPhylogeniesParser parser = new NexusPhylogeniesParser();
+ Phylogeny[] phylogenies = factory.create( Test.PATH_TO_TEST_DATA + "nexus_test_5.nex", parser );
+ if ( phylogenies.length != 1 ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getName().equals( "Tree0" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getFirstExternalNode().getName().equals( "Scarabaeus" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getFirstExternalNode().getNextExternalNode().getName().equals( "Drosophila" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getFirstExternalNode().getNextExternalNode().getNextExternalNode().getName()
+ .equals( "Aranaeus" ) ) {
+ return false;
+ }
+ phylogenies = null;
+ phylogenies = factory.create( Test.PATH_TO_TEST_DATA + "nexus_test_6.nex", parser );
+ if ( phylogenies.length != 3 ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getName().equals( "Tree0" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].isRooted() ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getFirstExternalNode().getName().equals( "Scarabaeus" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getFirstExternalNode().getNextExternalNode().getName().equals( "Drosophila" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getFirstExternalNode().getNextExternalNode().getNextExternalNode().getName()
+ .equals( "Aranaeus" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 1 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 1 ].getName().equals( "Tree1" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 1 ].isRooted() ) {
+ return false;
+ }
+ if ( !phylogenies[ 1 ].getFirstExternalNode().getName().equals( "Scarabaeus" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 1 ].getFirstExternalNode().getNextExternalNode().getName().equals( "Drosophila" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 1 ].getFirstExternalNode().getNextExternalNode().getNextExternalNode().getName()
+ .equals( "Aranaeus" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 2 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].getName().equals( "Tree2" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].isRooted() ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].getFirstExternalNode().getName().equals( "Scarabaeus" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].getFirstExternalNode().getNextExternalNode().getName().equals( "Drosophila" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].getFirstExternalNode().getNextExternalNode().getNextExternalNode().getName()
+ .equals( "Aranaeus" ) ) {
+ return false;
+ }
+ phylogenies = null;
+ phylogenies = factory.create( Test.PATH_TO_TEST_DATA + "nexus_test_7.nex", parser );
+ if ( phylogenies.length != 3 ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getName().equals( "Tree0" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 0 ].isRooted() ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getFirstExternalNode().getName().equals( "Scarabaeus" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getFirstExternalNode().getNextExternalNode().getName().equals( "Drosophila" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 0 ].getFirstExternalNode().getNextExternalNode().getNextExternalNode().getName()
+ .equals( "Aranaeus" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 1 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 1 ].getName().equals( "Tree1" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 1 ].isRooted() ) {
+ return false;
+ }
+ if ( !phylogenies[ 1 ].getFirstExternalNode().getName().equals( "Scarabaeus" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 1 ].getFirstExternalNode().getNextExternalNode().getName().equals( "Drosophila" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 1 ].getFirstExternalNode().getNextExternalNode().getNextExternalNode().getName()
+ .equals( "Aranaeus" ) ) {
+ return false;
+ }
+ if ( phylogenies[ 2 ].getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].getName().equals( "Tree2" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].isRooted() ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].getFirstExternalNode().getName().equals( "Scarabaeus" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].getFirstExternalNode().getNextExternalNode().getName().equals( "Drosophila" ) ) {
+ return false;
+ }
+ if ( !phylogenies[ 2 ].getFirstExternalNode().getNextExternalNode().getNextExternalNode().getName()
+ .equals( "Aranaeus" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testNHParsing() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final Phylogeny p1 = factory.create( "(A,B1)", new NHXParser() )[ 0 ];
+ if ( !p1.toNewHampshireX().equals( "(A,B1)" ) ) {
+ return false;
+ }
+ final NHXParser nhxp = new NHXParser();
+ nhxp.setTaxonomyExtraction( NHXParser.TAXONOMY_EXTRACTION.NO );
+ nhxp.setReplaceUnderscores( true );
+ final Phylogeny uc0 = factory.create( "(A__A_,_B_B)", nhxp )[ 0 ];
+ if ( !uc0.getRoot().getChildNode( 0 ).getName().equals( "A A " ) ) {
+ return false;
+ }
+ if ( !uc0.getRoot().getChildNode( 1 ).getName().equals( " B B" ) ) {
+ return false;
+ }
+ final Phylogeny p1b = factory
+ .create( " \n \t \b \r \f ; ( \n \t \b \r \f; A ; \n \t \b \r \f, \n \t \b \r \f; B ; \n \t \b \r \f 1 \n \t \b \r \f ; \n \t \b \r \f );;;;; \n \t \b \r \f;;; \n \t \b \r \f ",
+ new NHXParser() )[ 0 ];
+ if ( !p1b.toNewHampshireX().equals( "(';A;',';B;1;')" ) ) {
+ return false;
+ }
+ if ( !p1b.toNewHampshire().equals( "(';A;',';B;1;');" ) ) {
+ return false;
+ }
+ final Phylogeny p2 = factory.create( new StringBuffer( "(A,B2)" ), new NHXParser() )[ 0 ];
+ final Phylogeny p3 = factory.create( new char[] { '(', 'A', ',', 'B', '3', ')' }, new NHXParser() )[ 0 ];
+ final Phylogeny p4 = factory.create( "(A,B4);", new NHXParser() )[ 0 ];
+ final Phylogeny p5 = factory.create( new StringBuffer( "(A,B5);" ), new NHXParser() )[ 0 ];
+ final Phylogeny[] p7 = factory.create( "(A,B7);(C,D7)", new NHXParser() );
+ final Phylogeny[] p8 = factory.create( "(A,B8) (C,D8)", new NHXParser() );
+ final Phylogeny[] p9 = factory.create( "(A,B9)\n(C,D9)", new NHXParser() );
+ final Phylogeny[] p10 = factory.create( "(A,B10);(C,D10);", new NHXParser() );
+ final Phylogeny[] p11 = factory.create( "(A,B11);(C,D11) (E,F11)\t(G,H11)", new NHXParser() );
+ final Phylogeny[] p12 = factory.create( "(A,B12) (C,D12) (E,F12) (G,H12)", new NHXParser() );
+ final Phylogeny[] p13 = factory.create( " ; (;A; , ; B ; 1 3 ; \n)\t ( \n ;"
+ + " C ; ,; D;13;);;;;;;(;E;,;F;13 ;) ; "
+ + "; ; ( \t\n\r\b; G ;, ;H ;1 3; ) ; ; ;",
+ new NHXParser() );
+ if ( !p13[ 0 ].toNewHampshireX().equals( "(';A;',';B;13;')" ) ) {
+ return false;
+ }
+ if ( !p13[ 1 ].toNewHampshireX().equals( "(';C;',';D;13;')" ) ) {
+ return false;
+ }
+ if ( !p13[ 2 ].toNewHampshireX().equals( "(';E;',';F;13;')" ) ) {
+ return false;
+ }
+ if ( !p13[ 3 ].toNewHampshireX().equals( "(';G;',';H;13;')" ) ) {
+ return false;
+ }
+ final Phylogeny[] p14 = factory.create( "(A,B14)ab", new NHXParser() );
+ final Phylogeny[] p15 = factory.create( "(A,B15)ab;", new NHXParser() );
+ final String p16_S = "((A,B),C)";
+ final Phylogeny[] p16 = factory.create( p16_S, new NHXParser() );
+ if ( p16.length != 1 ) {
+ return false;
+ }
+ if ( !p16[ 0 ].toNewHampshireX().equals( p16_S ) ) {
+ return false;
+ }
+ final String p17_S = "(C,(A,B))";
+ final Phylogeny[] p17 = factory.create( p17_S, new NHXParser() );
+ if ( p17.length != 1 ) {
+ return false;
+ }
+ if ( !p17[ 0 ].toNewHampshireX().equals( p17_S ) ) {
+ return false;
+ }
+ final String p18_S = "((A,B),(C,D))";
+ final Phylogeny[] p18 = factory.create( p18_S, new NHXParser() );
+ if ( p18.length != 1 ) {
+ return false;
+ }
+ if ( !p18[ 0 ].toNewHampshireX().equals( p18_S ) ) {
+ return false;
+ }
+ final String p19_S = "(((A,B),C),D)";
+ final Phylogeny[] p19 = factory.create( p19_S, new NHXParser() );
+ if ( p19.length != 1 ) {
+ return false;
+ }
+ if ( !p19[ 0 ].toNewHampshireX().equals( p19_S ) ) {
+ return false;
+ }
+ final String p20_S = "(A,(B,(C,D)))";
+ final Phylogeny[] p20 = factory.create( p20_S, new NHXParser() );
+ if ( p20.length != 1 ) {
+ return false;
+ }
+ if ( !p20[ 0 ].toNewHampshireX().equals( p20_S ) ) {
+ return false;
+ }
+ final String p21_S = "(A,(B,(C,(D,E))))";
+ final Phylogeny[] p21 = factory.create( p21_S, new NHXParser() );
+ if ( p21.length != 1 ) {
+ return false;
+ }
+ if ( !p21[ 0 ].toNewHampshireX().equals( p21_S ) ) {
+ return false;
+ }
+ final String p22_S = "((((A,B),C),D),E)";
+ final Phylogeny[] p22 = factory.create( p22_S, new NHXParser() );
+ if ( p22.length != 1 ) {
+ return false;
+ }
+ if ( !p22[ 0 ].toNewHampshireX().equals( p22_S ) ) {
+ return false;
+ }
+ final String p23_S = "(A,(B,(C,(D,E)de)cde)bcde)abcde";
+ final Phylogeny[] p23 = factory.create( p23_S, new NHXParser() );
+ if ( p23.length != 1 ) {
+ System.out.println( "xl=" + p23.length );
+ System.exit( -1 );
+ return false;
+ }
+ if ( !p23[ 0 ].toNewHampshireX().equals( p23_S ) ) {
+ return false;
+ }
+ final String p24_S = "((((A,B)ab,C)abc,D)abcd,E)abcde";
+ final Phylogeny[] p24 = factory.create( p24_S, new NHXParser() );
+ if ( p24.length != 1 ) {
+ return false;
+ }
+ if ( !p24[ 0 ].toNewHampshireX().equals( p24_S ) ) {
+ return false;
+ }
+ final String p241_S1 = "(A,(B,(C,(D,E)de)cde)bcde)abcde";
+ final String p241_S2 = "((((A,B)ab,C)abc,D)abcd,E)abcde";
+ final Phylogeny[] p241 = factory.create( p241_S1 + p241_S2, new NHXParser() );
+ if ( p241.length != 2 ) {
+ return false;
+ }
+ if ( !p241[ 0 ].toNewHampshireX().equals( p241_S1 ) ) {
+ return false;
+ }
+ if ( !p241[ 1 ].toNewHampshireX().equals( p241_S2 ) ) {
+ return false;
+ }
+ final String p25_S = "((((((((((((((A,B)ab,C)abc,D)abcd,E)"
+ + "abcde,(B,(C,(D,E)de)cde)bcde)abcde,(B,((A,(B,(C,(D,"
+ + "E)de)cde)bcde)abcde,(D,E)de)cde)bcde)abcde,B)ab,C)"
+ + "abc,((((A,B)ab,C)abc,D)abcd,E)abcde)abcd,E)abcde,"
+ + "((((A,((((((((A,B)ab,C)abc,((((A,B)ab,C)abc,D)abcd,"
+ + "E)abcde)abcd,E)abcde,((((A,B)ab,C)abc,D)abcd,E)abcde)"
+ + "ab,C)abc,((((A,B)ab,C)abc,D)abcd,E)abcde)abcd,E)abcde"
+ + ")ab,C)abc,D)abcd,E)abcde)ab,C)abc,((((A,B)ab,C)abc,D)" + "abcd,E)abcde)abcd,E)abcde";
+ final Phylogeny[] p25 = factory.create( p25_S, new NHXParser() );
+ if ( !p25[ 0 ].toNewHampshireX().equals( p25_S ) ) {
+ return false;
+ }
+ final String p26_S = "(A,B)ab";
+ final Phylogeny[] p26 = factory.create( p26_S, new NHXParser() );
+ if ( !p26[ 0 ].toNewHampshireX().equals( p26_S ) ) {
+ return false;
+ }
+ final String p27_S = "((((A,B)ab,C)abc,D)abcd,E)abcde";
+ final Phylogeny[] p27s = factory.create( p27_S, new NHXParser() );
+ if ( p27s.length != 1 ) {
+ System.out.println( "xxl=" + p27s.length );
+ System.exit( -1 );
+ return false;
+ }
+ if ( !p27s[ 0 ].toNewHampshireX().equals( p27_S ) ) {
+ System.out.println( p27s[ 0 ].toNewHampshireX() );
+ System.exit( -1 );
+ return false;
+ }
+ final Phylogeny[] p27 = factory.create( new File( Test.PATH_TO_TEST_DATA + "phylogeny27.nhx" ),
+ new NHXParser() );
+ if ( p27.length != 1 ) {
+ System.out.println( "yl=" + p27.length );
+ System.exit( -1 );
+ return false;
+ }
+ if ( !p27[ 0 ].toNewHampshireX().equals( p27_S ) ) {
+ System.out.println( p27[ 0 ].toNewHampshireX() );
+ System.exit( -1 );
+ return false;
+ }
+ final String p28_S1 = "((((A,B)ab,C)abc,D)abcd,E)abcde";
+ final String p28_S2 = "(A,(B,(C,(D,E)de)cde)bcde)abcde";
+ final String p28_S3 = "(A,B)ab";
+ final String p28_S4 = "((((A,B),C),D),;E;)";
+ final Phylogeny[] p28 = factory.create( new File( Test.PATH_TO_TEST_DATA + "phylogeny28.nhx" ),
+ new NHXParser() );
+ if ( !p28[ 0 ].toNewHampshireX().equals( p28_S1 ) ) {
+ return false;
+ }
+ if ( !p28[ 1 ].toNewHampshireX().equals( p28_S2 ) ) {
+ return false;
+ }
+ if ( !p28[ 2 ].toNewHampshireX().equals( p28_S3 ) ) {
+ return false;
+ }
+ if ( !p28[ 3 ].toNewHampshireX().equals( "((((A,B),C),D),';E;')" ) ) {
+ return false;
+ }
+ if ( p28.length != 4 ) {
+ return false;
+ }
+ final String p29_S = "((((A:0.01,B:0.684)ab:0.345,C:0.3451)abc:0.3451,D:1.5)abcd:0.134,E:0.32)abcde:0.1345";
+ final Phylogeny[] p29 = factory.create( p29_S, new NHXParser() );
+ if ( !p29[ 0 ].toNewHampshireX().equals( p29_S ) ) {
+ return false;
+ }
+ final String p30_S = "((((A:0.01,B:0.02):0.93,C:0.04):0.05,D:1.4):0.06,E):0.72";
+ final Phylogeny[] p30 = factory.create( p30_S, new NHXParser() );
+ if ( !p30[ 0 ].toNewHampshireX().equals( p30_S ) ) {
+ return false;
+ }
+ final String p32_S = " ; ; \n \t \b \f \r ;;;;;; ";
+ final Phylogeny[] p32 = factory.create( p32_S, new NHXParser() );
+ if ( ( p32.length != 0 ) ) {
+ return false;
+ }
+ final String p33_S = "A";
+ final Phylogeny[] p33 = factory.create( p33_S, new NHXParser() );
+ if ( !p33[ 0 ].toNewHampshireX().equals( p33_S ) ) {
+ return false;
+ }
+ final String p34_S = "B;";
+ final Phylogeny[] p34 = factory.create( p34_S, new NHXParser() );
+ if ( !p34[ 0 ].toNewHampshireX().equals( "B" ) ) {
+ return false;
+ }
+ final String p35_S = "B:0.2";
+ final Phylogeny[] p35 = factory.create( p35_S, new NHXParser() );
+ if ( !p35[ 0 ].toNewHampshireX().equals( p35_S ) ) {
+ return false;
+ }
+ final String p36_S = "(A)";
+ final Phylogeny[] p36 = factory.create( p36_S, new NHXParser() );
+ if ( !p36[ 0 ].toNewHampshireX().equals( p36_S ) ) {
+ return false;
+ }
+ final String p37_S = "((A))";
+ final Phylogeny[] p37 = factory.create( p37_S, new NHXParser() );
+ if ( !p37[ 0 ].toNewHampshireX().equals( p37_S ) ) {
+ return false;
+ }
+ final String p38_S = "(((((((A:0.2):0.2):0.3):0.4):0.5):0.6):0.7):0.8";
+ final Phylogeny[] p38 = factory.create( p38_S, new NHXParser() );
+ if ( !p38[ 0 ].toNewHampshireX().equals( p38_S ) ) {
+ return false;
+ }
+ final String p39_S = "(((B,((((A:0.2):0.2):0.3):0.4):0.5):0.6):0.7):0.8";
+ final Phylogeny[] p39 = factory.create( p39_S, new NHXParser() );
+ if ( !p39[ 0 ].toNewHampshireX().equals( p39_S ) ) {
+ return false;
+ }
+ final String p40_S = "(A,B,C)";
+ final Phylogeny[] p40 = factory.create( p40_S, new NHXParser() );
+ if ( !p40[ 0 ].toNewHampshireX().equals( p40_S ) ) {
+ return false;
+ }
+ final String p41_S = "(A,B,C,D,E,F,G,H,I,J,K)";
+ final Phylogeny[] p41 = factory.create( p41_S, new NHXParser() );
+ if ( !p41[ 0 ].toNewHampshireX().equals( p41_S ) ) {
+ return false;
+ }
+ final String p42_S = "(A,B,(X,Y,Z),D,E,F,G,H,I,J,K)";
+ final Phylogeny[] p42 = factory.create( p42_S, new NHXParser() );
+ if ( !p42[ 0 ].toNewHampshireX().equals( p42_S ) ) {
+ return false;
+ }
+ final String p43_S = "(A,B,C,(AA,BB,CC,(CCC,DDD,EEE,(FFFF,GGGG)x)y,DD,EE,FF,GG,HH),D,E,(EE,FF),F,G,H,(((((5)4)3)2)1),I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,(XX,(YY)),Y,Z)";
+ final Phylogeny[] p43 = factory.create( p43_S, new NHXParser() );
+ if ( !p43[ 0 ].toNewHampshireX().equals( p43_S ) ) {
+ return false;
+ }
+ final String p44_S = "(((A,B,C,D),(A,B,C,D),(A,B,C,D),(A,B,C,D)),((A,B,C,D),(A,B,C,D),(A,B,C,D),(A,B,C,D)),((A,B,C,D),(A,B,C,D),(A,B,C,D),(A,B,C,D)),((A,B,C,D),(A,B,C,D),(A,B,C,D),(A,B,C,D)))";
+ final Phylogeny[] p44 = factory.create( p44_S, new NHXParser() );
+ if ( !p44[ 0 ].toNewHampshireX().equals( p44_S ) ) {
+ return false;
+ }
+ final String p45_S = "((((((((((A))))))))),(((((((((B))))))))),(((((((((C))))))))))";
+ final Phylogeny[] p45 = factory.create( p45_S, new NHXParser() );
+ if ( !p45[ 0 ].toNewHampshireX().equals( p45_S ) ) {
+ return false;
+ }
+ final String p46_S = "";
+ final Phylogeny[] p46 = factory.create( p46_S, new NHXParser() );
+ if ( p46.length != 0 ) {
+ return false;
+ }
+ final Phylogeny p47 = factory.create( new StringBuffer( "((A,B)ab:2[0.44],C)" ), new NHXParser() )[ 0 ];
+ if ( !isEqual( 0.44, p47.getNode( "ab" ).getBranchData().getConfidence( 0 ).getValue() ) ) {
+ return false;
+ }
+ final Phylogeny p48 = factory.create( new StringBuffer( "((A,B)ab:2[88],C)" ), new NHXParser() )[ 0 ];
+ if ( !isEqual( 88, p48.getNode( "ab" ).getBranchData().getConfidence( 0 ).getValue() ) ) {
+ return false;
+ }
+ final Phylogeny p49 = factory
+ .create( new StringBuffer( "((A,B)a[comment:a,b;(a)]b:2[0.44][comment(a,b,b);],C)" ),
+ new NHXParser() )[ 0 ];
+ if ( !isEqual( 0.44, p49.getNode( "ab" ).getBranchData().getConfidence( 0 ).getValue() ) ) {
+ return false;
+ }
+ final Phylogeny p50 = factory.create( new StringBuffer( "((\"A\",B)ab:2[88],C)" ), new NHXParser() )[ 0 ];
+ if ( p50.getNode( "A" ) == null ) {
+ return false;
+ }
+ if ( !p50.toNewHampshire( false, NH_CONVERSION_SUPPORT_VALUE_STYLE.IN_SQUARE_BRACKETS )
+ .equals( "((A,B)ab:2.0[88],C);" ) ) {
+ return false;
+ }
+ if ( !p50.toNewHampshire( false, NH_CONVERSION_SUPPORT_VALUE_STYLE.NONE ).equals( "((A,B)ab:2.0,C);" ) ) {
+ return false;
+ }
+ if ( !p50.toNewHampshire( false, NH_CONVERSION_SUPPORT_VALUE_STYLE.AS_INTERNAL_NODE_NAMES )
+ .equals( "((A,B)88:2.0,C);" ) ) {
+ return false;
+ }
+ final Phylogeny p51 = factory.create( new StringBuffer( "((\"A(A\",B)ab:2[88],C)" ), new NHXParser() )[ 0 ];
+ if ( p51.getNode( "A(A" ) == null ) {
+ return false;
+ }
+ final Phylogeny p52 = factory.create( new StringBuffer( "(('A(A',B)ab:2[88],C)" ), new NHXParser() )[ 0 ];
+ if ( p52.getNode( "A(A" ) == null ) {
+ return false;
+ }
+ final Phylogeny p53 = factory
+ .create( new StringBuffer( "(('A(A',\"B (x (a' ,b) f(x);\"[com])[ment]ab:2[88],C)" ),
+ new NHXParser() )[ 0 ];
+ if ( p53.getNode( "B (x (a' ,b) f(x);" ) == null ) {
+ return false;
+ }
+ //
+ final Phylogeny p54 = factory.create( new StringBuffer( "((A,B):[88],C)" ), new NHXParser() )[ 0 ];
+ if ( p54.getNode( "A" ) == null ) {
+ return false;
+ }
+ if ( !p54.toNewHampshire( false, NH_CONVERSION_SUPPORT_VALUE_STYLE.IN_SQUARE_BRACKETS )
+ .equals( "((A,B)[88],C);" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testNHParsingIter() {
+ try {
+ final String p0_str = "(A,B);";
+ final NHXParser p = new NHXParser();
+ p.setSource( p0_str );
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ final Phylogeny p0 = p.next();
+ if ( !p0.toNewHampshire().equals( p0_str ) ) {
+ System.out.println( p0.toNewHampshire() );
+ return false;
+ }
+ if ( p.hasNext() ) {
+ return false;
+ }
+ if ( p.next() != null ) {
+ return false;
+ }
+ //
+ final String p00_str = "(A,B)root;";
+ p.setSource( p00_str );
+ final Phylogeny p00 = p.next();
+ if ( !p00.toNewHampshire().equals( p00_str ) ) {
+ System.out.println( p00.toNewHampshire() );
+ return false;
+ }
+ //
+ final String p000_str = "A;";
+ p.setSource( p000_str );
+ final Phylogeny p000 = p.next();
+ if ( !p000.toNewHampshire().equals( p000_str ) ) {
+ System.out.println( p000.toNewHampshire() );
+ return false;
+ }
+ //
+ final String p0000_str = "A";
+ p.setSource( p0000_str );
+ final Phylogeny p0000 = p.next();
+ if ( !p0000.toNewHampshire().equals( "A;" ) ) {
+ System.out.println( p0000.toNewHampshire() );
+ return false;
+ }
+ //
+ p.setSource( "(A)" );
+ final Phylogeny p00000 = p.next();
+ if ( !p00000.toNewHampshire().equals( "(A);" ) ) {
+ System.out.println( p00000.toNewHampshire() );
+ return false;
+ }
+ //
+ final String p1_str = "(A,B)(C,D)(E,F)(G,H)";
+ p.setSource( p1_str );
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ final Phylogeny p1_0 = p.next();
+ if ( !p1_0.toNewHampshire().equals( "(A,B);" ) ) {
+ System.out.println( p1_0.toNewHampshire() );
+ return false;
+ }
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ final Phylogeny p1_1 = p.next();
+ if ( !p1_1.toNewHampshire().equals( "(C,D);" ) ) {
+ System.out.println( "(C,D) != " + p1_1.toNewHampshire() );
+ return false;
+ }
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ final Phylogeny p1_2 = p.next();
+ if ( !p1_2.toNewHampshire().equals( "(E,F);" ) ) {
+ System.out.println( "(E,F) != " + p1_2.toNewHampshire() );
+ return false;
+ }
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ final Phylogeny p1_3 = p.next();
+ if ( !p1_3.toNewHampshire().equals( "(G,H);" ) ) {
+ System.out.println( "(G,H) != " + p1_3.toNewHampshire() );
+ return false;
+ }
+ if ( p.hasNext() ) {
+ return false;
+ }
+ if ( p.next() != null ) {
+ return false;
+ }
+ //
+ final String p2_str = "((1,2,3),B);(C,D) (E,F)root;(G,H); ;(X)";
+ p.setSource( p2_str );
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ Phylogeny p2_0 = p.next();
+ if ( !p2_0.toNewHampshire().equals( "((1,2,3),B);" ) ) {
+ System.out.println( p2_0.toNewHampshire() );
+ return false;
+ }
+ if ( !p.hasNext() ) {
+ return false;
+ }
+ Phylogeny p2_1 = p.next();
+ if ( !p2_1.toNewHampshire().equals( "(C,D);" ) ) {
+ System.out.println( "(C,D) != " + p2_1.toNewHampshire() );