test_that("Test suite aab",{

# Function f() tests the various next...() functions by creating a
# matrix by successively cbind()ing the next() partition; then
# comparing this matrix with the one produced by the vectorized
# function.  Note that the test matrices are produced by repeated
# calls to cbind(): not very efficient, but OTOH all three functions
# are tested [first...() , next...(), and islast...()].

f <- function(n1,n2,n3,n4,n5,n6,n7){
  a <- firstpart(n1)
  out <- cbind(a)
  while(!islastpart(a)){
    a <- nextpart(a)
    out <- cbind(out,a)
  }
  expect_true(all(out == parts(n1)))

  a <- firstdiffpart(n1)
  out <- cbind(a)
  while(!islastdiffpart(a)){
    a <- nextdiffpart(a)
    out <- cbind(out,a)
  }
  expect_true(all(out == diffparts(n1)))

  a <- firstrestrictedpart(n2,n3,FALSE)
  out <- cbind(a)
  while(!islastrestrictedpart(a)){
    a <- nextrestrictedpart(a)
    out <- cbind(out,a)
  }
  expect_true(all(out == restrictedparts(n2,n3,FALSE)))

  a <- firstrestrictedpart(n2,n3,TRUE)
  out <- cbind(a)
  while(!islastrestrictedpart(a)){
    a <- nextrestrictedpart(a)
    out <- cbind(out,a)
  }
  expect_true(all(out == restrictedparts(n2,n3,TRUE)))


  a <- firstblockpart(f=1:n4 , n=n5 , include.fewer=TRUE)
  out <- cbind(a)
  while(!islastblockpart(a, f=1:n4, n=n5, TRUE)){
    a <- nextblockpart(a, f=1:n4 , n=n5, TRUE)
    out <- cbind(out,a)
  }
  expect_true(all(out == blockparts(1:n4, n5, TRUE)))



  a <- firstblockpart(f=1:n4 , n=n5 , include.fewer=FALSE)
  out <- cbind(a)
  while(!islastblockpart(a, f=1:n4 , FALSE)){
    a <- nextblockpart(a,f=1:n4, n=n5,FALSE)
    out <- cbind(out,a)
  }
  expect_true(all(out == blockparts(1:n4, n5, FALSE)))



  a <- firstblockpart(f=1:n4 , n=NULL)
  out <- cbind(a)
  while(!islastblockpart(a, f=1:n4 , n=NULL)){
    a <- nextblockpart(a, f=1:n4 , n=NULL)
    out <- cbind(out,a)
  }
  expect_true(all(out == blockparts(f=1:n4,n=NULL)))



  a <- firstcomposition(n6 , m=NULL , include.zero=TRUE)
  out <- cbind(a)
  while(!islastcomposition(a , FALSE , include.zero=TRUE)){
    a <- nextcomposition(a , FALSE , include.zero=TRUE)
    a <- c(a,rep(0,n6-length(a)))
    out <- cbind(out,a)
  }

  expect_true(all(out == compositions(n6 , m=NULL, include.zero=TRUE)))


  a <- firstcomposition(n6 , m=NULL , include.zero=FALSE)
  out <- cbind(a)
  while(!islastcomposition(a , FALSE , include.zero=FALSE)){
    a <- nextcomposition(a , FALSE , include.zero=FALSE)
    a <- c(a,rep(0,n6-length(a)))
    out <- cbind(out,a)
  }
  expect_true(all(out == compositions(n6 , m=NULL, include.zero=FALSE)))



  a <- firstcomposition(n6 , m=n7 , include.zero=FALSE)
  out <- cbind(a)
  while(!islastcomposition(a , TRUE, include.zero=FALSE)){
    a <- nextcomposition(a , TRUE , include.zero=FALSE)
    out <- cbind(out,a)
  }
  expect_true(all(out == compositions(n6 , m=n7, include.zero=FALSE)))


  a <- firstcomposition(n6 , m=n7 , include.zero=TRUE)
  out <- cbind(a)
  while(!islastcomposition(a , TRUE , include.zero=TRUE)){
    a <- nextcomposition(a , TRUE , include.zero=TRUE)
    out <- cbind(out,a)
  }
  expect_true(all(out == compositions(n6 , m=n7, include.zero=TRUE)))

}


f(7, 11, 3, 4, 4, 5, 4)
f(8, 10, 4, 4, 3, 5, 5)

})
