tests/testthat/test-06_check_replicates.R

test_that("bad arguments for n_replicates are handled correctly", {
    # Fails when given a value that isn't a numeric vector
    expect_error(
        check_replicates(
            example_corecmotifs,
            n_replicates = "hello"
        ),
        "n_replicates is not a count"
    )

    # Fails when given a numeric vector with length > 1
    expect_error(
        check_replicates(
            example_corecmotifs,
            n_replicates = c(1, 2)
        ),
        "n_replicates is not a count"
    )

    # Fails when given a non-integer
    expect_error(
        check_replicates(
            example_corecmotifs,
            n_replicates = 1.2
        ),
        "n_replicates is not a count"
    )
})

test_that("bad arguments for eucl_distance are handled correctly", {
    # Fails when given a value that isn't a numeric vector
    expect_error(
        check_replicates(
            example_corecmotifs,
            eucl_distance = "hello"
        ),
        "eucl_distance is not a number"
    )

    # All fail when given a numeric vector with length > 1
    expect_error(
        check_replicates(
            example_corecmotifs,
            eucl_distance = c(1, 2)
        ),
        "eucl_distance is not a number"
    )
})

test_that("filtering by n_replicates works", {
    # Regroup some of the example CoRecMotifs for testing purposes
    test_corecmotifs <-
        example_corecmotifs[1:12] %>%
        lapply(set_pbm_condition, "test")

    # Filter out groups with fewer than 2 motifs
    n_replicates_filter_1 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 2,
            eucl_distance = NULL
        )

    expect_setequal(n_replicates_filter_1, test_corecmotifs)

    # Filter out groups with fewer than 5 motifs
    n_replicates_filter_1 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 5,
            eucl_distance = NULL
        )

    expect_setequal(n_replicates_filter_1, list())

    # Filter out groups with fewer than 2 motifs after subsetting
    n_replicates_filter_2 <-
        check_replicates(
            test_corecmotifs[c(1:2, 4, 8, 11)],
            n_replicates = 2,
            eucl_distance = NULL
        )

    expect_setequal(n_replicates_filter_2, test_corecmotifs[c(1:2, 4)])

    # Filter out groups with fewer than 3 motifs after subsetting
    n_replicates_filter_2 <-
        check_replicates(
            test_corecmotifs[c(1:4, 6:8, 11)],
            n_replicates = 3,
            eucl_distance = NULL
        )

    expect_setequal(n_replicates_filter_2, test_corecmotifs[c(1:4, 6:8)])
})

test_that("filtering by eucl_distance works", {
    # Regroup some of the example CoRecMotifs for testing purposes
    test_corecmotifs <-
        example_corecmotifs[1:12] %>%
        lapply(set_pbm_condition, "test")

    # Filter out motifs with no Euclidean distance less than 1000
    eucl_distance_filter_1 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 1,
            eucl_distance = 1000
        )

    expect_setequal(eucl_distance_filter_1, test_corecmotifs)

    # Filter out motifs with no Euclidean distance less than 0.6
    eucl_distance_filter_2 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 1,
            eucl_distance = 0.5
        )

    expect_setequal(
        eucl_distance_filter_2, test_corecmotifs[c(1, 3, 5:6, 9:12)]
    )

    # Filter out motifs with no Euclidean distance less than 0.4
    eucl_distance_filter_3 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 1,
            eucl_distance = 0.4
        )

    expect_setequal(eucl_distance_filter_3, test_corecmotifs[c(9:10, 12)])

    # Filter out motifs with no Euclidean distance less than 0.1
    eucl_distance_filter_4 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 1,
            eucl_distance = 0.1
        )

    expect_setequal(eucl_distance_filter_4, list())
})

test_that("filtering by both n_replicates and eucl_distance works", {
    # Regroup some of the example CoRecMotifs for testing purposes
    test_corecmotifs <-
        example_corecmotifs[1:12] %>%
        lapply(set_pbm_condition, "test")

    # Filter out groups with < 4 motifs and motifs with no ED < 1000
    combined_filter_1 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 4,
            eucl_distance = 1000
        )

    expect_setequal(combined_filter_1, test_corecmotifs)

    # Filter out groups with < 3 motifs and motifs with no ED < 0.5
    combined_filter_2 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 3,
            eucl_distance = 0.5
        )

    expect_setequal(combined_filter_2, test_corecmotifs[9:12])

    # Filter out groups with < 2 motifs and motifs with no ED < 0.4
    combined_filter_3 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 2,
            eucl_distance = 0.4
        )

    expect_setequal(combined_filter_3, test_corecmotifs[c(9:10, 12)])

    # Filter out groups with < 4 motifs and motifs with no ED < 0.4
    combined_filter_4 <-
        check_replicates(
            test_corecmotifs,
            n_replicates = 4,
            eucl_distance = 0.4
        )

    expect_setequal(combined_filter_4, list())

    # Filter out subsetted groups with < 3 motifs and motifs with no ED < 0.5
    combined_filter_5 <-
        check_replicates(
            test_corecmotifs[c(1:4, 5:7, 11)],
            n_replicates = 2,
            eucl_distance = 0.5
        )

    expect_setequal(combined_filter_5, test_corecmotifs[c(1, 3, 5:6)])
})
Siggers-Lab/hTF_array documentation built on Feb. 7, 2024, 11:25 p.m.