striuct 0.3.3 → 0.3.4
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 +35 -34
- data/.travis.yml +6 -6
- data/Gemfile +12 -12
- data/History.rdoc +279 -273
- data/LICENSE +21 -21
- data/Manifest.txt +91 -90
- data/README.ja.old.rdoc +297 -297
- data/README.md +128 -128
- data/Rakefile +11 -11
- data/benchmark/basics.rb +56 -56
- data/example/README.rb +44 -44
- data/example/example.old.rdoc +187 -187
- data/example/example1.rb +233 -233
- data/example/example2.rb +22 -22
- data/example/see_trace.rb +32 -32
- data/lib/striuct/classmethods/README.md +5 -5
- data/lib/striuct/classmethods/adjustment.rb +32 -32
- data/lib/striuct/classmethods/constructor.rb +63 -63
- data/lib/striuct/classmethods/default.rb +27 -27
- data/lib/striuct/classmethods/enum.rb +48 -48
- data/lib/striuct/classmethods/inner.rb +91 -91
- data/lib/striuct/classmethods/length.rb +14 -14
- data/lib/striuct/classmethods/macro.rb +144 -144
- data/lib/striuct/classmethods/named.rb +113 -113
- data/lib/striuct/classmethods/object.rb +54 -54
- data/lib/striuct/classmethods/prevent_conflicts.rb +89 -89
- data/lib/striuct/classmethods/requiremnets.rb +11 -11
- data/lib/striuct/classmethods/to_struct.rb +23 -25
- data/lib/striuct/classmethods/validation.rb +55 -55
- data/lib/striuct/classmethods.rb +1 -1
- data/lib/striuct/instancemethods/README.md +5 -5
- data/lib/striuct/instancemethods/assign.rb +30 -30
- data/lib/striuct/instancemethods/cast.rb +34 -34
- data/lib/striuct/instancemethods/compare.rb +30 -30
- data/lib/striuct/instancemethods/default.rb +13 -13
- data/lib/striuct/instancemethods/delegate_class_methods.rb +28 -28
- data/lib/striuct/instancemethods/enum.rb +103 -103
- data/lib/striuct/instancemethods/hashy.rb +121 -121
- data/lib/striuct/instancemethods/inner.rb +60 -60
- data/lib/striuct/instancemethods/keyvalidatable.rb +14 -14
- data/lib/striuct/instancemethods/lock.rb +61 -61
- data/lib/striuct/instancemethods/object.rb +52 -52
- data/lib/striuct/instancemethods/requirements.rb +14 -14
- data/lib/striuct/instancemethods/safety.rb +11 -11
- data/lib/striuct/instancemethods/subscript.rb +55 -55
- data/lib/striuct/instancemethods/validation.rb +29 -25
- data/lib/striuct/instancemethods/values.rb +57 -57
- data/lib/striuct/instancemethods.rb +1 -1
- data/lib/striuct/requirements.rb +5 -5
- data/lib/striuct/singleton_class.rb +66 -66
- data/lib/striuct/specificcontainer.rb +19 -19
- data/lib/striuct/structs.rb +7 -7
- data/lib/striuct/version.rb +5 -5
- data/lib/striuct.rb +13 -13
- data/striuct.gemspec +24 -24
- data/test/helper.rb +5 -5
- data/test/test_striuct-singleton_class-define.rb +19 -19
- data/test/test_striuct-subclass-class-cloning.rb +20 -20
- data/test/test_striuct-subclass-class-close.rb +36 -36
- data/test/test_striuct-subclass-class-constructor.rb +82 -82
- data/test/test_striuct-subclass-class-freeze.rb +36 -36
- data/test/test_striuct-subclass-class-inheritable.rb +57 -57
- data/test/test_striuct-subclass-class-macro.rb +13 -13
- data/test/test_striuct-subclass-class-safety_naming.rb +72 -72
- data/test/test_striuct-subclass-class-validation.rb +26 -26
- data/test/test_striuct-subclass-feature-alias_member.rb +53 -53
- data/test/test_striuct-subclass-feature-to_struct.rb +61 -25
- data/test/test_striuct-subclass-feature-validation_util.rb +57 -0
- data/test/test_striuct-subclass-instance-accessor.rb +137 -137
- data/test/test_striuct-subclass-instance-adjuster.rb +94 -94
- data/test/test_striuct-subclass-instance-assign.rb +30 -30
- data/test/test_striuct-subclass-instance-basic.rb +32 -32
- data/test/test_striuct-subclass-instance-cloning.rb +22 -22
- data/test/test_striuct-subclass-instance-compare.rb +51 -51
- data/test/test_striuct-subclass-instance-default_value.rb +128 -128
- data/test/test_striuct-subclass-instance-enum.rb +92 -92
- data/test/test_striuct-subclass-instance-freeze.rb +19 -19
- data/test/test_striuct-subclass-instance-hashlike.rb +153 -153
- data/test/test_striuct-subclass-instance-keyvalidatable.rb +24 -24
- data/test/test_striuct-subclass-instance-lock.rb +39 -39
- data/test/test_striuct-subclass-instance-to_s_family.rb +25 -25
- data/test/test_striuct-subclass-instance-validation_functional_condition.rb +50 -50
- data/test/test_striuct-subclass-instance-validation_inference.rb +50 -50
- data/test/test_striuct-subclass-instance-validation_specific_conditions.rb +247 -247
- data/test/test_striuct-subclass-instance-validation_with_getter.rb +33 -33
- data/test/test_striuct-subclass-instance_names.rb +18 -18
- data/test/test_striuct-version.rb +10 -10
- metadata +4 -2
@@ -1,52 +1,52 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
|
3
|
-
|
4
|
-
class Test_Striuct_Subclass_Instance_Compare < Test::Unit::TestCase
|
5
|
-
|
6
|
-
class User < Striuct.new
|
7
|
-
member :id, Integer
|
8
|
-
member :last_name, /\A\w+\z/
|
9
|
-
member :family_name, /\A\w+\z/
|
10
|
-
member :address, /\A((\w+) ?)+\z/
|
11
|
-
member :age, ->age{(20..140).include? age}
|
12
|
-
end
|
13
|
-
|
14
|
-
def setup
|
15
|
-
@user = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
|
16
|
-
@user2 = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_hash
|
20
|
-
assert_kind_of Integer, @user.hash
|
21
|
-
assert_equal @user.hash, @user2.hash
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_eql?
|
25
|
-
assert_equal true, @user.eql?(@user2)
|
26
|
-
assert_equal true, @user2.eql?(@user)
|
27
|
-
assert_equal false, @user.eql?(User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 31)
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_equal
|
31
|
-
user1 = User.new 11218, 'taro'
|
32
|
-
user2 = User.new 11218, 'taro'
|
33
|
-
assert_equal true, (user1 == user2)
|
34
|
-
user2.last_name = 'ichiro'
|
35
|
-
assert_equal false, (user1 == user2)
|
36
|
-
end
|
37
|
-
|
38
|
-
Sth = Striuct.new :foo, :bar, :hoge
|
39
|
-
|
40
|
-
def test_hashkeyable
|
41
|
-
sth1 = Sth[hoge: 7, foo: 8]
|
42
|
-
sth2 = Sth[hoge: 7, foo: 8]
|
43
|
-
assert_equal true, sth1.eql?(sth2)
|
44
|
-
assert_equal true, sth2.eql?(sth1)
|
45
|
-
assert_equal sth1.hash, sth2.hash
|
46
|
-
assert_equal true, {sth1 => 1}.has_key?(sth2)
|
47
|
-
assert_equal true, {sth2 => 1}.has_key?(sth1)
|
48
|
-
assert_equal 1, {sth1 => 1}[sth2]
|
49
|
-
assert_equal 1, {sth2 => 1}[sth1]
|
50
|
-
end
|
51
|
-
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
|
4
|
+
class Test_Striuct_Subclass_Instance_Compare < Test::Unit::TestCase
|
5
|
+
|
6
|
+
class User < Striuct.new
|
7
|
+
member :id, Integer
|
8
|
+
member :last_name, /\A\w+\z/
|
9
|
+
member :family_name, /\A\w+\z/
|
10
|
+
member :address, /\A((\w+) ?)+\z/
|
11
|
+
member :age, ->age{(20..140).include? age}
|
12
|
+
end
|
13
|
+
|
14
|
+
def setup
|
15
|
+
@user = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
|
16
|
+
@user2 = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_hash
|
20
|
+
assert_kind_of Integer, @user.hash
|
21
|
+
assert_equal @user.hash, @user2.hash
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_eql?
|
25
|
+
assert_equal true, @user.eql?(@user2)
|
26
|
+
assert_equal true, @user2.eql?(@user)
|
27
|
+
assert_equal false, @user.eql?(User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 31)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_equal
|
31
|
+
user1 = User.new 11218, 'taro'
|
32
|
+
user2 = User.new 11218, 'taro'
|
33
|
+
assert_equal true, (user1 == user2)
|
34
|
+
user2.last_name = 'ichiro'
|
35
|
+
assert_equal false, (user1 == user2)
|
36
|
+
end
|
37
|
+
|
38
|
+
Sth = Striuct.new :foo, :bar, :hoge
|
39
|
+
|
40
|
+
def test_hashkeyable
|
41
|
+
sth1 = Sth[hoge: 7, foo: 8]
|
42
|
+
sth2 = Sth[hoge: 7, foo: 8]
|
43
|
+
assert_equal true, sth1.eql?(sth2)
|
44
|
+
assert_equal true, sth2.eql?(sth1)
|
45
|
+
assert_equal sth1.hash, sth2.hash
|
46
|
+
assert_equal true, {sth1 => 1}.has_key?(sth2)
|
47
|
+
assert_equal true, {sth2 => 1}.has_key?(sth1)
|
48
|
+
assert_equal 1, {sth1 => 1}[sth2]
|
49
|
+
assert_equal 1, {sth2 => 1}[sth1]
|
50
|
+
end
|
51
|
+
|
52
52
|
end
|
@@ -1,129 +1,129 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
|
3
|
-
class Test_Striuct_Subclass_Instance_Default_Value < Test::Unit::TestCase
|
4
|
-
|
5
|
-
Sth = Striuct.new do
|
6
|
-
member :lank, OR(Bignum, Fixnum)
|
7
|
-
default :lank, 1
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_default
|
11
|
-
sth = Sth.new 2
|
12
|
-
assert_equal 2, sth.lank
|
13
|
-
sth = Sth.new
|
14
|
-
assert_equal 1, sth.lank
|
15
|
-
assert_equal true, sth.default?(:lank)
|
16
|
-
sth.lank = 2
|
17
|
-
assert_equal false, sth.default?(:lank)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_define_default
|
21
|
-
assert_raises NameError do
|
22
|
-
Sth.class_eval do
|
23
|
-
default :anything, 10
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
klass = Striuct.define do
|
28
|
-
member :lank2, Integer
|
29
|
-
default :lank2, '10'
|
30
|
-
end
|
31
|
-
|
32
|
-
assert_raises Validation::InvalidWritingError do
|
33
|
-
klass.new
|
34
|
-
end
|
35
|
-
|
36
|
-
scope = self
|
37
|
-
seef = nil
|
38
|
-
klass = Striuct.define do
|
39
|
-
member :lank, Integer
|
40
|
-
|
41
|
-
scope.assert_raises ArgumentError do
|
42
|
-
default :lank, &->own, name, exess{rand}
|
43
|
-
end
|
44
|
-
|
45
|
-
scope.assert_raises ArgumentError do
|
46
|
-
default :lank, '10', &->own, name{rand}
|
47
|
-
end
|
48
|
-
|
49
|
-
scope.assert_raises ArgumentError do
|
50
|
-
default :lank, '10', &->own{rand}
|
51
|
-
end
|
52
|
-
|
53
|
-
scope.assert_raises ArgumentError do
|
54
|
-
default :lank, '10', &->{rand}
|
55
|
-
end
|
56
|
-
|
57
|
-
default :lank, &->own, name{(seef = own); rand}
|
58
|
-
end
|
59
|
-
|
60
|
-
assert_raises Validation::InvalidWritingError do
|
61
|
-
klass.new
|
62
|
-
end
|
63
|
-
|
64
|
-
klass = Striuct.define do
|
65
|
-
member :lank, Integer
|
66
|
-
default :lank, &->own, name{(seef = own); 10 - name.length}
|
67
|
-
end
|
68
|
-
|
69
|
-
assert_equal 6, klass.new.lank
|
70
|
-
assert_equal seef, klass.new
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
class Test_Striuct_Subclass_Instance_DefaultValue_Under_MemberMacro < Test::Unit::TestCase
|
76
|
-
|
77
|
-
Sth = Striuct.new do
|
78
|
-
member :lank, OR(Bignum, Fixnum), default: 1
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_default
|
82
|
-
sth = Sth.new 2
|
83
|
-
assert_equal 2, sth.lank
|
84
|
-
sth = Sth.new
|
85
|
-
assert_equal 1, sth.lank
|
86
|
-
assert_equal true, sth.default?(:lank)
|
87
|
-
sth.lank = 2
|
88
|
-
assert_equal false, sth.default?(:lank)
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_define_default
|
92
|
-
assert_raises NameError do
|
93
|
-
Sth.class_eval do
|
94
|
-
default :anything, 10
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
klass = Striuct.define do
|
99
|
-
member :lank2, Integer, default: '10'
|
100
|
-
end
|
101
|
-
|
102
|
-
assert_raises Validation::InvalidWritingError do
|
103
|
-
klass.new
|
104
|
-
end
|
105
|
-
|
106
|
-
scope = self
|
107
|
-
seef = nil
|
108
|
-
klass = Striuct.define do
|
109
|
-
|
110
|
-
scope.assert_raises ArgumentError do
|
111
|
-
member :lank, Integer, default: '10', default_proc: ->own,name{rand}
|
112
|
-
end
|
113
|
-
|
114
|
-
member :lank, Integer, default_proc: ->own,name{(seef = own); rand}
|
115
|
-
end
|
116
|
-
|
117
|
-
assert_raises Validation::InvalidWritingError do
|
118
|
-
klass.new
|
119
|
-
end
|
120
|
-
|
121
|
-
klass = Striuct.define do
|
122
|
-
member :lank, Integer, default_proc: ->own,name{(seef = own); 10 - name.length}
|
123
|
-
end
|
124
|
-
|
125
|
-
assert_equal 6, klass.new.lank
|
126
|
-
assert_equal seef, klass.new
|
127
|
-
end
|
128
|
-
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class Test_Striuct_Subclass_Instance_Default_Value < Test::Unit::TestCase
|
4
|
+
|
5
|
+
Sth = Striuct.new do
|
6
|
+
member :lank, OR(Bignum, Fixnum)
|
7
|
+
default :lank, 1
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_default
|
11
|
+
sth = Sth.new 2
|
12
|
+
assert_equal 2, sth.lank
|
13
|
+
sth = Sth.new
|
14
|
+
assert_equal 1, sth.lank
|
15
|
+
assert_equal true, sth.default?(:lank)
|
16
|
+
sth.lank = 2
|
17
|
+
assert_equal false, sth.default?(:lank)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_define_default
|
21
|
+
assert_raises NameError do
|
22
|
+
Sth.class_eval do
|
23
|
+
default :anything, 10
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
klass = Striuct.define do
|
28
|
+
member :lank2, Integer
|
29
|
+
default :lank2, '10'
|
30
|
+
end
|
31
|
+
|
32
|
+
assert_raises Validation::InvalidWritingError do
|
33
|
+
klass.new
|
34
|
+
end
|
35
|
+
|
36
|
+
scope = self
|
37
|
+
seef = nil
|
38
|
+
klass = Striuct.define do
|
39
|
+
member :lank, Integer
|
40
|
+
|
41
|
+
scope.assert_raises ArgumentError do
|
42
|
+
default :lank, &->own, name, exess{rand}
|
43
|
+
end
|
44
|
+
|
45
|
+
scope.assert_raises ArgumentError do
|
46
|
+
default :lank, '10', &->own, name{rand}
|
47
|
+
end
|
48
|
+
|
49
|
+
scope.assert_raises ArgumentError do
|
50
|
+
default :lank, '10', &->own{rand}
|
51
|
+
end
|
52
|
+
|
53
|
+
scope.assert_raises ArgumentError do
|
54
|
+
default :lank, '10', &->{rand}
|
55
|
+
end
|
56
|
+
|
57
|
+
default :lank, &->own, name{(seef = own); rand}
|
58
|
+
end
|
59
|
+
|
60
|
+
assert_raises Validation::InvalidWritingError do
|
61
|
+
klass.new
|
62
|
+
end
|
63
|
+
|
64
|
+
klass = Striuct.define do
|
65
|
+
member :lank, Integer
|
66
|
+
default :lank, &->own, name{(seef = own); 10 - name.length}
|
67
|
+
end
|
68
|
+
|
69
|
+
assert_equal 6, klass.new.lank
|
70
|
+
assert_equal seef, klass.new
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
class Test_Striuct_Subclass_Instance_DefaultValue_Under_MemberMacro < Test::Unit::TestCase
|
76
|
+
|
77
|
+
Sth = Striuct.new do
|
78
|
+
member :lank, OR(Bignum, Fixnum), default: 1
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_default
|
82
|
+
sth = Sth.new 2
|
83
|
+
assert_equal 2, sth.lank
|
84
|
+
sth = Sth.new
|
85
|
+
assert_equal 1, sth.lank
|
86
|
+
assert_equal true, sth.default?(:lank)
|
87
|
+
sth.lank = 2
|
88
|
+
assert_equal false, sth.default?(:lank)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_define_default
|
92
|
+
assert_raises NameError do
|
93
|
+
Sth.class_eval do
|
94
|
+
default :anything, 10
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
klass = Striuct.define do
|
99
|
+
member :lank2, Integer, default: '10'
|
100
|
+
end
|
101
|
+
|
102
|
+
assert_raises Validation::InvalidWritingError do
|
103
|
+
klass.new
|
104
|
+
end
|
105
|
+
|
106
|
+
scope = self
|
107
|
+
seef = nil
|
108
|
+
klass = Striuct.define do
|
109
|
+
|
110
|
+
scope.assert_raises ArgumentError do
|
111
|
+
member :lank, Integer, default: '10', default_proc: ->own,name{rand}
|
112
|
+
end
|
113
|
+
|
114
|
+
member :lank, Integer, default_proc: ->own,name{(seef = own); rand}
|
115
|
+
end
|
116
|
+
|
117
|
+
assert_raises Validation::InvalidWritingError do
|
118
|
+
klass.new
|
119
|
+
end
|
120
|
+
|
121
|
+
klass = Striuct.define do
|
122
|
+
member :lank, Integer, default_proc: ->own,name{(seef = own); 10 - name.length}
|
123
|
+
end
|
124
|
+
|
125
|
+
assert_equal 6, klass.new.lank
|
126
|
+
assert_equal seef, klass.new
|
127
|
+
end
|
128
|
+
|
129
129
|
end
|
@@ -1,93 +1,93 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
|
3
|
-
|
4
|
-
class Test_Striuct_Subclass_Instance_Enum < Test::Unit::TestCase
|
5
|
-
|
6
|
-
class User < Striuct.new
|
7
|
-
member :id, Integer
|
8
|
-
member :last_name, /\A\w+\z/
|
9
|
-
member :family_name, /\A\w+\z/
|
10
|
-
member :address, /\A((\w+) ?)+\z/
|
11
|
-
member :age, ->age{(20..140).include? age}
|
12
|
-
end
|
13
|
-
|
14
|
-
def setup
|
15
|
-
@user = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
|
16
|
-
@user2 = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_each
|
20
|
-
assert_same @user, @user.each{}
|
21
|
-
assert_kind_of Enumerator, enum = @user.each
|
22
|
-
assert_equal enum.next, 9999
|
23
|
-
assert_equal enum.next, 'taro'
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_each_member
|
27
|
-
assert_same @user, @user.each_member{}
|
28
|
-
assert_kind_of Enumerator, enum = @user.each_member
|
29
|
-
assert_equal :id, enum.next
|
30
|
-
assert_equal :last_name, enum.next
|
31
|
-
assert_equal :family_name, enum.next
|
32
|
-
assert_equal :address, enum.next
|
33
|
-
assert_equal :age, enum.next
|
34
|
-
assert_raises StopIteration do
|
35
|
-
enum.next
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_each_index
|
40
|
-
assert_same @user, @user.each_index{}
|
41
|
-
assert_kind_of Enumerator, enum = @user.each_index
|
42
|
-
assert_equal 0, enum.next
|
43
|
-
assert_equal 1, enum.next
|
44
|
-
assert_equal 2, enum.next
|
45
|
-
assert_equal 3, enum.next
|
46
|
-
assert_equal 4, enum.next
|
47
|
-
assert_raises StopIteration do
|
48
|
-
enum.next
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_each_with_index
|
53
|
-
assert_same @user, @user.each_with_index{}
|
54
|
-
assert_kind_of Enumerator, @user.each_with_index
|
55
|
-
|
56
|
-
r = []
|
57
|
-
@user.each_with_index do |value, index|
|
58
|
-
r << [value, index]
|
59
|
-
end
|
60
|
-
|
61
|
-
assert_equal [@user.each_value.to_a, @user.each_index.to_a].transpose, r
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_each_member_with_index
|
65
|
-
assert_same @user, @user.each_member_with_index{}
|
66
|
-
assert_kind_of Enumerator, @user.each_member_with_index
|
67
|
-
|
68
|
-
r = []
|
69
|
-
@user.each_member_with_index do |name, index|
|
70
|
-
r << [name, index]
|
71
|
-
end
|
72
|
-
|
73
|
-
assert_equal [@user.each_key.to_a, @user.each_index.to_a].transpose, r
|
74
|
-
end
|
75
|
-
|
76
|
-
Sth = Striuct.define do
|
77
|
-
member :name
|
78
|
-
member :age
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_each_pair_with_index
|
82
|
-
sth = Sth.new 'a', 10
|
83
|
-
assert_same sth, sth.each_pair_with_index{}
|
84
|
-
|
85
|
-
enum = sth.each_pair_with_index
|
86
|
-
assert_equal [:name, 'a', 0], enum.next
|
87
|
-
assert_equal [:age, 10, 1], enum.next
|
88
|
-
assert_raises StopIteration do
|
89
|
-
enum.next
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
|
4
|
+
class Test_Striuct_Subclass_Instance_Enum < Test::Unit::TestCase
|
5
|
+
|
6
|
+
class User < Striuct.new
|
7
|
+
member :id, Integer
|
8
|
+
member :last_name, /\A\w+\z/
|
9
|
+
member :family_name, /\A\w+\z/
|
10
|
+
member :address, /\A((\w+) ?)+\z/
|
11
|
+
member :age, ->age{(20..140).include? age}
|
12
|
+
end
|
13
|
+
|
14
|
+
def setup
|
15
|
+
@user = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
|
16
|
+
@user2 = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_each
|
20
|
+
assert_same @user, @user.each{}
|
21
|
+
assert_kind_of Enumerator, enum = @user.each
|
22
|
+
assert_equal enum.next, 9999
|
23
|
+
assert_equal enum.next, 'taro'
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_each_member
|
27
|
+
assert_same @user, @user.each_member{}
|
28
|
+
assert_kind_of Enumerator, enum = @user.each_member
|
29
|
+
assert_equal :id, enum.next
|
30
|
+
assert_equal :last_name, enum.next
|
31
|
+
assert_equal :family_name, enum.next
|
32
|
+
assert_equal :address, enum.next
|
33
|
+
assert_equal :age, enum.next
|
34
|
+
assert_raises StopIteration do
|
35
|
+
enum.next
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_each_index
|
40
|
+
assert_same @user, @user.each_index{}
|
41
|
+
assert_kind_of Enumerator, enum = @user.each_index
|
42
|
+
assert_equal 0, enum.next
|
43
|
+
assert_equal 1, enum.next
|
44
|
+
assert_equal 2, enum.next
|
45
|
+
assert_equal 3, enum.next
|
46
|
+
assert_equal 4, enum.next
|
47
|
+
assert_raises StopIteration do
|
48
|
+
enum.next
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_each_with_index
|
53
|
+
assert_same @user, @user.each_with_index{}
|
54
|
+
assert_kind_of Enumerator, @user.each_with_index
|
55
|
+
|
56
|
+
r = []
|
57
|
+
@user.each_with_index do |value, index|
|
58
|
+
r << [value, index]
|
59
|
+
end
|
60
|
+
|
61
|
+
assert_equal [@user.each_value.to_a, @user.each_index.to_a].transpose, r
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_each_member_with_index
|
65
|
+
assert_same @user, @user.each_member_with_index{}
|
66
|
+
assert_kind_of Enumerator, @user.each_member_with_index
|
67
|
+
|
68
|
+
r = []
|
69
|
+
@user.each_member_with_index do |name, index|
|
70
|
+
r << [name, index]
|
71
|
+
end
|
72
|
+
|
73
|
+
assert_equal [@user.each_key.to_a, @user.each_index.to_a].transpose, r
|
74
|
+
end
|
75
|
+
|
76
|
+
Sth = Striuct.define do
|
77
|
+
member :name
|
78
|
+
member :age
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_each_pair_with_index
|
82
|
+
sth = Sth.new 'a', 10
|
83
|
+
assert_same sth, sth.each_pair_with_index{}
|
84
|
+
|
85
|
+
enum = sth.each_pair_with_index
|
86
|
+
assert_equal [:name, 'a', 0], enum.next
|
87
|
+
assert_equal [:age, 10, 1], enum.next
|
88
|
+
assert_raises StopIteration do
|
89
|
+
enum.next
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
93
|
end
|
@@ -1,19 +1,19 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
|
3
|
-
class Test_Striuct_Subclass_Instance__Freeze < Test::Unit::TestCase
|
4
|
-
|
5
|
-
Sth = Striuct.new :foo
|
6
|
-
|
7
|
-
def test_freeze
|
8
|
-
sth = Sth.new
|
9
|
-
sth.freeze
|
10
|
-
|
11
|
-
assert_raises RuntimeError do
|
12
|
-
sth.foo = 8
|
13
|
-
end
|
14
|
-
|
15
|
-
assert_equal true, sth.frozen?
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class Test_Striuct_Subclass_Instance__Freeze < Test::Unit::TestCase
|
4
|
+
|
5
|
+
Sth = Striuct.new :foo
|
6
|
+
|
7
|
+
def test_freeze
|
8
|
+
sth = Sth.new
|
9
|
+
sth.freeze
|
10
|
+
|
11
|
+
assert_raises RuntimeError do
|
12
|
+
sth.foo = 8
|
13
|
+
end
|
14
|
+
|
15
|
+
assert_equal true, sth.frozen?
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|