+ p1.reRoot( p1.getNode( "F" ) );
+ if ( isUnequal( p1.getNode( "A" ).getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "B" ).getDistanceToParent(), 4 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "C" ).getDistanceToParent(), 2 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "D" ).getDistanceToParent(), 3 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "E" ).getDistanceToParent(), 2 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "F" ).getDistanceToParent(), 2.5 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "A" ).getParent().getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "A" ).getParent().getParent().getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "A" ).getParent().getParent().getParent().getDistanceToParent(), 2.5 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "B" ).getParent().getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "D" ).getParent().getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( isUnequal( p1.getNode( "E" ).getParent().getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ m = new BasicSymmetricalDistanceMatrix( 7 );
+ m.setIdentifier( 0, "Bovine" );
+ m.setIdentifier( 1, "Mouse" );
+ m.setIdentifier( 2, "Gibbon" );
+ m.setIdentifier( 3, "Orang" );
+ m.setIdentifier( 4, "Gorilla" );
+ m.setIdentifier( 5, "Chimp" );
+ m.setIdentifier( 6, "Human" );
+ m.setRow( "0.00000 1.68660 1.71980 1.66060 1.52430 1.60430 1.59050", 0 );
+ m.setRow( "1.68660 0.00000 1.52320 1.48410 1.44650 1.43890 1.46290", 1 );
+ m.setRow( "1.71980 1.52320 0.00000 0.71150 0.59580 0.61790 0.55830", 2 );
+ m.setRow( "1.66060 1.48410 0.71150 0.00000 0.46310 0.50610 0.47100", 3 );
+ m.setRow( "1.52430 1.44650 0.59580 0.46310 0.00000 0.34840 0.30830", 4 );
+ m.setRow( "1.60430 1.43890 0.61790 0.50610 0.34840 0.00000 0.26920", 5 );
+ m.setRow( "1.59050 1.46290 0.55830 0.47100 0.30830 0.26920 0.00000", 6 );
+ //NeighborJoiningR njr = NeighborJoiningR.createInstance( true, 6 );
+ nj = NeighborJoining.createInstance( verbose, 6 );
+ final Phylogeny p2 = nj.execute( m );
+ //Archaeopteryx.createApplication( p2 );
+ p2.reRoot( p2.getNode( "Bovine" ) );
+ if ( isUnequal( p2.getNode( "Chimp" ).getDistanceToParent(), 0.151675 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Human" ).getDistanceToParent(), 0.117525 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Gorilla" ).getDistanceToParent(), 0.153932 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Orang" ).getDistanceToParent(), 0.284694 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Gibbon" ).getDistanceToParent(), 0.357931 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Mouse" ).getDistanceToParent(), 0.76891 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Bovine" ).getDistanceToParent(), 0.458845 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Chimp" ).getParent().getDistanceToParent(), 0.039819 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Human" ).getParent().getDistanceToParent(), 0.039819 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Chimp" ).getParent().getParent().getDistanceToParent(), 0.026956 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Chimp" ).getParent().getParent().getParent().getDistanceToParent(), 0.046481 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Chimp" ).getParent().getParent().getParent().getParent().getDistanceToParent(),
+ 0.420269 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2.getNode( "Chimp" ).getParent().getParent().getParent().getParent().getParent()
+ .getDistanceToParent(), 0.458845 ) ) {
+ return false;
+ }
+ m = new BasicSymmetricalDistanceMatrix( 4 );
+ m.setIdentifier( 0, "A" );
+ m.setIdentifier( 1, "B" );
+ m.setIdentifier( 2, "C" );
+ m.setIdentifier( 3, "D" );
+ m.setRow( "0.00 0.95 0.17 0.98", 0 );
+ m.setRow( "0.95 0.00 1.02 1.83", 1 );
+ m.setRow( "0.17 1.02 0.00 1.01", 2 );
+ m.setRow( "0.98 1.83 1.01 0.00", 3 );
+ final Phylogeny p3 = nj.execute( m );
+ p3.reRoot( p3.getNode( "C" ) );
+ if ( isUnequal( p3.getNode( "A" ).getDistanceToParent(), 0.05 ) ) {
+ return false;
+ }
+ if ( isUnequal( p3.getNode( "B" ).getDistanceToParent(), 0.90 ) ) {
+ return false;
+ }
+ if ( !isEqual( p3.getNode( "C" ).getDistanceToParent(), 0.05 ) ) {
+ return false;
+ }
+ if ( !isEqual( p3.getNode( "D" ).getDistanceToParent(), 0.91 ) ) {
+ return false;
+ }
+ if ( isUnequal( p3.getNode( "A" ).getParent().getDistanceToParent(), 0.02 ) ) {
+ return false;
+ }
+ if ( isUnequal( p3.getNode( "A" ).getParent().getParent().getDistanceToParent(), 0.05 ) ) {
+ return false;
+ }
+ //
+ NeighborJoiningF njf = NeighborJoiningF.createInstance();
+ final BasicSymmetricalDistanceMatrix m0f = new BasicSymmetricalDistanceMatrix( 4 );
+ m0f.setIdentifier( 0, "A" );
+ m0f.setIdentifier( 1, "B" );
+ m0f.setIdentifier( 2, "C" );
+ m0f.setIdentifier( 3, "D" );
+ m0f.setRow( "5 ", 1 );
+ m0f.setRow( "3 6 ", 2 );
+ m0f.setRow( "7.5 10.5 5.5", 3 );
+ final Phylogeny p0f = njf.execute( m0f );
+ p0f.reRoot( p0f.getNode( "D" ) );
+ if ( isUnequal( p0f.getNode( "A" ).getDistanceToParent(), 1 ) ) {
+ return false;
+ }
+ if ( isUnequal( p0f.getNode( "B" ).getDistanceToParent(), 4 ) ) {
+ return false;
+ }
+ if ( isUnequal( p0f.getNode( "C" ).getDistanceToParent(), 0.5 ) ) {
+ return false;
+ }
+ if ( isUnequal( p0f.getNode( "D" ).getDistanceToParent(), 2.5 ) ) {
+ return false;
+ }
+ if ( isUnequal( p0f.getNode( "A" ).getParent().getDistanceToParent(), 1.5 ) ) {
+ return false;
+ }
+ if ( isUnequal( p0f.getNode( "A" ).getParent().getParent().getDistanceToParent(), 2.5 ) ) {
+ return false;
+ }
+ //
+ m = new BasicSymmetricalDistanceMatrix( 7 );
+ m.setIdentifier( 0, "Bovine" );
+ m.setIdentifier( 1, "Mouse" );
+ m.setIdentifier( 2, "Gibbon" );
+ m.setIdentifier( 3, "Orang" );
+ m.setIdentifier( 4, "Gorilla" );
+ m.setIdentifier( 5, "Chimp" );
+ m.setIdentifier( 6, "Human" );
+ m.setRow( "0.00000 1.68660 1.71980 1.66060 1.52430 1.60430 1.59050", 0 );
+ m.setRow( "1.68660 0.00000 1.52320 1.48410 1.44650 1.43890 1.46290", 1 );
+ m.setRow( "1.71980 1.52320 0.00000 0.71150 0.59580 0.61790 0.55830", 2 );
+ m.setRow( "1.66060 1.48410 0.71150 0.00000 0.46310 0.50610 0.47100", 3 );
+ m.setRow( "1.52430 1.44650 0.59580 0.46310 0.00000 0.34840 0.30830", 4 );
+ m.setRow( "1.60430 1.43890 0.61790 0.50610 0.34840 0.00000 0.26920", 5 );
+ m.setRow( "1.59050 1.46290 0.55830 0.47100 0.30830 0.26920 0.00000", 6 );
+ njf = NeighborJoiningF.createInstance( verbose, 5 );
+ final Phylogeny p2f = njf.execute( m );
+ p2f.reRoot( p2f.getNode( "Bovine" ) );
+ if ( isUnequal( p2f.getNode( "Chimp" ).getDistanceToParent(), 0.15168 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Human" ).getDistanceToParent(), 0.11752 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Gorilla" ).getDistanceToParent(), 0.15393 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Orang" ).getDistanceToParent(), 0.28469 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Gibbon" ).getDistanceToParent(), 0.35793 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Mouse" ).getDistanceToParent(), 0.76891 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Bovine" ).getDistanceToParent(), 0.458845 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Chimp" ).getParent().getDistanceToParent(), 0.03982 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Human" ).getParent().getDistanceToParent(), 0.03982 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Chimp" ).getParent().getParent().getDistanceToParent(), 0.02696 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Chimp" ).getParent().getParent().getParent().getDistanceToParent(), 0.04648 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Chimp" ).getParent().getParent().getParent().getParent()
+ .getDistanceToParent(), 0.42027 ) ) {
+ return false;
+ }
+ if ( isUnequal( p2f.getNode( "Chimp" ).getParent().getParent().getParent().getParent().getParent()
+ .getDistanceToParent(), 0.458845 ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testS() {
+ try {
+ final Sset s0 = new Sset();
+ s0.initialize( 1 );
+ s0.addPairing( 0, 1, 0 );
+ s0.addPairing( 7, 8, 0 );
+ s0.addPairing( 4, 55, 0 );
+ s0.addPairing( 2, 3, 0 );
+ s0.addPairing( 4, 5, 0 );
+ s0.addPairing( 5, 6666, 0 );
+ s0.addPairing( 5, 666, 0 );
+ s0.addPairing( 5, 66, 0 );
+ s0.addPairing( 5, 6, 0 );
+ s0.addPairing( 6, 7, 0 );
+ s0.addPairing( 3, 4, 0 );
+ s0.addPairing( 1, 2, 0 );
+ if ( s0.size() != 1 ) {
+ return false;
+ }
+ if ( s0.getS( 0 ).size() != 8 ) {
+ return false;
+ }
+ if ( s0.getValues( 0, 0 ).size() != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 1, 0 ).size() != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 2, 0 ).size() != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 3, 0 ).size() != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 4, 0 ).size() != 2 ) {
+ return false;
+ }
+ if ( s0.getValues( 5, 0 ).size() != 4 ) {
+ return false;
+ }
+ if ( s0.getValues( 6, 0 ).size() != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 7, 0 ).size() != 1 ) {
+ return false;
+ }
+ if ( !s0.getValues( 0, 0 ).contains( 1 ) ) {
+ return false;
+ }
+ if ( !s0.getValues( 5, 0 ).contains( 6 ) ) {
+ return false;
+ }
+ if ( !s0.getValues( 5, 0 ).contains( 66 ) ) {
+ return false;
+ }
+ if ( !s0.getValues( 5, 0 ).contains( 666 ) ) {
+ return false;
+ }
+ if ( !s0.getValues( 5, 0 ).contains( 6666 ) ) {
+ return false;
+ }
+ s0.removePairing( 5, 6666, 0 );
+ if ( s0.getValues( 5, 0 ).contains( 6666 ) ) {
+ return false;
+ }
+ s0.removePairing( 5, 666, 0 );
+ if ( s0.getValues( 5, 0 ).contains( 666 ) ) {
+ return false;
+ }
+ s0.removePairing( 5, 66, 0 );
+ if ( s0.getValues( 5, 0 ).contains( 66 ) ) {
+ return false;
+ }
+ if ( s0.getValues( 5, 0 ).size() != 1 ) {
+ return false;
+ }
+ if ( s0.getS( 0 ).size() != 8 ) {
+ return false;
+ }
+ s0.removePairing( 5, 6, 0 );
+ if ( s0.getS( 0 ).size() != 7 ) {
+ return false;
+ }
+ s0.addPairing( 5, 6, 0 );
+ if ( s0.getS( 0 ).size() != 8 ) {
+ return false;
+ }
+ if ( s0.getValues( 5, 0 ).size() != 1 ) {
+ return false;
+ }
+ if ( !s0.getValues( 5, 0 ).contains( 6 ) ) {
+ return false;
+ }
+ s0.addPairing( 5, 403, 0 );
+ if ( s0.getValues( 5, 0 ).size() != 2 ) {
+ return false;
+ }
+ if ( !s0.getValues( 5, 0 ).contains( 403 ) ) {
+ return false;
+ }
+ s0.addPairing( 693, 100, 0 );
+ s0.addPairing( 693, 101, 0 );
+ if ( s0.getValues( 693, 0 ).size() != 2 ) {
+ return false;
+ }
+ s0.addPairing( 2, 33, 0 );
+ s0.addPairing( 2, 333, 0 );
+ final Set<Integer>[] a = s0.toArray( 0 );
+ if ( !a[ 0 ].contains( 1 ) ) {
+ return false;
+ }
+ if ( a[ 0 ].size() != 1 ) {
+ return false;
+ }
+ if ( !a[ 1 ].contains( 2 ) ) {
+ return false;
+ }
+ if ( a[ 1 ].size() != 1 ) {
+ return false;
+ }
+ if ( !a[ 2 ].contains( 3 ) ) {
+ return false;
+ }
+ if ( !a[ 2 ].contains( 33 ) ) {
+ return false;
+ }
+ if ( !a[ 2 ].contains( 333 ) ) {
+ return false;
+ }
+ }
+ catch ( final Exception e ) {
+ e.printStackTrace( System.out );
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean testSarray() {
+ try {
+ final Sarray s0 = new Sarray();
+ s0.initialize( 1 );
+ s0.addPairing( 0, 1, 0 );
+ s0.addPairing( 7, 8, 0 );
+ s0.addPairing( 4, 55, 0 );
+ s0.addPairing( 2, 3, 0 );
+ s0.addPairing( 4, 5, 0 );
+ s0.addPairing( 5, 6666, 0 );
+ s0.addPairing( 5, 666, 0 );
+ s0.addPairing( 5, 66, 0 );
+ s0.addPairing( 5, 6, 0 );
+ s0.addPairing( 6, 7, 0 );
+ s0.addPairing( 3, 4, 0 );
+ s0.addPairing( 1, 2, 0 );
+ if ( s0.size() != 1 ) {
+ return false;
+ }
+ if ( s0.getS( 0 ).size() != 8 ) {
+ return false;
+ }
+ if ( s0.getValues( 0, 0 ).length != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 1, 0 ).length != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 2, 0 ).length != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 3, 0 ).length != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 4, 0 ).length != 2 ) {
+ return false;
+ }
+ if ( s0.getValues( 5, 0 ).length != 4 ) {
+ return false;
+ }
+ if ( s0.getValues( 6, 0 ).length != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 7, 0 ).length != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 0, 0 )[ 0 ] != 1 ) {
+ return false;
+ }
+ if ( s0.getValues( 5, 0 )[ 3 ] != 6 ) {
+ return false;
+ }
+ if ( s0.getValues( 5, 0 )[ 2 ] != 66 ) {
+ return false;
+ }
+ if ( s0.getValues( 5, 0 )[ 1 ] != 666 ) {
+ return false;
+ }
+ if ( s0.getValues( 5, 0 )[ 0 ] != 6666 ) {
+ return false;
+ }
+ s0.removePairing( 5, 6666, 0 );
+ if ( s0.getValues( 5, 0 ).length != 3 ) {
+ System.out.println( s0.getValues( 5, 0 ).length );
+ return false;
+ }
+ // if ( s0.getValues( 5, 0 ).contains( 6666 ) ) {
+ // return false;
+ // }
+ // s0.removePairing( 5, 666, 0 );
+ // if ( s0.getValues( 5, 0 ).contains( 666 ) ) {
+ // return false;
+ // }
+ // s0.removePairing( 5, 66, 0 );
+ // if ( s0.getValues( 5, 0 ).contains( 66 ) ) {
+ // return false;
+ // }
+ // if ( s0.getValues( 5, 0 ).size() != 1 ) {
+ // return false;
+ // }
+ // if ( s0.getS( 0 ).size() != 8 ) {
+ // return false;
+ // }
+ // s0.removePairing( 5, 6, 0 );
+ // if ( s0.getS( 0 ).size() != 7 ) {
+ // return false;
+ // }
+ // s0.addPairing( 5, 6, 0 );
+ // if ( s0.getS( 0 ).size() != 8 ) {
+ // return false;
+ // }
+ // if ( s0.getValues( 5, 0 ).size() != 1 ) {
+ // return false;
+ // }
+ // if ( !s0.getValues( 5, 0 ).contains( 6 ) ) {
+ // return false;
+ // }
+ // s0.addPairing( 5, 403, 0 );
+ // if ( s0.getValues( 5, 0 ).size() != 2 ) {
+ // return false;
+ // }
+ // if ( !s0.getValues( 5, 0 ).contains( 403 ) ) {
+ // return false;
+ // }
+ // s0.addPairing( 693, 100, 0 );
+ // s0.addPairing( 693, 101, 0 );
+ // if ( s0.getValues( 693, 0 ).size() != 2 ) {