-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathstring.spec.ts
58 lines (57 loc) · 2.12 KB
/
string.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { kmp, rabinkarp } from '../src/string'
describe('kmp, rabinkarp', () => {
it('should return -1 if not found', () => {
const text = 'abc'
const pattern = 'd'
expect(kmp(text, pattern)).toEqual(-1)
expect(rabinkarp(text, pattern)).toEqual(-1)
})
it('should return index if found (0)', () => {
const text = 'abcd'
const pattern = 'd'
expect(kmp(text, pattern)).toEqual(3)
expect(rabinkarp(text, pattern)).toEqual(3)
})
it('should return index if found (1)', () => {
const text = 'abcdabcea'
const pattern = 'abce'
expect(kmp(text, pattern)).toEqual(4)
expect(rabinkarp(text, pattern)).toEqual(4)
})
it('should return index if found (2)', () => {
const text = 'ABABDABACDABABCABAB'
const pattern = 'ABABCABAB'
expect(kmp(text, pattern)).toEqual(10)
expect(rabinkarp(text, pattern)).toEqual(10)
})
it('should return index if found (3)', () => {
const text = 'abfdslsnajlasnnalanalalnalalnandlalannanaslalsanlanlsananalsnalnaslsjjasan'
const pattern = 'anlsa'
expect(kmp(text, pattern)).toEqual(49)
expect(rabinkarp(text, pattern)).toEqual(49)
})
it('should return index if found (4)', () => {
const text = 'baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
const pattern = 'aaaaaaaaaaa'
expect(kmp(text, pattern)).toEqual(1)
expect(rabinkarp(text, pattern)).toEqual(1)
})
it('should return index if found (5)', () => {
const text = 'ioipoiopiopipoiioipiopipipiipoipoipoiopipoipippp'
const pattern = 'piop'
expect(kmp(text, pattern)).toEqual(7)
expect(rabinkarp(text, pattern)).toEqual(7)
})
it('should return index if found (6)', () => {
const text = 'oiopiopipoipoipoipoiopiopiopipiopiopipoipoipoipoipio'
const pattern = 'poipio'
expect(kmp(text, pattern)).toEqual(46)
expect(rabinkarp(text, pattern)).toEqual(46)
})
it('should work for large input', () => {
const text = Array(1e5).fill('a').join('b') + 'c'
const pattern = Array(1e3).fill('a').join('b') + 'c'
expect(kmp(text, pattern)).toEqual(198000)
expect(rabinkarp(text, pattern)).toEqual(198000)
})
})