tests/levenTest.R

library(levenR)
if(reverseString('123')!='321')stop(simpleError('Reverse strings not correct'))
if(complimentDna('TTACCCG')!='AATGGGC')stop(simpleError('Compliment DNA incorrect'))
if(revComp('TTACCCG')!=complimentDna(reverseString('TTACCCG')))stop(simpleError('revComp not equal reverse and compliment'))
if(revComp('TTACCCG')!=reverseString(complimentDna('TTACCCG')))stop(simpleError('revComp not equal reverse and compliment'))
if(revComp('TACCG')!='CGGTA')stop(simpleError('revComp not correct'))
if(leven('AAA','AAA')!=0)stop(simpleError('Equal strings not equal'))
if(leven('AT','A')!=1)stop(simpleError('Difference between AT and A not 1'))
if(leven('A','AT')!=1)stop(simpleError('Difference between A and AT not 1'))
if(leven('A','T')!=1)stop(simpleError('Difference between A and T not 1'))
if(leven('asdasdasedaeswaseaseasdasdfdfsdfgdfgsdfsdfaeruiurtyuuiyuyiuvdyiuyiuyiuyiuyiuyiuyiuyasduifysaiyufasiyudfaisyufiasyufisayufiasyufisayfisayufsaiyufisaydfiasyufiasydfiasyfisaydfiasyisayfisyisaiuyyiauyriutryiuayiuyiuyiuyiuyiuyiuyiuyiuadfuasduyasfiuysadufyaisydfiuaysfiyiuyiuaydfiasydfiasyayyig','asdasdasedaeswaseaseasdasdfdfsdfgdfgsdfsdfaeruiurtyuuiyuyiuvdyiuyiuyiuyiuyiuyiuyiuyasduifysaiyufasiyudfaisyufiasyufisayufiasyufisayfisayufsaiyufisaydfiasyufiasydfiasyfisaydfiasyisayfisyisaiuyyiauyriutryiuayiuyiuyiuyiuyiuyiuyiuyiuadfuasduyasfiuysadufyaisydfiuaysfiyiuyiuaydfiasydfiasyayyig')!=0)stop(simpleError('Equal longer strings not equal'))
if(any(leven(c('AAAA','AA'),'AAA')!=1))stop(simpleError('Multiple string1 do not produce expected'))
if(any(leven('AAA',c('AAAA','AA'))!=1))stop(simpleError('Multiple string2 do not produce expected'))
if(tryCatch(leven(NULL,'AAA'),error=function(x)"Caught error")!='Caught error')stop(simpleError('Did not catch NULL input'))
if(any(unlist(levenAlign('AA','AA'))!=c('AA','AA')))stop(simpleError('Aligning AA and AA does not produce AA and AA'))
if(any(unlist(levenAlign('AAT','AA'))!=c('AA.','AAT')))stop(simpleError('Aligning AAT and AA does not produce AAT and AA-'))
if(any(unlist(levenAlign('AATC','AAC'))!=c('AA-C','AATC')))stop(simpleError('Aligning AATC and AAC does not produce AATC and AA-C'))
if(any(unlist(levenAlign('AAC','AATC'))!=c('AATC','AA-C')))stop(simpleError('Aligning AAC and AATC does not produce AA-C and AATC'))
if(any(unlist(levenAlign('TAAAAAATC','AAATC'))!=c('-AAA---TC','TAAAAAATC')))stop(simpleError('Aligning TAAAAAATC and AAATC does not produce -AAA---TC and TAAAAAATC'))
if(all(unlist(levenAlign(c('TAA','AAT'),'AA'))!=c('-AA-','TAA-','-AAT')))stop(simpleError('Aligning TAA,AAT and AA does not produce TAA-,-AAT and -AA-'))
if(any(combineAligns(c('AAT','AA','T','AAT'),c('AAT','AT','T','--T'),c(1:3,1))!=c('AAT','.AT','..T','--T')))stop(simpleError('Combining alignments with starts does not produce expected'))
if(any(combineAligns(c('G'),c('C'),2)!=c('.C')))stop(simpleError('Combining alignments with starts does not produce expected'))
if(any(combineAligns(c('AA','TTT','CC'),c('AA','T-T','CC'),c(1,4,6))!=c('AA.....','...T-T.','.....CC')))stop(simpleError('Combining alignments with starts does not produce expected'))
if(any(unlist(levenAlign('AAAAACTTT','AAC',trimOuterGaps=TRUE,substring1=TRUE))!=c('AAC','AAC')))stop(simpleError('Trim outer gaps and substrings incorrect'))
if(any(unlist(levenAlign('AAC','AAAAACTTT',trimOuterGaps=TRUE,substring2=TRUE))!=c('AAC','AAC')))stop(simpleError('Trim outer gaps and substrings incorrect'))
if(leven('AAA')!=0)stop(simpleError('leven on self did not return 0'))
if(any(dim(leven(c('AAA','ATA')))!=c(2,2)))stop(simpleError('leven on 2 seqs did not produce 2x2 matrix'))
if(any(leven(c('AAA','ATA','ATA'),c('AAA','ATA','ACA'),oneToOne=TRUE)!=c(0,0,1)))stop(simpleError('One to one leven incorrect'))
if(any(leven(c('AA','AT','TA'),c('XXAAA','XXATA','XXACA'),oneToOne=TRUE,substring2=TRUE)!=c(0,0,1)))stop(simpleError('Substring leven incorrect'))
if(any(leven(c('AAAA','ATAA','AAATA'),c('AAA','ATA','ACA'),oneToOne=TRUE,substring1=TRUE)!=c(0,0,1)))stop(simpleError('Substring leven incorrect'))
if(any(leven(c('AAAA','ATAA','AAATA','XXX'))!=leven(c('AAAA','ATAA','AAATA','XXX'),nThreads=3)))stop(simpleError('Multithreading produces incorrect results'))
if(any(leven(c('AAAAT','AAAT','AAATA','AATTTTT','AT','XXX'),'AAAAAAT',homoLimit=3)!=c(0,0,1,2,2,4)))stop(simpleError('Homopolymer errors not correct'))


if(any(hamming(c('CCCC','CCCT','CCAT'),'AAAT')!=c(4,3,2)))stop(simpleError('Hamming distance not correct'))
if(any(hamming(c('CCCC','CCCT','CCAT'),'AAAT',cutoff=3)!=c(3,3,2)))stop(simpleError('Hamming distance with cutoff not correct'))
if(any(hamming(c('CCCC','CCCT','CCAT'),c('CCCC','CCAA','CAAT'),cutoff=3,oneToOne=TRUE)!=c(0,2,1)))stop(simpleError('One to one Hamming distance not correct'))
if(any(hamming(c('CCCC','CCCT','CCAT'),c('CCCC','CCAA','CAAT'),cutoff=3)!=matrix(c(0,2,3,1,2,2,2,1,1),byrow=TRUE,nrow=3)))stop(simpleError('Multiple Hamming distance not correct'))
tmp<-paste(sample(LETTERS,10000,TRUE),collapse='')
if(any(hamming(tmp,tmp)!=0))stop(simpleError('Hamming distance on long sequence not correct'))
if(any(hamming(sprintf('%sAAA%s',tmp,tmp),sprintf('%sBBB%s',tmp,tmp))!=3))stop(simpleError('Hamming distance on long sequence not correct'))
if(any(hamming(sprintf('%sAAA%s',tmp,tmp),sprintf('%sBBB%s',tmp,tmp),cutoff=1)!=1))stop(simpleError('Hamming distance on long sequence not correct'))
#hamming<-function(strings1,strings2=NULL,oneToOne=FALSE,cutoff=99999,vocal=0){

if(bestMismatch('AA','AAG')!=0)stop(simpleError('bestMismatch incorrect'))
if(bestMismatch('TT','AAG')!=2)stop(simpleError('bestMismatch incorrect'))
if(any(bestMismatch('AA','AAG',pos=TRUE)!=c(0,1)))stop(simpleError('bestMismatch position finding incorrect'))
if(any(bestMismatch('AA','TTAAG',pos=TRUE)!=c(0,3)))stop(simpleError('bestMismatch position finding incorrect'))
if(any(bestMismatch('AA','TTAAGAA',pos=TRUE,findAll=TRUE)!=matrix(c(0,0,3,6),nrow=2)))stop(simpleError('bestMismatch position finding incorrect'))
if(any(multiMismatch('AA','TTAAGAA')!=c(0,3,1)))stop(simpleError('multiMismatch position finding incorrect'))
if(any(multiMismatch(c('TT','AA'),'TTAAGAA')!=c(0,1,1)))stop(simpleError('multiMismatch position finding incorrect'))
if(any(multiMismatch(c('TT','AA'),'TTAAGAA',drop=FALSE)[,'pos']!=c(1,3)))stop(simpleError('multiMismatch position finding incorrect'))
if(any(multiMismatch(c('TT','AA'),'TTAAGAA',drop=FALSE,findAll=TRUE)[,'pos']!=c(1,3,6)))stop(simpleError('multiMismatch position finding incorrect'))

#don't call directly from R so test it directly
if(.C('levenAll',as.integer(1),"AATTAA","GAATTAAG",as.integer(0),as.integer(c(0,0)),as.integer(c(0,0)),as.integer(1),as.integer(0),"AAAAAAAAAAAAAAAA","AAAAAAAAAAAA",PACKAGE='levenR')[[1]]!=2)stop(simpleError('Debug messes things up'))
if(.C('levenAll',as.integer(1),"AATTAA","GAATTAAG",as.integer(0),as.integer(c(0,0)),as.integer(c(0,0)),as.integer(1),as.integer(1),"AAAAAAAAAAAAAAAA","AAAAAAAAAAAA",PACKAGE='levenR')[[9]]!="-AATTAA-")stop(simpleError('Debug messes things up'))


if(.C('hamming',as.integer(-99),"AATTAA","AATTAA",as.integer(6),as.integer(2),PACKAGE='levenR')[[1]]!=0)stop(simpleError('Incorrect hamming'))
if(.C('hamming',as.integer(-99),"AATTAA","AAZZAA",as.integer(6),as.integer(2),PACKAGE='levenR')[[1]]!=2)stop(simpleError('Incorrect hamming'))
sherrillmix/levenR documentation built on Oct. 25, 2023, 11:42 a.m.