bioinform 0.1.17 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/LICENSE +0 -1
  4. data/README.md +1 -1
  5. data/TODO.txt +23 -30
  6. data/bin/convert_motif +4 -0
  7. data/bin/pcm2pwm +1 -1
  8. data/bin/split_motifs +1 -1
  9. data/bioinform.gemspec +0 -2
  10. data/lib/bioinform.rb +54 -16
  11. data/lib/bioinform/alphabet.rb +85 -0
  12. data/lib/bioinform/background.rb +90 -0
  13. data/lib/bioinform/cli.rb +1 -2
  14. data/lib/bioinform/cli/convert_motif.rb +52 -17
  15. data/lib/bioinform/cli/pcm2pwm.rb +32 -26
  16. data/lib/bioinform/cli/split_motifs.rb +31 -30
  17. data/lib/bioinform/conversion_algorithms.rb +6 -0
  18. data/lib/bioinform/conversion_algorithms/pcm2ppm_converter.rb +13 -11
  19. data/lib/bioinform/conversion_algorithms/pcm2pwm_converter.rb +39 -11
  20. data/lib/bioinform/conversion_algorithms/pcm2pwm_mara_converter.rb +26 -0
  21. data/lib/bioinform/conversion_algorithms/ppm2pcm_converter.rb +30 -0
  22. data/lib/bioinform/conversion_algorithms/pwm2iupac_pwm_converter.rb +23 -0
  23. data/lib/bioinform/conversion_algorithms/pwm2pcm_converter.rb +85 -0
  24. data/lib/bioinform/data_models.rb +1 -7
  25. data/lib/bioinform/data_models/named_model.rb +38 -0
  26. data/lib/bioinform/data_models/pcm.rb +18 -28
  27. data/lib/bioinform/data_models/pm.rb +73 -170
  28. data/lib/bioinform/data_models/ppm.rb +11 -24
  29. data/lib/bioinform/data_models/pwm.rb +30 -56
  30. data/lib/bioinform/errors.rb +17 -0
  31. data/lib/bioinform/formatters.rb +4 -2
  32. data/lib/bioinform/formatters/consensus_formatter.rb +35 -0
  33. data/lib/bioinform/formatters/motif_formatter.rb +69 -0
  34. data/lib/bioinform/formatters/pretty_matrix_formatter.rb +36 -0
  35. data/lib/bioinform/formatters/transfac_formatter.rb +29 -37
  36. data/lib/bioinform/parsers.rb +1 -8
  37. data/lib/bioinform/parsers/matrix_parser.rb +44 -36
  38. data/lib/bioinform/parsers/motif_splitter.rb +45 -0
  39. data/lib/bioinform/support.rb +46 -14
  40. data/lib/bioinform/support/strip_doc.rb +1 -1
  41. data/lib/bioinform/version.rb +1 -1
  42. data/spec/alphabet_spec.rb +79 -0
  43. data/spec/background_spec.rb +57 -0
  44. data/spec/cli/cli_spec.rb +6 -6
  45. data/spec/cli/convert_motif_spec.rb +88 -88
  46. data/spec/cli/data/pcm2pwm/KLF4_f2.pwm.result +9 -9
  47. data/spec/cli/data/pcm2pwm/SP1_f1.pwm.result +11 -11
  48. data/spec/cli/pcm2pwm_spec.rb +22 -23
  49. data/spec/cli/shared_examples/convert_motif/motif_list_empty.rb +1 -1
  50. data/spec/cli/shared_examples/convert_motif/several_motifs_specified.rb +1 -1
  51. data/spec/cli/shared_examples/convert_motif/single_motif_specified.rb +5 -5
  52. data/spec/cli/shared_examples/convert_motif/yield_help_string.rb +2 -2
  53. data/spec/cli/shared_examples/convert_motif/yield_motif_conversion_error.rb +3 -3
  54. data/spec/cli/split_motifs_spec.rb +6 -21
  55. data/spec/converters/pcm2ppm_converter_spec.rb +32 -0
  56. data/spec/converters/pcm2pwm_converter_spec.rb +71 -0
  57. data/spec/converters/ppm2pcm_converter_spec.rb +32 -0
  58. data/spec/converters/pwm2iupac_pwm_converter_spec.rb +65 -0
  59. data/spec/converters/pwm2pcm_converter_spec.rb +57 -0
  60. data/spec/data_models/named_model_spec.rb +41 -0
  61. data/spec/data_models/pcm_spec.rb +114 -45
  62. data/spec/data_models/pm_spec.rb +132 -333
  63. data/spec/data_models/ppm_spec.rb +47 -44
  64. data/spec/data_models/pwm_spec.rb +85 -77
  65. data/spec/fabricators/motif_formats_fabricator.rb +116 -116
  66. data/spec/formatters/consensus_formatter_spec.rb +26 -0
  67. data/spec/formatters/raw_formatter_spec.rb +169 -0
  68. data/spec/parsers/matrix_parser_spec.rb +216 -0
  69. data/spec/parsers/motif_splitter_spec.rb +87 -0
  70. data/spec/spec_helper.rb +2 -2
  71. data/spec/spec_helper_source.rb +25 -5
  72. data/spec/support_spec.rb +31 -0
  73. metadata +43 -124
  74. data/bin/merge_into_collection +0 -4
  75. data/lib/bioinform/cli/merge_into_collection.rb +0 -80
  76. data/lib/bioinform/conversion_algorithms/ppm2pwm_converter.rb +0 -0
  77. data/lib/bioinform/data_models/collection.rb +0 -75
  78. data/lib/bioinform/data_models/motif.rb +0 -56
  79. data/lib/bioinform/formatters/raw_formatter.rb +0 -41
  80. data/lib/bioinform/parsers/jaspar_parser.rb +0 -35
  81. data/lib/bioinform/parsers/parser.rb +0 -92
  82. data/lib/bioinform/parsers/splittable_parser.rb +0 -57
  83. data/lib/bioinform/parsers/string_fantom_parser.rb +0 -35
  84. data/lib/bioinform/parsers/string_parser.rb +0 -72
  85. data/lib/bioinform/parsers/trivial_parser.rb +0 -34
  86. data/lib/bioinform/parsers/yaml_parser.rb +0 -35
  87. data/lib/bioinform/support/advanced_scan.rb +0 -8
  88. data/lib/bioinform/support/array_product.rb +0 -6
  89. data/lib/bioinform/support/array_zip.rb +0 -6
  90. data/lib/bioinform/support/collect_hash.rb +0 -7
  91. data/lib/bioinform/support/deep_dup.rb +0 -5
  92. data/lib/bioinform/support/delete_many.rb +0 -14
  93. data/lib/bioinform/support/inverf.rb +0 -13
  94. data/lib/bioinform/support/multiline_squish.rb +0 -6
  95. data/lib/bioinform/support/parameters.rb +0 -28
  96. data/lib/bioinform/support/partial_sums.rb +0 -16
  97. data/lib/bioinform/support/same_by.rb +0 -12
  98. data/lib/bioinform/support/third_part/active_support/core_ext/array/extract_options.rb +0 -29
  99. data/lib/bioinform/support/third_part/active_support/core_ext/hash/indifferent_access.rb +0 -23
  100. data/lib/bioinform/support/third_part/active_support/core_ext/hash/keys.rb +0 -54
  101. data/lib/bioinform/support/third_part/active_support/core_ext/module/attribute_accessors.rb +0 -64
  102. data/lib/bioinform/support/third_part/active_support/core_ext/object/try.rb +0 -57
  103. data/lib/bioinform/support/third_part/active_support/core_ext/string/access.rb +0 -99
  104. data/lib/bioinform/support/third_part/active_support/core_ext/string/behavior.rb +0 -6
  105. data/lib/bioinform/support/third_part/active_support/core_ext/string/filters.rb +0 -49
  106. data/lib/bioinform/support/third_part/active_support/core_ext/string/multibyte.rb +0 -72
  107. data/lib/bioinform/support/third_part/active_support/hash_with_indifferent_access.rb +0 -181
  108. data/lib/bioinform/support/third_part/active_support/multibyte.rb +0 -44
  109. data/lib/bioinform/support/third_part/active_support/multibyte/chars.rb +0 -476
  110. data/lib/bioinform/support/third_part/active_support/multibyte/exceptions.rb +0 -8
  111. data/lib/bioinform/support/third_part/active_support/multibyte/unicode.rb +0 -393
  112. data/lib/bioinform/support/third_part/active_support/multibyte/utils.rb +0 -60
  113. data/spec/cli/data/merge_into_collection/GABPA_f1.pwm +0 -14
  114. data/spec/cli/data/merge_into_collection/KLF4_f2.pwm +0 -11
  115. data/spec/cli/data/merge_into_collection/SP1_f1.pwm +0 -12
  116. data/spec/cli/data/merge_into_collection/collection.txt.result +0 -40
  117. data/spec/cli/data/merge_into_collection/collection.yaml.result +0 -188
  118. data/spec/cli/data/merge_into_collection/collection_pwm.yaml.result +0 -188
  119. data/spec/cli/data/merge_into_collection/pwm_folder/GABPA_f1.pwm +0 -14
  120. data/spec/cli/data/merge_into_collection/pwm_folder/KLF4_f2.pwm +0 -11
  121. data/spec/cli/data/merge_into_collection/pwm_folder/SP1_f1.pwm +0 -12
  122. data/spec/cli/data/split_motifs/collection.yaml +0 -188
  123. data/spec/cli/merge_into_collection_spec.rb +0 -100
  124. data/spec/data_models/collection_spec.rb +0 -98
  125. data/spec/data_models/motif_spec.rb +0 -224
  126. data/spec/fabricators/collection_fabricator.rb +0 -8
  127. data/spec/fabricators/motif_fabricator.rb +0 -33
  128. data/spec/fabricators/pcm_fabricator.rb +0 -25
  129. data/spec/fabricators/pm_fabricator.rb +0 -52
  130. data/spec/fabricators/ppm_fabricator.rb +0 -14
  131. data/spec/fabricators/pwm_fabricator.rb +0 -16
  132. data/spec/parsers/parser_spec.rb +0 -152
  133. data/spec/parsers/string_fantom_parser_spec.rb +0 -70
  134. data/spec/parsers/string_parser_spec.rb +0 -77
  135. data/spec/parsers/trivial_parser_spec.rb +0 -64
  136. data/spec/parsers/yaml_parser_spec.rb +0 -50
  137. data/spec/support/advanced_scan_spec.rb +0 -32
  138. data/spec/support/array_product_spec.rb +0 -15
  139. data/spec/support/array_zip_spec.rb +0 -15
  140. data/spec/support/collect_hash_spec.rb +0 -15
  141. data/spec/support/delete_many_spec.rb +0 -44
  142. data/spec/support/inverf_spec.rb +0 -19
  143. data/spec/support/multiline_squish_spec.rb +0 -25
  144. data/spec/support/partial_sums_spec.rb +0 -30
  145. data/spec/support/same_by_spec.rb +0 -36
@@ -1,64 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/parsers/parser'
3
- require_relative '../../lib/bioinform/data_models/collection'
4
-
5
- module Bioinform
6
- describe TrivialParser do
7
- context '.new' do
8
- it 'should take the only input argument' do
9
- TrivialParser.instance_method(:initialize).arity.should == 1
10
- end
11
- end
12
-
13
- context '#parse!' do
14
- it 'should return OpenStruct based on input of that was passed to initialize when input is a Hash' do
15
- TrivialParser.new(matrix: 'stub matrix', name: 'stub name').parse!.should == OpenStruct.new(matrix: 'stub matrix', name: 'stub name')
16
- end
17
-
18
- it 'should return OpenStruct based on input of that was passed to initialize when input is a OpenStruct' do
19
- TrivialParser.new(OpenStruct.new(matrix: 'stub matrix', name: 'stub name')).parse!.should == OpenStruct.new(matrix: 'stub matrix', name: 'stub name')
20
- end
21
- end
22
-
23
- context '.split_on_motifs' do
24
- it 'should be able to get a single PM' do
25
- TrivialParser.split_on_motifs({matrix: [[1,2,3,4],[5,6,7,8]], name: 'Name'}, PM).should == [ PM.new(matrix: [[1,2,3,4],[5,6,7,8]], name:'Name') ]
26
- end
27
- end
28
-
29
- it 'can be used to create PM with {matrix: ..., name: ...} form' do
30
- pm = PM.new({matrix: [[1,2,3,4],[5,6,7,8]], name: 'Name'}, TrivialParser)
31
- pm.matrix.should == [[1,2,3,4],[5,6,7,8]]
32
- pm.name.should == 'Name'
33
- end
34
-
35
- it 'can be used to create PM from PM (make copy)' do
36
- pm = Fabricate(:pm)
37
- pm_copy = PM.new(pm, TrivialParser)
38
- pm_copy.should == pm
39
- end
40
- end
41
-
42
- describe TrivialCollectionParser do
43
- let(:collection){ Fabricate(:three_elements_collection) }
44
- let(:pm_1){ Fabricate(:pm_1) }
45
- let(:pm_2){ Fabricate(:pm_2) }
46
- let(:pm_3){ Fabricate(:pm_3) }
47
-
48
- describe '#parse!' do
49
- it 'can be used to obtain PMs from Collection' do
50
- @parser = TrivialCollectionParser.new(collection)
51
- @parser.parse!.should == pm_1
52
- @parser.parse!.should == pm_2
53
- @parser.parse!.should == pm_3
54
- expect{ @parser.parse! }.to raise_error
55
- end
56
- end
57
-
58
- describe '.split_on_motifs' do
59
- it 'should be able to split collection into PMs' do
60
- TrivialCollectionParser.split_on_motifs(collection).should == [pm_1, pm_2, pm_3]
61
- end
62
- end
63
- end
64
- end
@@ -1,50 +0,0 @@
1
- require 'yaml'
2
- require_relative '../spec_helper'
3
- require_relative '../../lib/bioinform/parsers/yaml_parser'
4
- require_relative '../../lib/bioinform/data_models/collection'
5
-
6
- module Bioinform
7
- describe YAMLParser do
8
- context '#parse!' do
9
- it 'should return PM that was encoded in YAML format' do
10
- pm = Fabricate(:pm)
11
- parser = YAMLParser.new(pm.to_yaml)
12
- parser.parse!.should == pm
13
- end
14
- end
15
- it 'can be used to create PM from yaml-string' do
16
- pm = Fabricate(:pm)
17
- pm_copy = PM.new(pm.to_yaml, YAMLParser)
18
- pm_copy.should == pm
19
- end
20
-
21
- context '::split_on_motifs' do
22
- it 'should be able to get a single PM' do
23
- pm = Fabricate(:pm)
24
- YAMLParser.split_on_motifs(pm.to_yaml, PM).should == [ pm ]
25
- end
26
- end
27
- end
28
-
29
- describe YAMLCollectionParser do
30
- let(:yamled_collection){ Fabricate(:three_elements_collection).to_yaml }
31
- let(:pm_1){ Fabricate(:pm_1) }
32
- let(:pm_2){ Fabricate(:pm_2) }
33
- let(:pm_3){ Fabricate(:pm_3) }
34
-
35
- context '::split_on_motifs' do
36
- it 'should be able to split yamled collection into PMs' do
37
- YAMLCollectionParser.split_on_motifs(yamled_collection).should == [pm_1, pm_2, pm_3]
38
- end
39
- end
40
- context '#parse!' do
41
- it 'should return PMs which were in encoded YAML format' do
42
- @parser = YAMLCollectionParser.new(yamled_collection)
43
- @parser.parse!.should == pm_1
44
- @parser.parse!.should == pm_2
45
- @parser.parse!.should == pm_3
46
- expect{ @parser.parse! }.to raise_error
47
- end
48
- end
49
- end
50
- end
@@ -1,32 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/support/advanced_scan'
3
-
4
- describe StringScanner do
5
- context '#advanced_scan' do
6
- before do
7
- @scanner = StringScanner.new('abcde fghIJKLmnop')
8
- end
9
- it 'should return nil if text doesn\'t match. Pointer should not move' do
10
- @scanner.advanced_scan(/\s\s\s/).should be_nil
11
- @scanner.pos.should == 0
12
- end
13
- it 'should return MatchData if string Matches. Pointer should move' do
14
- @scanner.advanced_scan(/\w\w\w/).should be_kind_of MatchData
15
- @scanner.pos.should == 3
16
- end
17
- it 'should return have the same groups as regexp has' do
18
- result = @scanner.advanced_scan(/(\w+)(\s+)([a-z]+)([A-Z]+)/)
19
- result[0].should == 'abcde fghIJKL'
20
- result[1].should == 'abcde'
21
- result[2].should == ' '
22
- result[3].should == 'fgh'
23
- result[4].should == 'IJKL'
24
- end
25
- it 'should return have the same named groups as regexp has' do
26
- result = @scanner.advanced_scan(/(\w+)(\s+)(?<word_downcase>[a-z]+)(?<word_upcase>[A-Z]+)/)
27
- result[0].should == 'abcde fghIJKL'
28
- result[:word_downcase].should == 'fgh'
29
- result[:word_upcase].should == 'IJKL'
30
- end
31
- end
32
- end
@@ -1,15 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/support/array_product'
3
-
4
- describe Array do
5
- context '::product' do
6
- it 'should take any number of arrays and product them as if #product was made to first and others' do
7
- Array.product([1,2,3]).should == [1,2,3].product()
8
- Array.product([1,2,3],[4,5,6]).should == [1,2,3].product([4,5,6])
9
- Array.product([1,2,3],[4,5,6],[7,8,9]).should == [1,2,3].product([4,5,6],[7,8,9])
10
- end
11
- it 'should return empty array if no arrays\'re given' do
12
- Array.product().should == []
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/support/array_zip'
3
-
4
- describe Array do
5
- context '::zip' do
6
- it 'should take any number of arrays and zip them as if #zip was made to first and others' do
7
- Array.zip([1,2,3]).should == [1,2,3].zip()
8
- Array.zip([1,2,3],[4,5,6]).should == [1,2,3].zip([4,5,6])
9
- Array.zip([1,2,3],[4,5,6],[7,8,9]).should == [1,2,3].zip([4,5,6],[7,8,9])
10
- end
11
- it 'should return empty array if no arrays\'re given' do
12
- Array.zip().should == []
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/support/collect_hash'
3
-
4
- describe Enumerable do
5
- # %w{A C G T}.collect_hash{|k| [k*2, k*3] }
6
- # # ==> {"AA" => "AAA", "CC" => "CCC", "GG" => "GGG", "TT" => "TTT"}
7
- context '#collect_hash' do
8
- it 'should take a block and create a hash from collected [k,v] pairs' do
9
- %w{A C G T}.collect_hash{|k| [k*2, k*3] }.should == {"AA" => "AAA", "CC" => "CCC", "GG" => "GGG", "TT" => "TTT"}
10
- end
11
- it 'should create a hash from yielded [k,v] pairs if block not given' do
12
- %w{A C G T}.each_with_index.collect_hash.should == {"A" => 0, "C" => 1, "G" => 2, "T" => 3}
13
- end
14
- end
15
- end
@@ -1,44 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/support/delete_many'
3
-
4
- describe Array do
5
- before :each do
6
- @arr = %w{a b c d e f g h i j b b}
7
- end
8
- describe '#delete_at_many' do
9
- it 'should delete elements at specified indices when indices in ascending order' do
10
- @arr.delete_at_many(1,3,7)
11
- @arr.should == %w{a c e f g i j b b}
12
- end
13
- it 'should delete elements at specified indices when indices in descending order' do
14
- @arr.delete_at_many(7,3,1)
15
- @arr.should == %w{a c e f g i j b b}
16
- end
17
- it 'should delete elements at specified indices when indices in arbitrary order' do
18
- @arr.delete_at_many(3,1,7)
19
- @arr.should == %w{a c e f g i j b b}
20
- end
21
- it 'should delete at each index once' do
22
- @arr.delete_at_many(0,0,0,2,0)
23
- @arr.should == %w{b d e f g h i j b b}
24
- end
25
- end
26
- describe '#delete_many' do
27
- it 'should delete multiple elements with specified values' do
28
- @arr.delete_many('b', 'd', 'h', 'b')
29
- @arr.should == %w{a c e f g i j}
30
- end
31
- end
32
- end
33
-
34
- describe Hash do
35
- before :each do
36
- @arr = {A: 3, T: 6, G: 4, C: 5}
37
- end
38
- describe '#delete_many' do
39
- it 'should delete specified keys' do
40
- @arr.delete_many(:T, :C, :F, :T, :T)
41
- @arr.should == {A: 3, G: 4}
42
- end
43
- end
44
- end
@@ -1,19 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/support/inverf'
3
-
4
- describe 'Math#inverf' do
5
- it 'should be erf(inverf(x)) == x' do
6
- rng = (-0.9..0.9).step(0.1)
7
- arr = rng.to_a
8
- arr2 = rng.map{|x| Math.inverf(x)}.map{|x| Math.erf(x)}
9
- delta = arr.each_index.map{|i| (arr[i] - arr2[i]).abs }
10
- delta.each{|el| el.should <= 0.001}
11
- end
12
- it 'should be erf(inverf(x)) == x' do
13
- rng = (-5..5).step(1)
14
- arr = rng.to_a
15
- arr2 = rng.map{|x| Math.erf(x)}.map{|x| Math.inverf(x)}
16
- delta = arr.each_index.map{|i| (arr[i] - arr2[i]).abs }
17
- delta.each{|el| el.should <= 0.01}
18
- end
19
- end
@@ -1,25 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/support/multiline_squish'
3
-
4
- describe String do
5
- describe '#multiline_squish' do
6
- it 'should replace multiple spaces with one space' do
7
- "abc def ghi\n jk lmn".multiline_squish.should == "abc def ghi\njk lmn"
8
- end
9
- it 'should replace tabs with a space' do
10
- "abc\tdef ghi \t jk".multiline_squish.should == 'abc def ghi jk'
11
- end
12
- it 'should replace \r\n with \n' do
13
- "abc def ghi\r\njk lmn".multiline_squish.should == "abc def ghi\njk lmn"
14
- end
15
- it 'should preserve rows pagination' do
16
- "abc def ghi\njk lmn".multiline_squish.should == "abc def ghi\njk lmn"
17
- end
18
- it 'should preserve empty lines in the middle of text' do
19
- "abc def\n\nghi\n \t \njk lmn \n\n\n zzz".multiline_squish.should == "abc def\n\nghi\n\njk lmn\n\n\nzzz"
20
- end
21
- it 'should drop empty lines at begin and at end of string' do
22
- "\n \t\n\nabc def\n\nghi\n \t \njk lmn \n\n\n zzz\n\n \t \n".multiline_squish.should == "abc def\n\nghi\n\njk lmn\n\n\nzzz"
23
- end
24
- end
25
- end
@@ -1,30 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/support/partial_sums'
3
-
4
- describe 'Array#partial_sums' do
5
- context 'when no initial value given' do
6
- it 'should return an array of the same size with partial sums of elements 0..ind inclusive with float elements' do
7
- [2,3,4,5].partial_sums.should == [2, 5, 9, 14]
8
- [2,3,4,5].partial_sums.last.should be_kind_of(Float)
9
- end
10
- end
11
- it 'should start counting from argument when it\'s given. Type of values depends on type of initial value' do
12
- [2,3,4,5].partial_sums(100).should == [102,105,109,114]
13
- [2,3,4,5].partial_sums(100).last.should be_kind_of(Integer)
14
- end
15
- end
16
-
17
- {1 => 5, 4 => 3, 3 => 2}.partial_sums == {1=>5, 3=>7, 4=>10}
18
-
19
- describe 'Hash#partial_sums' do
20
- context 'when no initial value given' do
21
- it 'should return a hash with float values of the same size with partial sums of elements that has keys <= than argument' do
22
- {1 => 5, 4 => 3, 3 => 2}.partial_sums.should == {1=>5, 3=>7, 4=>10}
23
- {1 => 5, 4 => 3, 3 => 2}.partial_sums.values.last.should be_kind_of(Float)
24
- end
25
- end
26
- it 'should start counting from argument when it\'s given. Type of values depends on type of initial value' do
27
- {1 => 5, 4 => 3, 3 => 2}.partial_sums(100).should == {1=>105, 3=>107, 4=>110}
28
- {1 => 5, 4 => 3, 3 => 2}.partial_sums(100).values.last.should be_kind_of(Integer)
29
- end
30
- end
@@ -1,36 +0,0 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/support/same_by'
3
-
4
- describe Enumerable do
5
- describe '#same_by?' do
6
- it 'should be work with both hashes and arrays' do
7
- ['a','b','c'].same_by?{|k| k.length}
8
- {'a'=>13,'b'=>12,'c'=>14}.same_by?{|k,v| v < 20}
9
- end
10
- it 'should be true for empty collections' do
11
- [].same_by?(&:length).should be_true
12
- [].same_by?.should be_true
13
- end
14
- context 'without block' do
15
- it 'should compare if all elements of collection are the same' do
16
- %w{cat cat cat}.same_by?.should be_true
17
- %w{cat dog rat}.same_by?.should be_false
18
- end
19
- end
20
- context 'with a block' do
21
- it 'should compare enumerables by a value of block' do
22
- %w{cat dog rat}.same_by?(&:length).should be_true
23
- %w{cat dog rabbit}.same_by?(&:length).should be_false
24
- end
25
- it 'should be true if all elements are true' do
26
- [4,8,2,2].same_by?(&:even?).should be_true
27
- end
28
- it 'should be true if all elements are false' do
29
- [1,3,9,7].same_by?(&:even?).should be_true
30
- end
31
- it 'should be false if some elements are true and some are false' do
32
- [1,8,3,2].same_by?(&:even?).should be_false
33
- end
34
- end
35
- end
36
- end