+ 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 ) ) {
+ return false;
+ }
+ t2.setIdentifier( new Identifier( "nemve" ) );
+ if ( t1.isEqual( t2 ) ) {
+ return false;
+ }
+ t1.setIdentifier( null );
+ t3.setTaxonomyCode( "ECOLI" );
+ t3.setScientificName( "what" );
+ t3.setCommonName( "something" );
+ if ( !t1.isEqual( t3 ) ) {
+ return false;
+ }
+ t1.setIdentifier( null );
+ t1.setTaxonomyCode( "" );
+ t4.setScientificName( "E. ColI" );
+ t4.setCommonName( "something" );
+ if ( !t1.isEqual( t4 ) ) {
+ return false;
+ }
+ t4.setScientificName( "B. subtilis" );
+ t4.setCommonName( "something" );
+ if ( t1.isEqual( t4 ) ) {
+ return false;
+ }
+ t1.setIdentifier( null );
+ t1.setTaxonomyCode( "" );
+ t1.setScientificName( "" );
+ t5.setCommonName( "COLI" );
+ if ( !t1.isEqual( t5 ) ) {
+ return false;
+ }
+ t5.setCommonName( "vibrio" );
+ if ( t1.isEqual( t5 ) ) {
+ return false;
+ }
+ // Identifier
+ // ----------
+ final Identifier id0 = new Identifier( "123", "pfam" );
+ final Identifier id1 = ( Identifier ) id0.copy();
+ if ( !id1.isEqual( id1 ) ) {
+ return false;
+ }
+ if ( !id1.isEqual( id0 ) ) {
+ return false;
+ }
+ if ( !id0.isEqual( id1 ) ) {
+ return false;
+ }
+ id1.asSimpleText();
+ id1.asText();
+ // ProteinDomain
+ // ---------------
+ final ProteinDomain pd0 = new ProteinDomain( "abc", 100, 200 );
+ final ProteinDomain pd1 = ( ProteinDomain ) pd0.copy();
+ if ( !pd1.isEqual( pd1 ) ) {
+ return false;
+ }
+ if ( !pd1.isEqual( pd0 ) ) {
+ return false;
+ }
+ pd1.asSimpleText();
+ pd1.asText();
+ final ProteinDomain pd2 = new ProteinDomain( pd0.getName(), pd0.getFrom(), pd0.getTo(), "id" );
+ final ProteinDomain pd3 = ( ProteinDomain ) pd2.copy();
+ if ( !pd3.isEqual( pd3 ) ) {
+ return false;
+ }
+ if ( !pd2.isEqual( pd3 ) ) {
+ return false;
+ }
+ if ( !pd0.isEqual( pd3 ) ) {
+ return false;
+ }
+ pd3.asSimpleText();
+ pd3.asText();
+ // DomainArchitecture
+ // ------------------
+ final ProteinDomain d0 = new ProteinDomain( "domain0", 10, 20 );
+ final ProteinDomain d1 = new ProteinDomain( "domain1", 30, 40 );
+ final ProteinDomain d2 = new ProteinDomain( "domain2", 50, 60 );
+ final ProteinDomain d3 = new ProteinDomain( "domain3", 70, 80 );
+ final ProteinDomain d4 = new ProteinDomain( "domain4", 90, 100 );
+ final ArrayList<PhylogenyData> domains0 = new ArrayList<PhylogenyData>();
+ domains0.add( d2 );
+ domains0.add( d0 );
+ domains0.add( d3 );
+ domains0.add( d1 );
+ final DomainArchitecture ds0 = new DomainArchitecture( domains0, 110 );
+ if ( ds0.getNumberOfDomains() != 4 ) {
+ return false;
+ }
+ final DomainArchitecture ds1 = ( DomainArchitecture ) ds0.copy();
+ if ( !ds0.isEqual( ds0 ) ) {
+ return false;
+ }
+ if ( !ds0.isEqual( ds1 ) ) {
+ return false;
+ }
+ if ( ds1.getNumberOfDomains() != 4 ) {
+ return false;
+ }
+ final ArrayList<PhylogenyData> domains1 = new ArrayList<PhylogenyData>();
+ domains1.add( d1 );
+ domains1.add( d2 );
+ domains1.add( d4 );
+ domains1.add( d0 );
+ final DomainArchitecture ds2 = new DomainArchitecture( domains1, 200 );
+ if ( ds0.isEqual( ds2 ) ) {
+ return false;
+ }
+ ds1.asSimpleText();
+ ds1.asText();
+ ds1.toNHX();
+ final DomainArchitecture ds3 = new DomainArchitecture( "120>30>40>0.9>b>50>60>0.4>c>10>20>0.1>a" );
+ if ( !ds3.toNHX().toString().equals( ":DS=120>10>20>0.1>a>30>40>0.9>b>50>60>0.4>c" ) ) {
+ System.out.println( ds3.toNHX() );
+ return false;
+ }
+ if ( ds3.getNumberOfDomains() != 3 ) {
+ return false;
+ }
+ // Event
+ // -----
+ final Event e1 = new Event( Event.EventType.fusion );
+ if ( e1.isDuplication() ) {
+ return false;
+ }
+ if ( !e1.isFusion() ) {
+ return false;
+ }
+ if ( !e1.asText().toString().equals( "fusion" ) ) {
+ return false;
+ }
+ if ( !e1.asSimpleText().toString().equals( "fusion" ) ) {
+ return false;
+ }
+ final Event e11 = new Event( Event.EventType.fusion );
+ if ( !e11.isEqual( e1 ) ) {
+ return false;
+ }
+ if ( !e11.toNHX().toString().equals( "" ) ) {
+ return false;
+ }
+ final Event e2 = new Event( Event.EventType.speciation_or_duplication );
+ if ( e2.isDuplication() ) {
+ return false;
+ }
+ if ( !e2.isSpeciationOrDuplication() ) {
+ return false;
+ }
+ if ( !e2.asText().toString().equals( "speciation_or_duplication" ) ) {
+ return false;
+ }
+ if ( !e2.asSimpleText().toString().equals( "?" ) ) {
+ return false;
+ }
+ if ( !e2.toNHX().toString().equals( ":D=?" ) ) {
+ return false;
+ }
+ if ( e11.isEqual( e2 ) ) {
+ return false;
+ }
+ final Event e2c = ( Event ) e2.copy();
+ if ( !e2c.isEqual( e2 ) ) {
+ return false;
+ }
+ Event e3 = new Event( 1, 2, 3 );
+ if ( e3.isDuplication() ) {
+ return false;
+ }
+ if ( e3.isSpeciation() ) {
+ return false;
+ }
+ if ( e3.isGeneLoss() ) {
+ return false;
+ }
+ if ( !e3.asText().toString().equals( "duplications [1] speciations [2] gene-losses [3]" ) ) {
+ return false;
+ }
+ final Event e3c = ( Event ) e3.copy();
+ final Event e3cc = ( Event ) e3c.copy();
+ if ( !e3c.asSimpleText().toString().equals( "D2S3L" ) ) {
+ return false;
+ }
+ e3 = null;
+ if ( !e3c.isEqual( e3cc ) ) {
+ return false;
+ }
+ Event e4 = new Event( 1, 2, 3 );
+ if ( !e4.asText().toString().equals( "duplications [1] speciations [2] gene-losses [3]" ) ) {
+ return false;
+ }
+ if ( !e4.asSimpleText().toString().equals( "D2S3L" ) ) {
+ return false;
+ }
+ final Event e4c = ( Event ) e4.copy();
+ e4 = null;
+ final Event e4cc = ( Event ) e4c.copy();
+ if ( !e4cc.asText().toString().equals( "duplications [1] speciations [2] gene-losses [3]" ) ) {
+ return false;
+ }
+ if ( !e4c.isEqual( e4cc ) ) {
+ return false;
+ }
+ final Event e5 = new Event();
+ if ( !e5.isUnassigned() ) {
+ return false;
+ }
+ if ( !e5.asText().toString().equals( "unassigned" ) ) {
+ return false;
+ }
+ if ( !e5.asSimpleText().toString().equals( "" ) ) {
+ return false;
+ }
+ final Event e6 = new Event( 1, 0, 0 );
+ if ( !e6.asText().toString().equals( "duplication" ) ) {
+ return false;
+ }
+ if ( !e6.asSimpleText().toString().equals( "D" ) ) {
+ return false;
+ }
+ final Event e7 = new Event( 0, 1, 0 );
+ if ( !e7.asText().toString().equals( "speciation" ) ) {
+ return false;
+ }
+ if ( !e7.asSimpleText().toString().equals( "S" ) ) {
+ return false;
+ }
+ final Event e8 = new Event( 0, 0, 1 );
+ if ( !e8.asText().toString().equals( "gene-loss" ) ) {
+ return false;
+ }
+ if ( !e8.asSimpleText().toString().equals( "L" ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testDeletionOfExternalNodes() {
+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final Phylogeny t0 = factory.create( "A", new NHXParser() )[ 0 ];
+ final PhylogenyWriter w = new PhylogenyWriter();
+ if ( t0.isEmpty() ) {
+ return false;
+ }
+ if ( t0.getNumberOfExternalNodes() != 1 ) {
+ return false;
+ }
+ t0.deleteSubtree( t0.getNode( "A" ), false );
+ if ( t0.getNumberOfExternalNodes() != 0 ) {
+ return false;
+ }
+ if ( !t0.isEmpty() ) {
+ return false;
+ }
+ final Phylogeny t1 = factory.create( "(A,B)r", new NHXParser() )[ 0 ];
+ if ( t1.getNumberOfExternalNodes() != 2 ) {
+ return false;
+ }
+ t1.deleteSubtree( t1.getNode( "A" ), false );
+ if ( t1.getNumberOfExternalNodes() != 1 ) {
+ return false;
+ }
+ if ( !t1.getNode( "B" ).getName().equals( "B" ) ) {
+ return false;
+ }
+ t1.deleteSubtree( t1.getNode( "B" ), false );
+ if ( t1.getNumberOfExternalNodes() != 1 ) {
+ return false;
+ }
+ t1.deleteSubtree( t1.getNode( "r" ), false );
+ if ( !t1.isEmpty() ) {
+ return false;
+ }
+ final Phylogeny t2 = factory.create( "((A,B),C)", new NHXParser() )[ 0 ];
+ if ( t2.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ t2.deleteSubtree( t2.getNode( "B" ), false );
+ if ( t2.getNumberOfExternalNodes() != 2 ) {
+ return false;
+ }
+ t2.toNewHampshireX();
+ PhylogenyNode n = t2.getNode( "A" );
+ if ( !n.getNextExternalNode().getName().equals( "C" ) ) {
+ return false;
+ }
+ t2.deleteSubtree( t2.getNode( "A" ), false );
+ if ( t2.getNumberOfExternalNodes() != 2 ) {
+ return false;
+ }
+ t2.deleteSubtree( t2.getNode( "C" ), true );
+ if ( t2.getNumberOfExternalNodes() != 1 ) {
+ return false;
+ }
+ final Phylogeny t3 = factory.create( "((A,B),(C,D))", new NHXParser() )[ 0 ];
+ if ( t3.getNumberOfExternalNodes() != 4 ) {
+ return false;
+ }
+ t3.deleteSubtree( t3.getNode( "B" ), true );
+ if ( t3.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ n = t3.getNode( "A" );
+ if ( !n.getNextExternalNode().getName().equals( "C" ) ) {
+ return false;
+ }
+ n = n.getNextExternalNode();
+ if ( !n.getNextExternalNode().getName().equals( "D" ) ) {
+ return false;
+ }
+ t3.deleteSubtree( t3.getNode( "A" ), true );
+ if ( t3.getNumberOfExternalNodes() != 2 ) {
+ return false;
+ }
+ n = t3.getNode( "C" );
+ if ( !n.getNextExternalNode().getName().equals( "D" ) ) {
+ return false;
+ }
+ t3.deleteSubtree( t3.getNode( "C" ), true );
+ if ( t3.getNumberOfExternalNodes() != 1 ) {
+ return false;
+ }
+ t3.deleteSubtree( t3.getNode( "D" ), true );
+ if ( t3.getNumberOfExternalNodes() != 0 ) {
+ return false;
+ }
+ final Phylogeny t4 = factory.create( "((A,((B11,B12),B2)),(C,D))", new NHXParser() )[ 0 ];
+ if ( t4.getNumberOfExternalNodes() != 6 ) {
+ return false;
+ }
+ t4.deleteSubtree( t4.getNode( "B2" ), true );
+ if ( t4.getNumberOfExternalNodes() != 5 ) {
+ return false;
+ }
+ String s = w.toNewHampshire( t4, true ).toString();
+ if ( !s.equals( "((A,(B11,B12)),(C,D));" ) ) {
+ return false;
+ }
+ t4.deleteSubtree( t4.getNode( "B11" ), true );
+ if ( t4.getNumberOfExternalNodes() != 4 ) {
+ return false;
+ }
+ t4.deleteSubtree( t4.getNode( "C" ), true );
+ if ( t4.getNumberOfExternalNodes() != 3 ) {
+ return false;
+ }
+ n = t4.getNode( "A" );
+ n = n.getNextExternalNode();
+ if ( !n.getName().equals( "B12" ) ) {
+ return false;
+ }
+ n = n.getNextExternalNode();
+ if ( !n.getName().equals( "D" ) ) {
+ return false;
+ }
+ s = w.toNewHampshire( t4, true ).toString();
+ if ( !s.equals( "((A,B12),D);" ) ) {
+ return false;
+ }
+ final Phylogeny t5 = factory.create( "((A,((B11,B12),B2)),(C,D))", new NHXParser() )[ 0 ];
+ t5.deleteSubtree( t5.getNode( "A" ), true );
+ if ( t5.getNumberOfExternalNodes() != 5 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t5, true ).toString();
+ if ( !s.equals( "(((B11,B12),B2),(C,D));" ) ) {
+ return false;
+ }
+ final Phylogeny t6 = factory.create( "((A,((B11,B12),B2)),(C,D))", new NHXParser() )[ 0 ];
+ t6.deleteSubtree( t6.getNode( "B11" ), true );
+ if ( t6.getNumberOfExternalNodes() != 5 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t6, false ).toString();
+ if ( !s.equals( "((A,(B12,B2)),(C,D));" ) ) {
+ return false;
+ }
+ final Phylogeny t7 = factory.create( "((A,((B11,B12),B2)),(C,D))", new NHXParser() )[ 0 ];
+ t7.deleteSubtree( t7.getNode( "B12" ), true );
+ if ( t7.getNumberOfExternalNodes() != 5 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t7, true ).toString();
+ if ( !s.equals( "((A,(B11,B2)),(C,D));" ) ) {
+ return false;
+ }
+ final Phylogeny t8 = factory.create( "((A,((B11,B12),B2)),(C,D))", new NHXParser() )[ 0 ];
+ t8.deleteSubtree( t8.getNode( "B2" ), true );
+ if ( t8.getNumberOfExternalNodes() != 5 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t8, false ).toString();
+ if ( !s.equals( "((A,(B11,B12)),(C,D));" ) ) {
+ return false;
+ }
+ final Phylogeny t9 = factory.create( "((A,((B11,B12),B2)),(C,D))", new NHXParser() )[ 0 ];
+ t9.deleteSubtree( t9.getNode( "C" ), true );
+ if ( t9.getNumberOfExternalNodes() != 5 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t9, true ).toString();
+ if ( !s.equals( "((A,((B11,B12),B2)),D);" ) ) {
+ return false;
+ }
+ final Phylogeny t10 = factory.create( "((A,((B11,B12),B2)),(C,D))", new NHXParser() )[ 0 ];
+ t10.deleteSubtree( t10.getNode( "D" ), true );
+ if ( t10.getNumberOfExternalNodes() != 5 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t10, true ).toString();
+ if ( !s.equals( "((A,((B11,B12),B2)),C);" ) ) {
+ return false;
+ }
+ final Phylogeny t11 = factory.create( "(A,B,C)", new NHXParser() )[ 0 ];
+ t11.deleteSubtree( t11.getNode( "A" ), true );
+ if ( t11.getNumberOfExternalNodes() != 2 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t11, true ).toString();
+ if ( !s.equals( "(B,C);" ) ) {
+ return false;
+ }
+ t11.deleteSubtree( t11.getNode( "C" ), true );
+ if ( t11.getNumberOfExternalNodes() != 1 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t11, false ).toString();
+ if ( !s.equals( "B;" ) ) {
+ return false;
+ }
+ final Phylogeny t12 = factory.create( "((A1,A2,A3),(B1,B2,B3),(C1,C2,C3))", new NHXParser() )[ 0 ];
+ t12.deleteSubtree( t12.getNode( "B2" ), true );
+ if ( t12.getNumberOfExternalNodes() != 8 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t12, true ).toString();
+ if ( !s.equals( "((A1,A2,A3),(B1,B3),(C1,C2,C3));" ) ) {
+ return false;
+ }
+ t12.deleteSubtree( t12.getNode( "B3" ), true );
+ if ( t12.getNumberOfExternalNodes() != 7 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t12, true ).toString();
+ if ( !s.equals( "((A1,A2,A3),B1,(C1,C2,C3));" ) ) {
+ return false;
+ }
+ t12.deleteSubtree( t12.getNode( "C3" ), true );
+ if ( t12.getNumberOfExternalNodes() != 6 ) {
+ return false;
+ }
+ s = w.toNewHampshire( t12, true ).toString();
+ if ( !s.equals( "((A1,A2,A3),B1,(C1,C2));" ) ) {
+ return false;
+ }
+ t12.deleteSubtree( t12.getNode( "A1" ), true );
+ if ( t12.getNumberOfExternalNodes() != 5 ) {