-
Notifications
You must be signed in to change notification settings - Fork 1
/
fuzz_ball_spec.rb
86 lines (73 loc) · 2.44 KB
/
fuzz_ball_spec.rb
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
require 'spec_helper'
describe FuzzBall do
before(:all) do
@fuzz = FuzzBall.new(["aaa", "bbb"])
@aaa_array = "aaa".unpack("U*")
end
describe "#initialize" do
it "should initialize with a list of files" do
@fuzz.files.should == ["aaa", "bbb"]
end
it "should convert the list of files into their array representations" do
@fuzz.files_array.should == ["aaa".unpack("U*"), "bbb".unpack("U*")]
end
it "should weed out characters that are designated to be ignored" do
fuzz = FuzzBall.new(["path/to/file.txt"], :ignore => %w(. /))
fuzz.files_array.should == ["pathtofiletxt".unpack("U*")]
end
end
describe "#search" do
it "should only search the candidate strings that have the highest duples" do
@fuzz.should_receive(:decimate_strings!).once.with( @aaa_array ).and_return([@aaa_array])
@fuzz.should_receive(:smith_waterman).once.with(@aaa_array, @aaa_array)
@fuzz.search("aaa")
end
it "should be fine when presented with malformed input (e.g., blank string)" do
lambda {
@fuzz.search("")
}.should_not raise_exception
end
end
describe "#decimate_strings!" do
it "should remove strings that don't have a high duple count" do
@fuzz.send(:decimate_strings!, @aaa_array).should == [@aaa_array]
end
end
describe "Array utilities" do
describe "#count_duples" do
it "should return the number of continuous duples between two arrays" do
[
[[1,2], [1,3], 0],
[[1,2,3], [5,6,1,2,3,4], 2],
[[1,2], [1,2], 1],
[[1,2,3], [1,2], 1]
].each do |test_case|
@fuzz.send(:count_duples, test_case[0], test_case[1]).should == test_case[2]
end
end
end
describe "#smith_waterman" do
it "should align the two strings" do
@fuzz.send(:smith_waterman, [1,2,3], [2,3,4])
@fuzz.instance_eval { @curr_alignment }.should == [2, 1, 1, 0]
@fuzz.instance_eval { @curr_score }.should == 2.0
end
end
end
describe "String utilities" do
before(:all) do
@str = "lorem ipsum dolor"
@arr = @str.unpack("U*")
end
describe "#str2arr" do
it "should convert a string to an array of ints" do
@fuzz.send(:str2arr, @str).should == @arr
end
end
describe "#arr2str" do
it "should convert an array of ints to its string" do
@fuzz.send(:arr2str, @arr).should == @str
end
end
end
end