tins 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  .*.sw[pon]
2
2
  .rvmrc
3
3
  Gemfile.lock
4
+ coverage
4
5
  pkg
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ GemHadar do
11
11
  description 'All the stuff that isn\'t good/big enough for a real library.'
12
12
  test_dir 'tests'
13
13
  test_files.concat Dir["#{test_dir}/*_test.rb"]
14
- ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.rvmrc'
14
+ ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.rvmrc', 'coverage'
15
15
  readme 'README.rdoc'
16
16
  development_dependency 'test-unit', '~>2.3'
17
17
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.4
1
+ 0.3.5
data/lib/tins/null.rb CHANGED
@@ -28,7 +28,7 @@ module Tins
28
28
  end
29
29
  end
30
30
 
31
- NULL = Class.new do
31
+ NULL = Class.new(Module) do
32
32
  include Tins::Null
33
33
  end.new.freeze
34
34
  end
data/lib/tins/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Tins
2
2
  # Tins version
3
- VERSION = '0.3.4'
3
+ VERSION = '0.3.5'
4
4
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/lib/tins/xt.rb CHANGED
@@ -23,4 +23,5 @@ module Tins
23
23
  require 'tins/xt/string'
24
24
  require 'tins/xt/file_binary'
25
25
  require 'tins/xt/require_maybe'
26
+ require 'tins/xt/partial_application'
26
27
  end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+ require 'tins'
3
+
4
+ module Tins
5
+ class BijectionTest < Test::Unit::TestCase
6
+ def test_bijection
7
+ assert_equal [ [ 1, 2 ], [ 3, 4 ] ], Tins::Bijection[ 1, 2, 3, 4 ].to_a.sort
8
+ assert_raise(ArgumentError) do
9
+ Tins::Bijection[1,2,3]
10
+ end
11
+ assert_raise(ArgumentError) do
12
+ Tins::Bijection[1,2,3,2]
13
+ end
14
+ assert_raise(ArgumentError) do
15
+ Tins::Bijection[1,2,1,3]
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+ require 'tins/xt'
3
+ require 'set'
4
+
5
+ module Tins
6
+ class BlankFullTest < Test::Unit::TestCase
7
+
8
+ def test_blank
9
+ assert !true.blank?
10
+ assert false.blank?
11
+ assert nil.blank?
12
+ assert [].blank?
13
+ assert ![23].blank?
14
+ assert Set[].blank?
15
+ assert !Set[23].blank?
16
+ assert({}.blank?)
17
+ assert !{ :foo => 23 }.blank?
18
+ assert "".blank?
19
+ assert " ".blank?
20
+ assert !"foo".blank?
21
+ end
22
+
23
+ def test_full
24
+ assert_equal true, true.full?
25
+ assert_nil false.full?
26
+ assert_nil nil.full?
27
+ assert_nil [].full?
28
+ assert_equal [ 23 ], [ 23 ].full?
29
+ assert_nil Set[].full?
30
+ assert_equal Set[23], Set[23].full?
31
+ assert_nil({}.full?)
32
+ assert_equal({ :foo => 23 }, { :foo => 23 }.full?)
33
+ assert_nil "".full?
34
+ assert_nil " ".full?
35
+ assert_equal "foo", "foo".full?
36
+ assert_nil " ".full?(&:size)
37
+ assert_equal 3, "foo".full?(&:size)
38
+ assert_nil " ".full?(&:size)
39
+ assert_equal 3, "foo".full?(&:size)
40
+ assert_nil " ".full?(:size)
41
+ assert_equal 3, "foo".full?(:size)
42
+ assert_nil " ".full?(:size)
43
+ assert_equal 3, "foo".full?(:size)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+ require 'tins/xt'
3
+
4
+ module Tins
5
+ class CountByTest < Test::Unit::TestCase
6
+
7
+ def test_count_by
8
+ assert_equal 0, [].count_by { |x| x % 2 == 0 }
9
+ assert_equal 0, [ 1 ].count_by { |x| x % 2 == 0 }
10
+ assert_equal 1, [ 1 ].count_by { |x| x % 2 == 1 }
11
+ assert_equal 1, [ 1, 2 ].count_by { |x| x % 2 == 0 }
12
+ assert_equal 1, [ 1, 2 ].count_by { |x| x % 2 == 1 }
13
+ assert_equal 2, [ 1, 2, 3, 4, 5 ].count_by { |x| x % 2 == 0 }
14
+ assert_equal 3, [ 1, 2, 3, 4, 5 ].count_by { |x| x % 2 == 1 }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+ require 'tins/xt'
3
+
4
+ module Tins
5
+ class DeepDupTest < Test::Unit::TestCase
6
+ def test_deep_dup
7
+ a = [1,2,3]
8
+ assert_equal a, a.deep_dup
9
+ assert_not_same a, a.deep_dup
10
+ end
11
+
12
+ def test_deep_dup_proc
13
+ f = lambda { |x| 2 * x }
14
+ g = f.deep_dup
15
+ assert_equal f[3], g[3]
16
+ assert_equal f, g
17
+ assert_same f, g
18
+ end
19
+ end
20
+ end
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
  require 'tempfile'
3
- require 'tins/xt/file_binary'
3
+ require 'tins/xt'
4
4
 
5
5
  module Tins
6
6
  class TinsFileBinaryTest < Test::Unit::TestCase
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+ require 'tins'
3
+
4
+ module Tins
5
+ class GeneratorTest < Test::Unit::TestCase
6
+ def setup
7
+ @numeric = [ 1, 2, 3 ]
8
+ @string = %w[a b c]
9
+ @chars = 'abc'
10
+ end
11
+
12
+ def test_generator
13
+ g = Tins::Generator[@numeric, @string]
14
+ assert_equal 2, g.size
15
+ g.add_dimension(@chars, :each_byte)
16
+ assert_equal 3, g.size
17
+ assert_equal\
18
+ [[1, "a", 97],
19
+ [1, "a", 98],
20
+ [1, "a", 99],
21
+ [1, "b", 97],
22
+ [1, "b", 98],
23
+ [1, "b", 99],
24
+ [1, "c", 97],
25
+ [1, "c", 98],
26
+ [1, "c", 99],
27
+ [2, "a", 97],
28
+ [2, "a", 98],
29
+ [2, "a", 99],
30
+ [2, "b", 97],
31
+ [2, "b", 98],
32
+ [2, "b", 99],
33
+ [2, "c", 97],
34
+ [2, "c", 98],
35
+ [2, "c", 99],
36
+ [3, "a", 97],
37
+ [3, "a", 98],
38
+ [3, "a", 99],
39
+ [3, "b", 97],
40
+ [3, "b", 98],
41
+ [3, "b", 99],
42
+ [3, "c", 97],
43
+ [3, "c", 98],
44
+ [3, "c", 99]], g.to_a
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+ require 'tins'
3
+
4
+ module Tins
5
+ class HashSymbolizeKeysRecursiveTest < Test::Unit::TestCase
6
+ require 'tins/xt/hash_symbolize_keys_recursive'
7
+
8
+ def test_symbolize
9
+ hash = {
10
+ 'key' => [
11
+ {
12
+ 'key' => {
13
+ 'key' => true
14
+ }
15
+ }
16
+ ],
17
+ }
18
+ hash2 = hash.symbolize_keys_recursive
19
+ assert hash2[:key][0][:key][:key]
20
+ hash.symbolize_keys_recursive!
21
+ assert hash[:key][0][:key][:key]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+ require 'tins/xt'
3
+
4
+ module Tins
5
+ class HashUnionTest < Test::Unit::TestCase
6
+
7
+ class HashLike1
8
+ def to_hash
9
+ { 'foo' => true }
10
+ end
11
+ end
12
+
13
+ class HashLike2
14
+ def to_h
15
+ { 'foo' => true }
16
+ end
17
+ end
18
+
19
+ def test_union
20
+ defaults = { 'foo' => true, 'bar' => false, 'quux' => nil }
21
+ hash = { 'foo' => false }
22
+ assert_equal [ ['bar', false], ['foo', false], ['quux', nil] ],
23
+ (hash | defaults).sort
24
+ hash |= defaults
25
+ assert_equal [ ['bar', false], ['foo', false], ['quux', nil] ],
26
+ hash.sort
27
+ hash = { 'foo' => false }
28
+ hash |= {
29
+ 'quux' => true,
30
+ 'baz' => 23,
31
+ } | defaults
32
+ assert_equal [ ['bar', false], [ 'baz', 23 ], ['foo', false],
33
+ ['quux', true] ],
34
+ hash.sort
35
+ end
36
+
37
+ def test_hash_conversion
38
+ assert_equal({ 'foo' => true }, { } | HashLike1.new)
39
+ assert_equal({ 'foo' => true }, { } | HashLike2.new)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+ require 'tins'
3
+
4
+ module Tins
5
+ class LimitedTest < Test::Unit::TestCase
6
+ class ::Array
7
+ include Tins::Shuffle
8
+ end
9
+
10
+ def test_limited
11
+ count = {}
12
+ limited = Tins::Limited.new(5)
13
+ 5.times do
14
+ limited.execute do
15
+ count[Thread.current] = true
16
+ sleep
17
+ end
18
+ end
19
+ until count.size >= 5
20
+ sleep 0.1
21
+ end
22
+ assert_equal 5, count.keys.uniq.size
23
+ end
24
+ end
25
+ end
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
  require 'tins'
3
3
 
4
4
  module Tins
5
- class TestTinsMemoize < Test::Unit::TestCase
5
+ class MemoizeTest < Test::Unit::TestCase
6
6
  class FooBar
7
7
  def foo(*a)
8
8
  @@foo ||= 0
@@ -0,0 +1,54 @@
1
+ require 'test_helper'
2
+ require 'tins'
3
+
4
+ module Tins
5
+ class MinimizeTest < Test::Unit::TestCase
6
+ class ::Array
7
+ include Tins::Minimize
8
+ end
9
+
10
+ def test_minimize
11
+ assert_equal [], [].minimize
12
+ assert_equal [ 1..1 ], [ 1 ].minimize
13
+ assert_equal [ 1..2 ], [ 1, 2 ].minimize
14
+ assert_equal [ 1..1, 7..7 ], [ 1, 7 ].minimize
15
+ assert_equal [ 1..3, 7..7, 11..14 ],
16
+ [ 1, 2, 3, 7, 11, 12, 13, 14 ].minimize
17
+ assert_equal [ 'A'..'C', 'G'..'G', 'K'..'M' ],
18
+ [ 'A', 'B', 'C', 'G', 'K', 'L', 'M' ].minimize
19
+ end
20
+
21
+ def test_minimize!
22
+ assert_equal [], [].minimize!
23
+ assert_equal [ 1..1 ], [ 1 ].minimize!
24
+ assert_equal [ 1..2 ], [ 1, 2 ].minimize!
25
+ assert_equal [ 1..1, 7..7 ], [ 1, 7 ].minimize!
26
+ assert_equal [ 1..3, 7..7, 11..14 ],
27
+ [ 1, 2, 3, 7, 11, 12, 13, 14 ].minimize!
28
+ assert_equal [ 'A'..'C', 'G'..'G', 'K'..'M' ],
29
+ [ 'A', 'B', 'C', 'G', 'K', 'L', 'M' ].minimize!
30
+ end
31
+
32
+ def test_unminimize
33
+ assert_equal [], [].unminimize
34
+ assert_equal [ 1 ], [ 1..1 ].unminimize
35
+ assert_equal [ 1, 2 ], [ 1..2 ].unminimize
36
+ assert_equal [ 1, 7 ], [ 1..1, 7..7 ].unminimize
37
+ assert_equal [ 1, 2, 3, 7, 11, 12, 13, 14 ],
38
+ [ 1..3, 7..7, 11..14 ].unminimize
39
+ assert_equal [ 'A', 'B', 'C', 'G', 'K', 'L', 'M' ],
40
+ [ 'A'..'C', 'G'..'G', 'K'..'M' ].unminimize
41
+ end
42
+
43
+ def test_unminimize!
44
+ assert_equal [], [].unminimize!
45
+ assert_equal [ 1 ], [ 1..1 ].unminimize!
46
+ assert_equal [ 1, 2 ], [ 1..2 ].unminimize!
47
+ assert_equal [ 1, 7 ], [ 1..1, 7..7 ].unminimize!
48
+ assert_equal [ 1, 2, 3, 7, 11, 12, 13, 14 ],
49
+ [ 1..3, 7..7, 11..14 ].unminimize!
50
+ assert_equal [ 'A', 'B', 'C', 'G', 'K', 'L', 'M' ],
51
+ [ 'A'..'C', 'G'..'G', 'K'..'M' ].unminimize!
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+ require 'tins'
3
+
4
+ module Tins
5
+ class ModuleGroupTest < Test::Unit::TestCase
6
+ MyClasses = Tins::ModuleGroup[ Array, String, Hash ]
7
+
8
+ def test_module_group
9
+ assert MyClasses === []
10
+ assert MyClasses === ""
11
+ assert MyClasses === {}
12
+ assert !(MyClasses === :nix)
13
+ case []
14
+ when MyClasses
15
+ assert true
16
+ when Array
17
+ assert false
18
+ end
19
+ case :nix
20
+ when MyClasses
21
+ assert false
22
+ when Array
23
+ assert false
24
+ when Symbol
25
+ assert true
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+ require 'tins/xt'
3
+
4
+ module Tins
5
+ class NamedTest < Test::Unit::TestCase
6
+
7
+ def test_named_simple
8
+ a = [ 1, 2, 3 ]
9
+ a.named(:plus1, :map) { |x| x + 1 }
10
+ assert_equal [ 2, 3, 4 ], a.plus1
11
+ Array.named(:odd, :select) { |x| x % 2 == 1 }
12
+ assert_equal [ 3 ], a.plus1.odd
13
+ end
14
+
15
+ if RUBY_VERSION >= '1.9'
16
+ def foo(x, y, &block)
17
+ block.call x * y
18
+ end
19
+
20
+ def test_more_complex
21
+ Object.named(:foo_with_block, :foo) do |z|
22
+ z ** 2
23
+ end
24
+ assert_equal foo(2, 3) { |z| z ** 2 }, foo_with_block(2, 3)
25
+ Object.named(:foo_23, :foo, 2, 3)
26
+ assert_equal foo(2, 3) { |z| z ** 2 }, foo_23 { |z| z ** 2 }
27
+ Object.named(:foo_2, :foo, 2)
28
+ assert_equal foo(2, 3) { |z| z ** 2 }, foo_2(3) { |z| z ** 2 }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+ require 'tins'
3
+
4
+ module Tins
5
+ class NullTest < Test::Unit::TestCase
6
+ require 'tins/xt/null'
7
+
8
+ def test_null
9
+ assert_equal NULL, NULL.foo
10
+ assert_equal NULL, NULL.foo.bar
11
+ assert_equal 'NULL', NULL.inspect
12
+ assert_equal '', NULL.to_s
13
+ assert_equal 1, Null(1)
14
+ assert_equal NULL, Null(nil)
15
+ assert_equal NULL, NULL::NULL
16
+ assert NULL.nil?
17
+ end
18
+ end
19
+ end