paolodona / sequence_recognizer

This URL has Read+Write access

Paolo Dona (author)
Thu Dec 11 19:10:08 -0800 2008
sequence_recognizer / sequence_recognizer_test.rb
100755 50 lines (42 sloc) 1.657 kb
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
#!/usr/bin/env ruby
require 'test/unit'
require 'sequence_recognizer'
require 'yaml'
require 'benchmark'
require 'rubygems'
gem 'ruby-debug'
require 'ruby-debug'
Debugger.start
 
class SequenceRecognizerTest < Test::Unit::TestCase
  include SequenceRecognizer
  
  def test_extract_sequences_one_digit
    assert_equal [%w{1 2 3}], extract_sequences_from(%w{1 2 3 5}, 1)
    assert_equal [%w{1 2 3},%w{5 6 7}], extract_sequences_from(%w{1 2 3 5 6 7 9}, 1)
    assert_equal [], extract_sequences_from(%w{1 3 5 7 9}, 1)
  end
  
  def test_extract_sequences_two_digits
    assert_equal [%w{11 12 13}], extract_sequences_from(%w{11 12 13 15}, 2)
    assert_equal [%w{11 21 31}], extract_sequences_from(%w{11 33 21 31}, 2)
    assert_equal [%w{11 21 31},%w{15 16 17}], extract_sequences_from(%w{11 21 31 15 16 17 99}, 2)
    assert_equal [%w{11 21 31 41 51}], extract_sequences_from(%w{11 21 31 41 51 71 99}, 2)
  end
  
  def test_extract_sequences_three_digits
    assert_equal [%w{111 121 131}], extract_sequences_from(%w{111 121 131 151}, 3)
  end
  
  def test_extract_sequences_five_digits
assert_equal [%w{81702 81802 81902}], extract_sequences_from(%w{81702 81802 81902 82702 82802}, 5)
  end
 
  def test_performance
    available_shortcodes = YAML.load_file('available.yml')
    expected_sequences = YAML.load_file('sequences.yml')
    sequences = []
    puts Benchmark.measure {
      sequences = extract_sequences_from(available_shortcodes)
    }
    
    # test the result
    assert_equal expected_sequences.size, sequences.size
    expected_sequences.each do |sequence|
      assert sequences.include?(sequence)
    end
  end
end