tests/testthat/test.plotFitnessLandscape.R
4d70b942
 test_that("Exercise plotting and dealing with different matrix input", {
50a94207
     r1 <- rfitness(4)
     expect_silent(plot(r1))
df131087
     expect_silent(plot(r1, log = TRUE))
     expect_silent(plot(r1, log = TRUE, use_ggrepel = TRUE))
     expect_silent(plot(r1, log = TRUE, show_labels = FALSE))
     
50a94207
     
     ## Specify fitness in a matrix, and plot it
4d70b942
     m5 <- cbind(A = c(0, 1, 0, 1), B = c(0, 0, 1, 1), F = c(1, 2, 3, 5.5))
50a94207
     expect_silent(plotFitnessLandscape(m5))
4d70b942
 
     m6 <- cbind(c(0, 1, 0, 1), c(0, 0, 1, 1), c(1, 2, 3, 5.5))
     expect_message(plotFitnessLandscape(m6),
                    "Setting/resetting gene names because", fixed = TRUE)
 
     m7 <- cbind(c(0, 1, 0, 1), c(0, 0, 1, 1), F = c(1, 2, 3, 5.5))
     expect_message(plotFitnessLandscape(m7),
                    "Setting/resetting gene names because", fixed = TRUE)
 
     m8 <- cbind(A = c(0, 1, 0, 1), c(0, 0, 1, 1), F = c(1, 2, 3, 5.5))
     expect_message(plotFitnessLandscape(m8),
                    "Setting/resetting gene names because", fixed = TRUE)
 
50a94207
     
     ## Specify fitness with allFitnessEffects, and plot it
     fe <- allFitnessEffects(epistasis = c("a : b" = 0.3,
                                           "b : c" = 0.5),
                             noIntGenes = c("e" = 0.1))
     
     expect_silent(plot(evalAllGenotypes(fe, order = FALSE)))
df131087
 
50a94207
     ## same as
     expect_silent(plotFitnessLandscape(evalAllGenotypes(fe, order = FALSE)))
df131087
     ## more ggrepel
     expect_silent(plot(evalAllGenotypes(fe, order = FALSE), use_ggrepel = TRUE))
 })
 
 
 test_that("to_FitnessMatrix stops as it should", {
     x1 <- data.frame(a = 1:2, b = 1:2)
     expect_error(OncoSimulR:::to_Fitness_Matrix(x1, 2000),
                  "We cannot guess what you are passing",
                  fixed = TRUE)
     x2 <- list(a = 12, b = 13)
     expect_error(OncoSimulR:::to_Fitness_Matrix(x2, 2000),
                  "We cannot guess what you are passing",
                  fixed = TRUE)
4d70b942
     ## This is done above
     ## g <- cbind(c(0, 1, 0, 1), c(0, 0, 1, 1))
     ## s1 <- c(1, 1.4, 1.2, 1.5)
     ## expect_error(OncoSimulR:::to_Fitness_Matrix(cbind(g, s1), 2000),
     ##              "Matrix x must have column names",
     ##              fixed = TRUE)
     ## expect_message(plotFitnessLandscape(cbind(g, s1)),
     ##              "Matrix x must have column names",
     ##              fixed = TRUE)
     ## expect_message(plotFitnessLandscape(cbind(g, A = c(1, 2))),
     ##              "Matrix x must have column names",
     ##              fixed = TRUE)
50a94207
 })
 
 
 
df131087
 test_that("to_FitnessMatrix can deal with df", {
     m4 <- data.frame(G = c("A, B", "A", "WT", "B"),
                      Fitness = c(3, 2, 1, 4))
     expect_message(OncoSimulR:::to_Fitness_Matrix(m4, 2000),
                    "Column names of object", fixed = TRUE)
     m5 <- data.frame(G = c("A, B", "B"),
                      Fitness = c(3, 2))
     expect_message(OncoSimulR:::to_Fitness_Matrix(m5, 2000),
                    "Column names of object", fixed = TRUE)
     x1 <- data.frame(a = c("A, B"), Fitness = 2)
     expect_message(OncoSimulR:::to_Fitness_Matrix(x1, 2000),
                    "Column names of object", fixed = TRUE)
     x2 <- data.frame(a = c("A, B", "B"), Fitness = c(2, 3))
     expect_message(OncoSimulR:::to_Fitness_Matrix(x2, 2000),
                    "Column names of object", fixed = TRUE)
     x3 <- data.frame(a = c("A, B", "C"), Fitness = c(2, 3))
     expect_message(OncoSimulR:::to_Fitness_Matrix(x3, 2000),
                    "Column names of object", fixed = TRUE)
     ## Now, the user code
     expect_message(plotFitnessLandscape(x1))
     expect_message(plotFitnessLandscape(x2))
     expect_message(plotFitnessLandscape(x3))
     expect_message(plotFitnessLandscape(m5))
     expect_message(plotFitnessLandscape(m4))
 })
 
 
50a94207
 test_that("internal peak valley functions", {
     
     x <- matrix(NA, 14, 14)
     x[1, 3] <- -2
     x[1, 2] <- -4
     x[2, 3] <- 5
     x[3, 4] <- 0
     x[4, 5] <- 0
     x[5, 6] <- 4
     x[3, 7] <- -3
     x[7, 8] <- 0
     x[3, 10] <- -4
     x[10, 11] <- -4
     x[11, 12] <- 0
     x[12, 13] <- 3
     x[8, 9] <- 5
     x[12, 14] <- -5
     
     (pv <-  OncoSimulR:::peak_valley(x))
     expect_equal(c(1, 6, 9, 13), pv$peak)
     expect_equal(c(2, 7, 8, 14), pv$valley)
 
     x <- matrix(NA, 15, 15)
     x[1, 3] <- -2
     x[1, 2] <- -4
     x[2, 3] <- 5
     x[3, 4] <- 0
     x[4, 5] <- 0
     x[5, 6] <- 4
     x[3, 7] <- -3
     x[7, 8] <- 0
     x[3, 10] <- -4
     x[10, 11] <- -4
     x[11, 12] <- 0
     x[12, 13] <- 3
     x[8, 9] <- 5
     x[12, 14] <- -5
     x[14, 15] <- 2
     
     (pv <-  OncoSimulR:::peak_valley(x))
     expect_equal(c(1, 6, 9, 13, 15), pv$peak)
     expect_equal(c(2, 7, 8, 14), pv$valley)
 
 
     x <- matrix(NA, 15, 15)
     x[1, 3] <- -2
     x[1, 2] <- -4
     x[2, 3] <- 5
     x[3, 4] <- 3
     x[4, 5] <- 0
     x[5, 6] <- 4
     x[3, 7] <- -3
     x[7, 8] <- 0
     x[3, 10] <- -4
     x[10, 11] <- -4
     x[11, 12] <- 0
     x[12, 13] <- 3
     x[8, 9] <- 5
     x[12, 14] <- -5
     x[14, 15] <- 2
 
     (pv <-  OncoSimulR:::peak_valley(x))
     expect_equal(c(1, 6, 9, 13, 15), pv$peak)
     expect_equal(c(2, 7, 8, 14), pv$valley)
 
 
 
     x <- matrix(NA, 15, 15)
     x[1, 3] <- -2
     x[1, 2] <- -4
     x[2, 3] <- 5
     x[3, 4] <- 3
     x[4, 5] <- -1
     x[5, 6] <- 4
     x[3, 7] <- -3
     x[7, 8] <- 0
     x[3, 10] <- -4
     x[10, 11] <- -4
     x[11, 12] <- 0
     x[12, 13] <- 3
     x[8, 9] <- 5
     x[12, 14] <- -5
     x[14, 15] <- 2
 
     (pv <-  OncoSimulR:::peak_valley(x))
     expect_equal(c(1, 4, 6, 9, 13, 15), pv$peak)
     expect_equal(c(2, 5, 7, 8, 14), pv$valley)
 
 
     x <- matrix(NA, 15, 15)
     x[1, 3] <- -2
     x[1, 2] <- -4
     x[2, 3] <- 5
     x[3, 4] <- 3
     x[4, 5] <- -1
     x[5, 6] <- 4
     x[3, 7] <- -3
     x[7, 8] <- 0
     x[3, 10] <- -4
     x[10, 11] <- -4
     x[11, 12] <- 0
     x[12, 13] <- 3
     x[8, 9] <- 5
     x[12, 14] <- -5
     x[14, 15] <- 2
     x[2, 7] <- 1
 
     (pv <-  OncoSimulR:::peak_valley(x))
     expect_equal(c(1, 4, 6, 9, 13, 15), pv$peak)
     expect_equal(c(2, 5, 14), pv$valley)
 
 
 
     x <- matrix(NA, 15, 15)
     x[1, 3] <- -2
     x[1, 2] <- -4
     x[2, 3] <- 5
     x[3, 4] <- 0
     x[4, 5] <- -1
     x[5, 6] <- 4
     x[3, 7] <- -3
     x[7, 8] <- 0
     x[3, 10] <- -4
     x[10, 11] <- -4
     x[11, 12] <- 0
     x[12, 13] <- 3
     x[8, 9] <- 5
     x[12, 14] <- -5
     x[14, 15] <- 2
     x[2, 7] <- 1 ## hummm.. 3 and 4 should be a peak?Nope, from 1
 
     (pv <-  OncoSimulR:::peak_valley(x))
     expect_equal(c(1, 6, 9, 13, 15), pv$peak)
     expect_equal(c(2, 5, 14), pv$valley)
 
 
     x <- matrix(NA, 15, 15)
     x[1, 3] <- 1
     x[1, 2] <- -4
     x[2, 3] <- 5
     x[3, 4] <- 0
     x[4, 5] <- -1
     x[5, 6] <- 4
     x[3, 7] <- -3
     x[7, 8] <- 0
     x[3, 10] <- -4
     x[10, 11] <- -4
     x[11, 12] <- 0
     x[12, 13] <- 3
     x[8, 9] <- 5
     x[12, 14] <- -5
     x[14, 15] <- 2
     x[2, 7] <- 1
 
     (pv <-  OncoSimulR:::peak_valley(x))
     expect_equal(c(3, 4, 6, 9, 13, 15), pv$peak)
     expect_equal(c(2, 5, 14), pv$valley)
 
 
 
     x <- matrix(NA, 5, 5)
     x[1, 3] <- -2
     x[2, 3] <- 4
     x[3, 4] <- 0
     x[4, 5] <- 6
 
     (pv <-  OncoSimulR:::peak_valley(x))
     expect_equal(c(1, 5), pv$peak)
     expect_equal(c(2), pv$valley)
 
 
     x <- matrix(NA, 5, 5)
     x[1, 3] <- -2
     x[2, 3] <- -5
     x[3, 4] <- 0
     x[4, 5] <- 6
 
     (pv <-  OncoSimulR:::peak_valley(x))
     expect_equal(c(1, 2, 5), pv$peak)
     expect_equal(c(3, 4), pv$valley)
 
     
 })
f9a38e24
 
 
 ## Beware that using peak_valley on only_accessible makes a difference
 test_that("internal peak valley functions w/wo inaccessible filter", {
     ## A is accessible, a peak
     ## AB is a peak if only forward. But there is no
     ## reciprocal sign epistasis here!
 
     ## We want peaks in general, not just
     ## under assumption of "no back mutation"?
 
     ## Well, no, that is not obvious with cancer progression models if we
     ## do not allow back mutations.
     
     ## We get a different result when we restrict to accessible
     ## because all < 0 in adjacency are turned to NAs.
 
     ## Thinking in terms of adjacency matrix, AB is not a peak if it has a
     ## positive and a negative entry in its column, because the negative
     ## entry means there is an ancestor with larger fitness.
     ## But see below for why plainly using the adjacency matrix can give bad results.
     
     ## The next matrices are all fitness matrix. Last column is fitness.
     mf1 <- rbind(
         c(0, 0, 1),
         c(1, 0, 4),
         c(0, 1, 2),
         c(1, 1, 3)
     )
 
     plotFitnessLandscape(mf1)
     
     expect_equal(
         OncoSimulR:::peak_valley(
                                 OncoSimulR:::genot_to_adj_mat(mf1))$peak, 2)
     
     expect_equal(
             OncoSimulR:::peak_valley(
                              OncoSimulR:::filter_inaccessible(
                                               OncoSimulR:::genot_to_adj_mat(mf1), 0))$peak,
         c(2, 4))
 
     expect_equal(
         OncoSimulR:::fast_peaks(mf1, 0),
         c(2, 4))
 
 
     ## reorder the rows of the matrix. Affects fast_peaks, as it should
     mf1 <- rbind(
         c(1, 0, 4),
         c(0, 0, 1),
         c(1, 1, 3),
         c(0, 1, 2)
     )
     
     plotFitnessLandscape(mf1)
     ## this is not affected, since it uses, by construction, the ordered matrix
     expect_equal(
         OncoSimulR:::peak_valley(
                                 OncoSimulR:::genot_to_adj_mat(mf1))$peak, 2)
     ## ditto
     expect_equal(
             OncoSimulR:::peak_valley(
                              OncoSimulR:::filter_inaccessible(
                                               OncoSimulR:::genot_to_adj_mat(mf1), 0))$peak,
         c(2, 4))
     expect_equal(
         OncoSimulR:::fast_peaks(mf1, 0),
         c(1, 3))
 
 
     
     ## filtering by inaccessible also likely gets rid of all
     ## peaks in the non-accessible part of the fitness landscape.
     ## But of course those cannot be peaks, since they are inaccessible
 
     mf3 <- rbind(
         c(0, 0, 0, 1),
         c(1, 0, 0, 2),
         c(0, 1, 0, 0.1),
         c(0, 0, 1, 0.3),
         c(1, 1, 0, 3),
         c(1, 0, 1, 4),
         c(0, 1, 1, 0.4),
         c(1, 1, 1, 0.2)
     )
 
     ## plotFitnessLandscape(mf3)
     ## BC is detected as a peak, the seventh entry
     expect_equal(OncoSimulR:::peak_valley(OncoSimulR:::genot_to_adj_mat(mf3))$peak,
                  c(5, 6, 7))
 
     ## recall this gives the columns of the reduced matrix, which are the former
     ## 5 and 6
     expect_equal(OncoSimulR:::peak_valley(
                                   OncoSimulR:::filter_inaccessible(
                                                    OncoSimulR:::genot_to_adj_mat(mf3), 0))$peak,
                  c(3, 4))
 
     ## correct indices from original matrix
     expect_equal(
         OncoSimulR:::fast_peaks(mf3, 0),
         c(5, 6))
 
     ## works under reorder?
     expect_equal(
         OncoSimulR:::fast_peaks(mf3[c(5, 1, 2, 3, 7, 4, 6), ], 0),
         c(1, 7))
 
     
   
 
     mf4 <- rbind(
         c(0, 0, 0, 1),
         c(1, 0, 0, 2),
         c(0, 1, 0, 0.1),
         c(0, 0, 1, 0.3),
         c(1, 1, 0, 3),
         c(1, 0, 1, 4),
         c(0, 1, 1, 0.4),
         c(1, 1, 1, 1.2)
     )
 
     ## plotFitnessLandscape(mf4)
     
     ## ABC is not detected as a peak, because it is not.
     ## Issue is not its accessibility, but that AC and AB have larger fitness
     ## see example with mf5
     expect_equal(OncoSimulR:::peak_valley(OncoSimulR:::genot_to_adj_mat(mf4))$peak,
                  c(5, 6))
 
     ## recall this gives the columns of the reduced matrix, which are the former
     ## 5 and 6
     expect_equal(OncoSimulR:::peak_valley(
                                   OncoSimulR:::filter_inaccessible(
                                                    OncoSimulR:::genot_to_adj_mat(mf4), 0))$peak,
                  c(3, 4))
 
     expect_equal(
         OncoSimulR:::fast_peaks(mf4, 0),
         c(5, 6))
 
     
     ## Now ABC is accessible
       mf5 <- rbind(
         c(0, 0, 0, 1),
         c(1, 0, 0, 2),
         c(0, 1, 0, 0.1),
         c(0, 0, 1, 0.3),
         c(1, 1, 0, 3),
         c(1, 0, 1, 4),
         c(0, 1, 1, 0.4),
         c(1, 1, 1, 3.5)
     )
  
       ## plotFitnessLandscape(mf5)
       ## plotFitnessLandscape(mf5, only_accessible = TRUE)
       
       ## But only AC is the peak, correctly
       expect_equal(OncoSimulR:::peak_valley(OncoSimulR:::genot_to_adj_mat(mf5))$peak,
                    c(6))
 
       ## Now, both AC and ABC are peaks
       ## columns 4 and 5 correspond to genotypes 6 and 8
       expect_equal(OncoSimulR:::peak_valley(
                                     OncoSimulR:::filter_inaccessible(
                                                      OncoSimulR:::genot_to_adj_mat(mf5), 0))$peak,
                    c(4, 5))
 
       expect_equal(
           OncoSimulR:::fast_peaks(mf5, 0),
           c(6, 8))
 
     ## AC and ABC same max fitness
       mf6 <- rbind(
         c(0, 0, 0, 1),
         c(1, 0, 0, 2),
         c(0, 1, 0, 0.1),
         c(0, 0, 1, 0.3),
         c(1, 1, 0, 3),
         c(1, 0, 1, 4),
         c(0, 1, 1, 0.4),
         c(1, 1, 1, 4)
     )
  
       ## plotFitnessLandscape(mf6)
       ## Both AC and ABC are peaks. Correctly
       expect_equal(OncoSimulR:::peak_valley(OncoSimulR:::genot_to_adj_mat(mf6))$peak,
                    c(6, 8))
 
       ## fast peaks should refuse to run
       expect_error(
           OncoSimulR:::fast_peaks(mf6, 0),
           "There could be several connected maxima",
           fixed = TRUE)
 
 
 
       ## A and AC
       mf7 <- rbind(
         c(0, 0, 0, 1),
         c(1, 0, 0, 4),
         c(0, 1, 0, 0.1),
         c(0, 0, 1, 0.3),
         c(1, 1, 0, 3),
         c(1, 0, 1, 4),
         c(0, 1, 1, 0.4),
         c(1, 1, 1, 3.4)
     )
       ## plotFitnessLandscape(mf7)
       ## Both A and AC are peaks. Correctly
       expect_equal(OncoSimulR:::peak_valley(OncoSimulR:::genot_to_adj_mat(mf7))$peak,
                    c(2, 6))
 
       ## fast peaks should refuse to run
       expect_error(
           OncoSimulR:::fast_peaks(mf7, 0),
           "There could be several connected maxima",
           fixed = TRUE)
       
 
       
       ## A, AC, ABC same max fitness
       mf8 <- rbind(
         c(0, 0, 0, 1),
         c(1, 0, 0, 4),
         c(0, 1, 0, 0.1),
         c(0, 0, 1, 0.3),
         c(1, 1, 0, 3),
         c(1, 0, 1, 4),
         c(0, 1, 1, 0.4),
         c(1, 1, 1, 4)
     )
       ## plotFitnessLandscape(mf8)
       ## Both A and AC are peaks. Correctly
       expect_equal(OncoSimulR:::peak_valley(OncoSimulR:::genot_to_adj_mat(mf8))$peak,
                    c(2, 6, 8))
 
       
       ## fast peaks should refuse to run
       expect_error(
           OncoSimulR:::fast_peaks(mf8, 0),
           "There could be several connected maxima",
           fixed = TRUE)
       
       ## A, AC, AB same max fitness
       mf9 <- rbind(
         c(0, 0, 0, 1),
         c(1, 0, 0, 4),
         c(0, 1, 0, 0.1),
         c(0, 0, 1, 0.3),
         c(1, 1, 0, 4),
         c(1, 0, 1, 4),
         c(0, 1, 1, 0.4),
         c(1, 1, 1, 2.4)
     )
       ## plotFitnessLandscape(mf9, use_ggrepel = TRUE)
       ## Both A and AC are peaks. Correctly
       expect_equal(OncoSimulR:::peak_valley(OncoSimulR:::genot_to_adj_mat(mf9))$peak,
                    c(2, 5, 6))
 
       
       
       ## This illustrates that the "filter_inaccessible" is not just "do
       ## not take into account inaccessible genotypes" but, properly, do
       ## not take into account, do not allow any travelling through
       ## inaccessible paths.
 
       ## Thus, filter_inaccessible is the way to go if we want to exclude
       ## backmutation. In no bakcmutation, it is not possible to go from
       ## m+1 to m mutations.
       
       ## It also shows that naively looking at the adjacency matrix can
       ## fail. Two reasons:
 
       ## a) the last row will never have any entries and yet it need not
       ## be a peak.
 
       ## b) simply looking at adjacency matrix is not the correct
       ## procedure when some fitnesses can be equal. That is what the
       ## function peak_valley works hard to get right :-)
       
       
     cp2 <- structure(c(0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 
 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 
 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 
 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 
 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 
 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 
 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 
 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 
 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 
 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 
 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 
 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 
 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 
 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 
 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 
 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 
 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 
 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 
 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 
 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 
 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 
 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 
 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 
 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 
 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 
 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 
 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 
 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 
 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 
 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 
 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 
 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0.852873407703003, 
 1.51520969989942, 1.09934414414554, 1.08362391548151, 1.06352377058758, 
 0.875558455823467, 1.69351291065104, 2.92492684398312, 1.02057836095586, 
 0.994559647972076, 1.01807462848707, 0.782398502758159, 0.755318352952028, 
 1.81553780643735, 1.7427209966816, 1.00116069406198, 0.790243245268257, 
 3.38168029927183, 1.18573953796889, 1.24679706264807, 0.944183929293486, 
 1.04153712305771, 1.20232261789798, 1.0345783487807, 1.04678440594199, 
 0.993244793867836, 0.97914067773803, 0.79321495112376, 0.868101325153957, 
 0.866235177920767, 4.1155779007473, 3.163209721772, 4.34977195536485, 
 1.09932137400121, 1.08612305022998, 0.916953742980573, 0.850115441923501, 
 1.06277833622263, 0.865087563773651, 0.928169473201598, 0.904902930158639, 
 0.897493717866434, 0.71149600120298, 1.06538015204221, 1.07859259299858, 
 0.858803230350538, 2.25551012930227, 1.09241633274047, 0.870425423271033, 
 2.17687545546796, 0.84459090869647, 4.58149975106353, 3.85245245151455, 
 1.28342034151899, 1.08529050597462, 1.02256835452167, 1.04982916832593, 
 1.0457848642841, 0.90107628754529, 1.08969768294891, 1.05766476796899, 
 0.902394628842996, 0.888348932462492, 1.01037474862489, 0.954093541062801, 
 0.807820459139572, 2.74832174163312, 1.01318977068049, 0.854004033396404, 
 0.842034005421367, 0.800544915243185, 5.31108977064723, 5.31423066433053, 
 1.16539625099584, 0.983449927610599, 0.996320237843515, 0.9794158873742, 
 1.02038748073625, 0.808875731463122, 0.964868528161141, 0.966566509486774, 
 0.860373057266184, 0.81168825662344, 1.19978481918247, 0.98157798351476, 
 0.999463234369357, 0.98711106267367, 0.961995700808845, 4.79391503400402, 
 0.998909701750288, 0.996465768481649, 0.785688019266101, 0.778917380394268, 
 1.17230915723272, 1.19911647477422, 0.961939861987872, 0.981542927739855, 
 0.999822362533057, 1.15236749698624, 0.919688401637553, 0.876733220798505, 
 0.92069327916386, 0.958801043337062, 0.670589798279379, 0.84152795885645, 
 5.93895353544503, 0.723329951949942, 0.733188455582477, 1.07557023464861, 
 1.09180382079188, 0.923957719945906, 0.93313538716072, 0.896562810368268, 
 1.09769821865825, 1.10615389985864, 0.94426955155254, 0.898545873061366, 
 0.876269943340891, 1.11556411094416, 0.94930544641744, 1.02495854041569, 
 0.794907983845338, 0.847332095413669, 0.776896984008625, 0.928896557877041, 
 0.945135371172636, 0.892100531723894), .Dim = c(128L, 8L), .Dimnames = list(
     NULL, c("CDKN2A", "KRAS", "MLL3", "PXDN", "SMAD4", "TGFBR2", 
     "TP53", "")))
 
     expect_equal(length(
         OncoSimulR:::peak_valley(OncoSimulR:::genot_to_adj_mat(cp2))$peak), 4)
 
     expect_equal(length(
         OncoSimulR:::peak_valley(
                          OncoSimulR:::filter_inaccessible(
                                           OncoSimulR:::genot_to_adj_mat(cp2), 0))$peak), 6)
 
 
     expect_equal(
           OncoSimulR:::fast_peaks(cp2, 0),
         c(51, 55, 68, 74, 90, 107))
 
     ## Nope, since filter inaccessible removes genotypes
     expect_false(all(
         OncoSimulR:::peak_valley(
                          OncoSimulR:::filter_inaccessible(
                                           OncoSimulR:::genot_to_adj_mat(cp2), 0))$peak ==
         OncoSimulR:::fast_peaks(cp2, 0)))
     
 
     ## compare with the probl
     gnn <- OncoSimulR:::to_Fitness_Matrix(cp2, 1000)$afe[, "Genotype"]
 
     plotFitnessLandscape(cp2, use_ggrepel = TRUE, only_accessible = TRUE)
     
     expect_equal(
         gnn[OncoSimulR:::fast_peaks(cp2, 0)],
         c("KRAS, PXDN, TP53",
           "MLL3, PXDN, SMAD4",
           "CDKN2A, KRAS, MLL3, TP53",
           "CDKN2A, KRAS, TGFBR2, TP53",
           "KRAS, MLL3, TGFBR2, TP53",
           "CDKN2A, KRAS, PXDN, SMAD4, TP53"))
 
     ## can also check by removing the inacessible genotypes so the indices are the same
     agg <- OncoSimulR:::wrap_accessibleGenotypes(cp2, 0)
     cp3 <- cp2[agg, ]
 
     ## This is NOT correct: we have removed the inacessible,
     ## but we allow backmutation
     ## OncoSimulR:::peak_valley(
     ##                  OncoSimulR:::genot_to_adj_mat(cp3))$peak
     
     expect_equal(OncoSimulR:::peak_valley(
                      OncoSimulR:::filter_inaccessible(
                                       OncoSimulR:::genot_to_adj_mat(cp3), 0))$peak,
                  OncoSimulR:::fast_peaks(cp3, 0))
 
     gnn3 <- gnn[agg]
 
     expect_equal(
         gnn3[OncoSimulR:::fast_peaks(cp3, 0)],
         c("KRAS, PXDN, TP53",
           "MLL3, PXDN, SMAD4",
           "CDKN2A, KRAS, MLL3, TP53",
           "CDKN2A, KRAS, TGFBR2, TP53",
           "KRAS, MLL3, TGFBR2, TP53",
           "CDKN2A, KRAS, PXDN, SMAD4, TP53"))
 
     
 })
 
 
 
 test_that("Some random checks of the fast peaks function", {
     niter <- 50
     for(i in 1:niter) {
         for(ng in 2:6) {
             rtmp <- rfitness(ng)
             p1 <- OncoSimulR:::peak_valley(
                                    OncoSimulR:::filter_inaccessible(
                                                     OncoSimulR:::genot_to_adj_mat(rtmp), 0))$peak
             expect_equal(length(p1),
                          length(OncoSimulR:::fast_peaks(rtmp, 0)))
             agg <- OncoSimulR:::wrap_accessibleGenotypes(rtmp, 0)
             if(length(agg) >= 2) {
                 ## cat(".")
                 p2 <- OncoSimulR:::peak_valley(
                                        OncoSimulR:::filter_inaccessible(
                                                         OncoSimulR:::genot_to_adj_mat(rtmp[agg, , drop = FALSE]), 0))$peak
                 expect_equal(p2, OncoSimulR:::fast_peaks(rtmp[agg, , drop = FALSE], 0))
                 expect_equal(length(p2), length(p1))
             }
         }
     }
 })