Adjustments + bugs fixing
[morpheus.git] / pkg / tests / testthat / test-alignMatrices.R
index 59ad1d1..63e4bd3 100644 (file)
@@ -1,69 +1,62 @@
-context("alignMatrices")
-
 # Helper to generate a random series of matrices to align
 .generateMatrices = function(d, K, N, noise)
 {
-       matrices = list( matrix(runif(d*K, min=-1, max=1),ncol=K) ) #reference
-       for (i in 2:N)
-       {
-               matrices[[i]] <- matrices[[1]][,sample(1:K)]
-               if (noise)
-                       matrices[[i]] = matrices[[i]] + matrix(rnorm(d*K, sd=0.05), ncol=K)
-       }
-       matrices
+  matrices = list( matrix(runif(d*K, min=-1, max=1),ncol=K) ) #reference
+  for (i in 2:(N+1))
+  {
+    matrices[[i]] <- matrices[[1]][,sample(1:K)]
+    if (noise)
+      matrices[[i]] = matrices[[i]] + matrix(rnorm(d*K, sd=0.05), ncol=K)
+  }
+  matrices
 }
 
 test_that("labelSwitchingAlign correctly aligns de-noised parameters",
 {
-       N = 30 #number of matrices
-       d_K_list = list(c(2,2), c(5,3))
-       for (i in 1:2)
-       {
-               d = d_K_list[[i]][1]
-               K = d_K_list[[i]][2]
-
-               # 1] Generate matrix series
-               matrices_permut = .generateMatrices(d,K,N,noise=FALSE)
-
-               # 2] Call align function with mode=approx1
-               matrices_aligned =
-                       alignMatrices(matrices_permut[2:N], ref=matrices_permut[[1]], ls_mode="approx1")
-
-               # 3] Check alignment
-               for (j in 2:N)
-                       expect_equal(matrices_aligned[[j-1]], matrices_permut[[1]])
-
-               # 2bis] Call align function with mode=approx2
-               matrices_aligned =
-                       alignMatrices(matrices_permut[2:N], ref=matrices_permut[[1]], ls_mode="approx2")
-
-               # 3bis] Check alignment
-               for (j in 2:N)
-                       expect_equal(matrices_aligned[[j-1]], matrices_permut[[1]])
-       }
+  N <- 30 #number of matrices
+  d_K_list <- list(c(2,2), c(5,3))
+  for (i in 1:2)
+  {
+    d <- d_K_list[[i]][1]
+    K <- d_K_list[[i]][2]
+
+    # 1] Generate matrix series
+    Ms <- .generateMatrices(d, K, N, noise=FALSE)
+
+    # 2] Call align function with mode=approx1
+    aligned <- alignMatrices(Ms[2:(N+1)], ref=Ms[[1]], ls_mode="approx1")
+
+    # 3] Check alignment
+    for (j in 1:N)
+      expect_equal(aligned[[j]], Ms[[1]])
+
+    # 2bis] Call align function with mode=approx2
+    aligned <- alignMatrices(Ms[2:(N+1)], ref=Ms[[1]], ls_mode="approx2")
+
+    # 3bis] Check alignment
+    for (j in 1:N)
+      expect_equal(aligned[[j]], Ms[[1]])
+  }
 })
 
 test_that("labelSwitchingAlign correctly aligns noisy parameters",
 {
-       N = 30 #number of matrices
-       d_K_list = list(c(2,2), c(5,3))
-       for (i in 1:2)
-       {
-               d = d_K_list[[i]][1]
-               K = d_K_list[[i]][2]
-               max_error = d * 0.2 #TODO: what value to choose ?
-
-               # 1] Generate matrix series
-               matrices_permut = .generateMatrices(d,K,N,noise=TRUE)
-
-               # 2] Call align function
-               matrices_aligned = alignMatrices(matrices_permut, ref="mean", ls_mode="exact")
-
-               # 3] Check alignment
-               for (j in 2:N)
-               {
-                       expect_that( norm(matrices_aligned[[j]] - matrices_permut[[1]]),
-                               is_less_than(max_error) )
-               }
-       }
+  N <- 30 #number of matrices
+  d_K_list <- list(c(2,2), c(5,3))
+  for (i in 1:2)
+  {
+    d <- d_K_list[[i]][1]
+    K <- d_K_list[[i]][2]
+    max_error <- d * 0.2 #TODO: what value to choose ?
+
+    # 1] Generate matrix series
+    Ms <- .generateMatrices(d, K, N, noise=TRUE)
+
+    # 2] Call align function
+    aligned <- alignMatrices(Ms[2:(N+1)], ref=Ms[[1]], ls_mode="exact")
+
+    # 3] Check alignment
+    for (j in 2:N)
+      expect_lt( norm(aligned[[j]] - Ms[[1]]), max_error )
+  }
 })