tests/testthat/tests.R

context("Plot DNA")
test_that("Check if indexToRange works",{
  expect_equal(indexToRange(c(1:5,10:7)), data.frame('start'=c(1,7),'end'=c(5,10)))
  expect_equal(indexToRange(c(1:5,6:10,9999:11)), data.frame('start'=c(1),'end'=c(9999)))
  expect_equal(indexToRange(c(1:5,6:10,9999:11,1:5,1:5)), data.frame('start'=c(1),'end'=c(9999)))
  expect_equal(nrow(indexToRange(seq(1,999,2))), 500)
})

test_that("Check if gapToNoGap works",{
  expect_equal(gapToNoGap('AAAAAAAAAAA',1:5), 1:5)
  expect_true(is.na(gapToNoGap('AAAAAAAAAAA',99)))
  expect_true(is.na(gapToNoGap('AA',3)))
  expect_true(is.na(gapToNoGap('AA',-1)))
  expect_true(is.na(gapToNoGap('AA',0)))
  expect_equal(is.na(gapToNoGap('AA',c(0,-1,100))), c(TRUE,TRUE,TRUE))
  expect_equal(gapToNoGap('AA',2), 2)
  expect_equal(gapToNoGap('A-A',2), 1)
  expect_equal(gapToNoGap('A----A',5), 1)
  expect_equal(gapToNoGap('A----A',6), 2)
  expect_equal(gapToNoGap('A----A',1:6), c(1,1,1,1,1,2))
  expect_equal(gapToNoGap('Z--Z--Z',1:7), c(1,1,1,2,2,2,3))
  expect_equal(gapToNoGap('--A--A--A',1:9), c(0,0,1,1,1,2,2,2,3))
  expect_equal(is.na(gapToNoGap('--A--A--A',c(NA,NA,1))), c(TRUE,TRUE,FALSE))
})

test_that("Check if noGapToGap works",{
  expect_equal(noGapToGap('AAAAAAAAAAA',1:5), 1:5)
  expect_true(is.na(noGapToGap('AAAAAAAAAAA',99)))
  expect_true(is.na(noGapToGap('AA',3)))
  expect_true(is.na(noGapToGap('AA',-1)))
  expect_true(is.na(noGapToGap('AA',0)))
  expect_equal(is.na(noGapToGap('AA',c(0,-100,100))), c(TRUE,TRUE,TRUE))
  expect_equal(noGapToGap('AA',2), 2)
  expect_equal(noGapToGap('A-A',2), 3)
  expect_equal(noGapToGap('A----A',2), 6)
  expect_equal(noGapToGap('A----A-A--A',3), 8)
  expect_equal(noGapToGap('A--A--A-AA--A',1:6), c(1,4,7,9,10,13))
  expect_equal(noGapToGap('--Z--Z--Z---',1:3), c(3,6,9))
  expect_equal(is.na(noGapToGap('--A--A--A',c(NA,NA,1))), c(TRUE,TRUE,FALSE))
})

test_that("Check if seqSplit works",{
  expect_equal(dim(seqSplit('AAA','AAZ')), c(2,3))
  expect_equal(dim(seqSplit('AAA','AAZ','AAT')), c(3,3))
  expect_error(dim(seqSplit('AAA','AAZ','A')), 'same length')
  expect_equal(dim(seqSplit('AAA','AAZ','A',fill='-')), c(3,3))
  expect_equal(dim(seqSplit(c('AAA','AAZ'),'A',fill='-')), c(3,3))
  expect_equal(dim(seqSplit(c('AAA','AAZ'),c('A','TT'),fill='-')), c(4,3))
  expect_error(seqSplit(c('AAA','AAZ'),NA,fill='-'), 'NA sequence found')
  expect_equal(seqSplit(c('AAA','AAZ',''),fill='*')[3,], c('*','*','*'))
  expect_equal(seqSplit('AA','AAZA','',fill='-')[3,], rep('-',4))
  expect_equal(dim(seqSplit(sapply(0:1000,function(x)paste(sample(letters,x,TRUE),collapse='')),fill='~')), c(1001,1000))
  expect_equal(seqSplit(c("AAA","CCC","CTC"))[,1],c('A','C','C'))
  expect_equal(seqSplit(c("AAA","CCC","CTC"))[1,],c('A','A','A'))
  expect_error(seqSplit(c("AAA","CC","CTC"))[1,],'length')
  expect_error(seqSplit(c("AAA",NA,"CTC"))[1,],'NA')
  expect_error(seqSplit(c("AAA",NA,"CTC"),fill='-')[1,],'NA')
  expect_equal(seqSplit(c("AAA",'CC',"CTC"),fill='-')[,3],c('A','-','C'))
  expect_equal(seqSplit(c("AAA",'CC',"CTC"),fill='@')[,3],c('A','@','C'))
  expect_equal(dim(seqSplit(replicate(123,paste(sample(letters,543,TRUE),collapse='')))),c(123,543))
  expect_equal(dim(seqSplit(c('A',replicate(123,paste(sample(letters,543,TRUE),collapse=''))),fill='!')),c(124,543))
  expect_equal(dim(seqSplit(c('A',replicate(123,paste(sample(letters,543,TRUE),collapse=''))),fill='THISISSILLYBUTDOESNTBREAK')),c(124,543))
})

test_that("Check if replaceOuterGaps works",{
  expect_equal(replaceOuterGaps(c('AAA','AAZZZ')), c('AAA','AAZZZ'))
  expect_equal(replaceOuterGaps(c('AA--A','AAZ-------ZZ')), c('AA--A','AAZ-------ZZ'))
  expect_equal(replaceOuterGaps(c('---AA--A','AAZ-------ZZ----','--A-')), c('...AA--A','AAZ-------ZZ....','..A.'))
  expect_equal(replaceOuterGaps(c('---AA--A','AAZ-------ZZ----','--A-'),leftEnd=FALSE), c('---AA--A','AAZ-------ZZ....','--A.'))
  expect_equal(replaceOuterGaps(c('---AA--A','AAZ-------ZZ----','--A-'),rightEnd=FALSE), c('...AA--A','AAZ-------ZZ----','..A-'))
  expect_equal(replaceOuterGaps(c('---AA--A','AAZ-------ZZ----','--A-'),rightEnd=FALSE,leftEnd=FALSE), c('---AA--A','AAZ-------ZZ----','--A-'))
  expect_error(replaceOuterGaps(c(NA,'---AA--A','AAZ-------ZZ----','--A-')), 'NA sequence found')
})

test_that("Check if removeGapCols works",{
  expect_equal(removeGapCols(c('AAAZZ','AAZZZ')), c('AAAZZ','AAZZZ'))
  expect_equal(removeGapCols(c('AA--A','AAZZZ')), c('AA--A','AAZZZ'))
  expect_equal(removeGapCols(c('A-A','C-C','C-C','TAT'),maxGapProp=.74), c('AA','CC','CC','TT'))
  expect_equal(removeGapCols(c('A-A','C-C','C-C','TAT'),maxGapProp=.75), c('A-A','C-C','C-C','TAT'))
  expect_equal(removeGapCols(c(rep('ZZZ',1e4),'-AA','C-C','TA-'),maxGapProp=0), rep('',1e4+3))
  expect_equal(removeGapCols(c('A-A','C-C','C-C','T-T'),maxGapProp=1), c('A-A','C-C','C-C','T-T'))
  expect_error(removeGapCols(c(NA,'---AA--A','AAZ-------ZZ----','--A-')), 'NA sequence found')
})

test_that("Check if replaceAfterStop works",{
  expect_equal(replaceAfterStop(c('AAA','AAZZZ')), c('AAA','AAZZZ'))
  expect_equal(replaceAfterStop(c('AA--A','AAZ-------ZZ')), c('AA--A','AAZ-------ZZ'))
  expect_equal(replaceAfterStop(c('AXAAXAA','AAAAAAAA','AAAX')), c('AXXXXXX','AAAAAAAA','AAAX'))
  expect_equal(replaceAfterStop(c('AXAAXAA','AAAAAAAA','AAAX'),'Z'), c('AXAAXAA','AAAAAAAA','AAAX'))
  expect_equal(replaceAfterStop(c('AXZAZAA','AAAAXAAA','AAAZ'),'Z'), c('AXZXXXX','AAAAXAAA','AAAZ'))
  expect_equal(replaceAfterStop(c('AZAAZAA','AAAAAAAA','AAAZ'),'Z','!'), c('AZ!!!!!','AAAAAAAA','AAAZ'))
  expect_error(replaceAfterStop(c('AAAXA','AAZXXAAAXA',NA,'ASDASADS')), 'NA sequence found')
})


test_that("Check if indexToRange works",{
  expect_equal(indexToRange(1:10)$start, 1)
  expect_equal(indexToRange(1:100)$start, 1)
  expect_equal(indexToRange(c(1:100,123:234))$start, c(1,123))
  expect_equal(indexToRange(c(1:100,10:234))$start, c(1))
  expect_equal(indexToRange(c(1,3,5,6))$start, c(1,3,5))
  expect_equal(indexToRange(1:10)$end, 10)
  expect_equal(indexToRange(1:100)$end, 100)
  expect_equal(indexToRange(c(1:100,123:234))$end, c(100,234))
  expect_equal(indexToRange(c(1:100,10:234))$end, c(234))
  expect_equal(indexToRange(c(1,3,5,6))$end, c(1,3,6))
})


test_that("plotDNA works",{
  expect_null(plotDNA(c("AAA","CCC","CTC")))
  expect_null(plotDNA(c("ZZXZX","CCC","CTC")))
  expect_null(plotDNA(c("AA-","CC.","CTC")))
  expect_equal(plotDNA(c("AA-","CC.","CTC"),groups=c(1,1,2)),c('1'=1.5,'2'=3))
  expect_error(plotDNA(c("AA-","CC.","CTC"),groups=c(1,1)),'[Ll]ength')
  expect_null(plotDNA(c("AA-","CC.","CTC"),seqCounts=c(1,1,100)))
  expect_equal(plotDNA(c("AA-","CC.","CTC"),groups=c(1,1,2),seqCounts=c(1,2,3)),c('1'=2,'2'=5))
  expect_error(plotDNA(c()),'missing') #is this desired?
  expect_error(plotDNA(NULL),'missing') #is this desired?
  expect_null(plotDNA(c("AA-","CC.","CTC"),refSeq='A-A'))
  expect_error(plotDNA(c("AA-","CC.","CTC"),seqCounts=c(1,1)),'[Ll]ength')
  expect_error(plotDNA(c("AA-","CC.","CTC"),groups=c(1,1,NA)),'NA')
  expect_error(plotDNA(c("AA-","CC.","CTC")),NA)
  expect_error(plotDNA(c("AA-","CC.","CTC"),cols=dnaplotr::aminoCols),NA)
})

test_that("plotAA works",{
  expect_null(plotAA(c("AAA","CCC","CTC")))
  expect_null(plotAA(c("ZZXZX","CCC","CTC")))
  expect_null(plotAA(c("AA-","CC.","CTC")))
})

test_that("createFakeDNA works",{
  expect_equal(length(createFakeDNA(500)),500+1)
  expect_equal(length(createFakeDNA(10)),10+1)
  expect_equal(length(unique(nchar(createFakeDNA(500,400)))),1)
  expect_equal(unique(nchar(createFakeDNA(500,500))),500)
  expect_equal(unique(nchar(createFakeDNA(1000,20))),20)
  expect_equal(unique(nchar(createFakeDNA(1000,20,nSplit=0))),20)
  expect_equal(any(grepl('[^ACTG-]',(createFakeDNA(1000,500)))),FALSE)
  expect_equal(any(grepl('[^ZYX-]',(createFakeDNA(1000,500,bases=c('Z','Y','X'))))),FALSE)
  expect_equal(any(grepl('[^ZYX]',(createFakeDNA(1000,500,pGap=0,bases=c('Z','Y','X'))))),FALSE)
  expect_equal(length(unique(createFakeDNA(1000,500,pGap=0,pMutation=0,pNoise=0,bases=c('Z','Y','X')))),1)
})

test_that("createFakeAA works",{
  expect_equal(length(createFakeAA(500)),500+1)
  expect_equal(length(createFakeAA(10)),10+1)
  expect_equal(length(unique(nchar(createFakeAA(500,400)))),1)
  expect_equal(unique(nchar(createFakeAA(500,500))),500)
  expect_equal(unique(nchar(createFakeAA(1000,20))),20)
})
sherrillmix/dnaplotr documentation built on Oct. 29, 2022, 4:42 p.m.