library("hfmAnnotation")
library("magrittr")
library("purrr")
library("testthat")
load_fixture <-
function(fixture_path, fixture_field, is_vector = FALSE) {
fixture <-
R.matlab::readMat(fixture_path) %>%
extract2(fixture_field)
if (is_vector) {
fixture %>% as.vector()
} else {
fixture
}
}
matlab_filter_matrix_ <-
R.matlab::readMat("../fixtures/wt/qspfilt5-250.mat") %>%
extract2("q")
matlab_filter_constants_ <- matlab_filter_matrix_[, , 1]
Q1 <- matlab_filter_constants_$q1 %>% as.vector()
Q2 <- matlab_filter_constants_$q2 %>% as.vector()
Q3 <- matlab_filter_constants_$q3 %>% as.vector()
Q4 <- matlab_filter_constants_$q4 %>% as.vector()
Q5 <- matlab_filter_constants_$q5 %>% as.vector()
load_ecg_fixture_ <-
function(fixture_number) {
fixture_path <-
paste0("../fixtures/wt/", fixture_number, ".mat")
signal_matrix <-
R.matlab::readMat(fixture_path) %>%
extract2("signal") %>%
extract(4) %>%
extract2(1)
signal_matrix[1, 1, 1] %>%
extract2("ecg")
}
context("wavelet transform calculation for empty input signal")
test_that("calculation fails with empty signal", {
signal <- c()
expect_error(
wavelet_transform_250(signal),
"Elements 1 of is.numeric(ecg) are not true",
fixed = TRUE
)
})
context("wavelet transform calculation input signal including Infinity")
test_that("calculation fails with Infinity value", {
signal <- c(0, 0, Inf, 0, Inf, 0, 0, 0, 0)
Inf_location_string <- paste(which(signal == Inf), collapse = ", ")
Error_message <-
paste("Elements", Inf_location_string, "of is.finite(ecg) are not true", collapse = " ")
expect_error(
wavelet_transform_250(signal),
Error_message,
fixed = TRUE
)
})
context("wavelet transform calculation for 1030784 signal")
ecg_1030784 <- load_ecg_fixture_("1030784")
test_that("MATLAB filter bank constants same as R constants", {
wavelet <- wavelet_transform_250(ecg_1030784)
wavelet$q1 %>% expect_equal(Q1)
wavelet$q2 %>% expect_equal(Q2)
wavelet$q3 %>% expect_equal(Q3)
wavelet$q4 %>% expect_equal(Q4)
wavelet$q5 %>% expect_equal(Q5)
})
test_that("MATLAB wavelet same as R wavelet - 1030784", {
wavelet_matlab <-
load_fixture("../fixtures/wt/WT-1030784.mat", "wt")
wavelet_transform_250(ecg_1030784) %>%
extract2("wt") %>%
expect_equal(wavelet_matlab)
})
context("wavelet transform calculation for 1030791 signal")
ecg_1030791 <- load_ecg_fixture_("1030791")
test_that("MATLAB filter bank constants same as R constants", {
wavelet <- wavelet_transform_250(ecg_1030791)
wavelet$q1 %>% expect_equal(Q1)
wavelet$q2 %>% expect_equal(Q2)
wavelet$q3 %>% expect_equal(Q3)
wavelet$q4 %>% expect_equal(Q4)
wavelet$q5 %>% expect_equal(Q5)
})
test_that("MATLAB wavelet same as R wavelet - 1030791", {
wavelet_matlab <-
load_fixture("../fixtures/wt/WT-1030791.mat", "wt")
wavelet_transform_250(ecg_1030791) %>%
extract2("wt") %>%
expect_equal(wavelet_matlab)
})
context("wavelet transform calculation for 1030794 signal")
ecg_1030794 <- load_ecg_fixture_("1030794")
test_that("Matlab wavelet same as R wavelet - 1030794", {
wavelet_matlab <-
load_fixture("../fixtures/wt/WT-1030794.mat", "wt")
wavelet_transform_250(ecg_1030794) %>%
extract2("wt") %>%
expect_equal(wavelet_matlab)
})
context("wavelet transform calculation for 1030921 signal")
ecg_1030921 <- load_ecg_fixture_("1030921")
test_that("Matlab wavelet same as R wavelet - 1030921", {
wavelet_matlab <-
load_fixture("../fixtures/wt/WT-1030921.mat", "wt")
wavelet_transform_250(ecg_1030921) %>%
extract2("wt") %>%
expect_equal(wavelet_matlab)
})
context("wavelet transform calculation for 1030922 signal")
ecg_1030922 <- load_ecg_fixture_("1030922")
test_that("Matlab wavelet same as R wavelet - 1030922", {
wavelet_matlab <-
load_fixture("../fixtures/wt/WT-1030922.mat", "wt")
wavelet_transform_250(ecg_1030922) %>%
extract2("wt") %>%
expect_equal(wavelet_matlab)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.