tests/testthat/test-wavelet-transform.R

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)
})
Teresa00/hfmAnnotation documentation built on May 14, 2019, 12:51 a.m.