Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions R/XString-class.R
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,13 @@ setMethod("==", signature(e1="BString", e2="character"),
setMethod("==", signature(e1="character", e2="BString"),
function(e1, e2) e2 == e1
)
setMethod("==", signature(e1="XString", e2="character"),
## Coerce to BString to handle things like RNAString("U") == "T"
function(e1, e2) as(e1, "BString") == e2
)
setMethod("==", signature(e1="character", e2="XString"),
function(e1, e2) e1 == as(e2, "BString")
)

setMethod("!=", signature(e1="XString", e2="XString"),
function(e1, e2) !(e1 == e2)
Expand All @@ -444,7 +451,34 @@ setMethod("!=", signature(e1="BString", e2="character"),
setMethod("!=", signature(e1="character", e2="BString"),
function(e1, e2) !(e1 == e2)
)
setMethod("!=", signature(e1="XString", e2="character"),
function(e1, e2) as(e1, "BString") != e2
)
setMethod("!=", signature(e1="character", e2="XString"),
function(e1, e2) e1 != as(e2, "BString")
)

### Comparisons are already implemented for XStringSet objects,
### so we can just dispatch to that code here.
setMethod("<=", signature(e1="XString", e2="XString"),
function(e1, e2)
{
if (!comparable_seqtypes(seqtype(e1), seqtype(e2))) {
class1 <- class(e1)
class2 <- class(e2)
stop("comparison between a \"", class1, "\" instance ",
"and a \"", class2, "\" instance ",
"is not supported")
}
as(e1, "XStringSet") <= as(e2, "XStringSet")
}
)
setMethod("<=", signature(e1="XString", e2="character"),
function(e1, e2) as(e1, "BStringSet") <= e2
)
setMethod("<=", signature(e1="character", e2="XString"),
function(e1, e2) e1 <= as(e2, "BStringSet")
)

### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
### The "substr" and "substring" methods.
Expand Down
58 changes: 54 additions & 4 deletions tests/testthat/test-XString-class.R
Original file line number Diff line number Diff line change
Expand Up @@ -137,14 +137,64 @@ test_that("equality methods work as advertised", {
expect_true(AAString(aastr) != BString(bstr))
expect_true(bstr == BString(bstr))

## comparisons against character
expect_true(DNAString("AAA") == "AAA")
expect_true(DNAString("AAA") != "BBB")
expect_false(RNAString("UUU") == "TTT")
expect_true(AAString("UUU") == "UUU")
## these may seem redundant but need to ensure that order doesn't matter
expect_true("AAA" == DNAString("AAA"))
expect_true("BBB" != DNAString("AAA"))
expect_false("TTT" == RNAString("UUU"))
expect_true("UUU" == AAString("UUU"))

## invalid comparisons
expect_error(DNAString() == AAString(),
"comparison between a \"DNAString\" instance and a \"AAString\" instance is not supported")
expect_error(DNAString() == BString(),
"comparison between a \"DNAString\" instance and a \"BString\" instance is not supported")
expect_error(RNAString() == AAString(),
"comparison between a \"RNAString\" instance and a \"AAString\" instance is not supported")
expect_error(RNAString() == BString(),
"comparison between a \"RNAString\" instance and a \"BString\" instance is not supported")
})

test_that("inequality methods work as advertised", {
## Basic cases
expect_true(DNAString("AAA") <= DNAString("AAAA"))
expect_false(DNAString("AAA") > DNAString("AAAA"))
expect_true(DNAString("AAA") <= DNAString("AAA"))
expect_true(DNAString("A") <= DNAString("C"))
expect_false(DNAString("ATTT") > RNAString("AUUU"))
expect_true(AAString("AAA") <= AAString("BBB"))
expect_true(BString("Testing") <= BString("ZZZTesting"))

## have to check every combination for XString - character comparisons
## due to how dispatch works
expect_true(BString("ABCDEFG") <= "ABCDEFG")
expect_true(BString("ABCDEFG") < "ZYXWVUT")
expect_true(BString("ABCDEFG") >= "ABCDEFG")
expect_false(BString("ABCDEFG") > "ABCDEFG")

expect_true("ABCDEFG" <= BString("ABCDEFG"))
expect_false("ZYXWVUT" < BString("ABCDEFG"))
expect_true("ABCDEFG" >= BString("ABCDEFG"))
expect_false("ABCDEFG" > BString("ABCDEFG"))

## Cases with potentially invalid characters
expect_true(DNAString("AAA") < "BBB")
expect_true(DNAString("CCC") > "BBB")
expect_true(RNAString("UUU") >= "TTT")
expect_true(RNAString("UUU") >= "UUU")

## invalid comparisons
expect_error(DNAString(dnastr) == AAString(aastr),
expect_error(DNAString() <= AAString(),
"comparison between a \"DNAString\" instance and a \"AAString\" instance is not supported")
expect_error(DNAString(dnastr) == BString(bstr),
expect_error(DNAString() <= BString(),
"comparison between a \"DNAString\" instance and a \"BString\" instance is not supported")
expect_error(RNAString(rnastr) == AAString(aastr),
expect_error(RNAString() <= AAString(),
"comparison between a \"RNAString\" instance and a \"AAString\" instance is not supported")
expect_error(RNAString(rnastr) == BString(bstr),
expect_error(RNAString() <= BString(),
"comparison between a \"RNAString\" instance and a \"BString\" instance is not supported")
})

Expand Down
Loading