constraint 0.1 → 0.2
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/README.TXT +115 -32
- data/VERSION.TXT +1 -1
- data/examples/in_range.rb +72 -0
- data/examples/primes.rb +97 -0
- data/examples/queens.rb +108 -0
- data/examples/queens_ca.rb +83 -0
- data/examples/queens_cb.rb +82 -0
- data/examples/queens_s.rb +85 -0
- data/examples/run_queens.sh +5 -0
- data/lib/constraint.rb +294 -110
- data/test/tc_contraint.rb +88 -42
- metadata +9 -2
data/test/tc_contraint.rb
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
# tc_contraint.rb
|
3
3
|
# @Author: Thomas Link (samul@web.de)
|
4
4
|
# @Created: 27-M�r-2005.
|
5
|
-
# @Last Change:
|
6
|
-
# @Revision: 0.
|
5
|
+
# @Last Change: 14-Jun-2005.
|
6
|
+
# @Revision: 0.190
|
7
7
|
|
8
8
|
require 'test/unit'
|
9
9
|
require 'constraint'
|
10
10
|
|
11
11
|
|
12
12
|
class NumericArray < Constraint::CArray
|
13
|
-
or_constraint("Numeric") {|e| e.kind_of?(Numeric)}
|
13
|
+
or_constraint("Numeric") {|o, e| e.kind_of?(Numeric)}
|
14
14
|
end
|
15
15
|
|
16
16
|
class NumericArray123 < NumericArray
|
@@ -18,13 +18,27 @@ class NumericArray123 < NumericArray
|
|
18
18
|
end
|
19
19
|
|
20
20
|
class EvenNumericArray < NumericArray
|
21
|
-
and_constraint("Even") {|e| e.modulo(2) == 0}
|
21
|
+
and_constraint("Even") {|o, e| e.modulo(2) == 0}
|
22
22
|
end
|
23
23
|
|
24
24
|
class EvenInteger < Constraint::Shell
|
25
|
-
and_constraint("Even") {|e| e.modulo(2) == 0}
|
25
|
+
and_constraint("Even") {|o, e| e.modulo(2) == 0}
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
|
+
class EvenIntegerLT10 < Constraint::Shell
|
29
|
+
and_constraint("Even") {|o, e| e.modulo(2) == 0}
|
30
|
+
and_constraint('LT10') {|o, e| e < 10}
|
31
|
+
on_constraint_violation('LT10') {|o, object| object >= 10 ? 9 : 0}
|
32
|
+
|
33
|
+
def generate_constrained_value(value)
|
34
|
+
if value
|
35
|
+
(value / 2).round * 2 + 2
|
36
|
+
else
|
37
|
+
0
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
28
42
|
|
29
43
|
class TC_Contraint < Test::Unit::TestCase
|
30
44
|
# def setup
|
@@ -45,9 +59,9 @@ class TC_Contraint < Test::Unit::TestCase
|
|
45
59
|
assert_equal([1,2,3], (numarr + [3]).constrained_value)
|
46
60
|
assert_same(numarr, numarr << 4)
|
47
61
|
assert_not_same(numarr, numarr + [4])
|
48
|
-
assert_raise(
|
49
|
-
assert_raise(
|
50
|
-
assert_raise(
|
62
|
+
assert_raise(Constraint::Violation) {NumericArray.new(["a",2,3])}
|
63
|
+
assert_raise(Constraint::Violation) {NumericArray.new([2,nil])}
|
64
|
+
assert_raise(Constraint::Violation) {numarr << "a"}
|
51
65
|
assert_equal(true, numarr.respond_to?(:[]))
|
52
66
|
assert_equal(true, numarr.respond_to?(:with_constraints))
|
53
67
|
assert_equal(false, numarr.respond_to?(:inexistent))
|
@@ -62,14 +76,14 @@ class TC_Contraint < Test::Unit::TestCase
|
|
62
76
|
assert_same(numarr, numarr << 4)
|
63
77
|
assert_not_same(numarr, numarr + [4])
|
64
78
|
assert_instance_of(EvenNumericArray, numarr + [4])
|
65
|
-
assert_raise(
|
66
|
-
assert_raise(
|
67
|
-
assert_raise(
|
68
|
-
assert_raise(
|
69
|
-
assert_raise(
|
70
|
-
assert_raise(
|
71
|
-
assert_raise(
|
72
|
-
assert_raise(
|
79
|
+
assert_raise(Constraint::Violation) {EvenNumericArray.new([1,2,3])}
|
80
|
+
assert_raise(Constraint::Violation) {EvenNumericArray.new([nil,2])}
|
81
|
+
assert_raise(Constraint::Violation) {numarr.dup << 3}
|
82
|
+
assert_raise(Constraint::Violation) {numarr.dup << "a"}
|
83
|
+
assert_raise(Constraint::Violation) {numarr.dup << nil}
|
84
|
+
assert_raise(Constraint::Violation) {numarr.dup + [1]}
|
85
|
+
assert_raise(Constraint::Violation) {numarr.dup + [[2]]}
|
86
|
+
assert_raise(Constraint::Violation) {numarr.dup[0] = 1}
|
73
87
|
n = numarr.dup
|
74
88
|
assert_nothing_raised {n[0] = 2}
|
75
89
|
assert_equal([2,2,4], n.constrained_value)
|
@@ -80,19 +94,18 @@ class TC_Contraint < Test::Unit::TestCase
|
|
80
94
|
enum = EvenInteger.new(2)
|
81
95
|
assert_equal(2, enum.constrained_value)
|
82
96
|
assert_equal(4, (enum + 2).constrained_value)
|
83
|
-
assert_raise(
|
97
|
+
assert_raise(Constraint::Violation) {enum + 1}
|
84
98
|
end
|
85
99
|
|
86
100
|
def test_evenint_lt10
|
87
101
|
enum = EvenInteger.new(2)
|
88
|
-
enum.and_constraint("LT10") {|e| e < 10}
|
102
|
+
enum.and_constraint("LT10") {|o, e| e < 10}
|
89
103
|
assert_equal(2, enum.constrained_value)
|
90
104
|
assert_equal(4, (enum + 2).constrained_value)
|
91
|
-
assert_raise(
|
92
|
-
enum.or_constraint("GT20") {|e| e > 20}
|
105
|
+
assert_raise(Constraint::Violation) {enum + 10}
|
106
|
+
enum.or_constraint("GT20") {|o, e| e > 20}
|
93
107
|
assert_nothing_raised {enum + 30}
|
94
|
-
|
95
|
-
# assert_raise(ConstraintViolation) {enum + 111}
|
108
|
+
assert_raise(Constraint::Violation) {enum + 111}
|
96
109
|
assert_equal(22, (enum + 20).constrained_value)
|
97
110
|
enum = EvenInteger.new(2)
|
98
111
|
assert_nothing_raised {enum + 10}
|
@@ -100,25 +113,58 @@ class TC_Contraint < Test::Unit::TestCase
|
|
100
113
|
|
101
114
|
def test_evenint_lt10_rescue
|
102
115
|
enum = EvenInteger.new(2)
|
103
|
-
enum.and_constraint(
|
104
|
-
assert_raise(
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
116
|
+
enum.and_constraint('LT10') {|o, e| e < 10}
|
117
|
+
assert_raise(Constraint::Violation) {enum + 10}
|
118
|
+
enum.on_constraint_violation('LT10') {|o, object| object >= 10 ? 9 : 0}
|
119
|
+
assert_equal(9, (enum + 20).constrained_value)
|
120
|
+
assert_raise(Constraint::Violation) {enum + 1}
|
121
|
+
assert_nothing_raised {enum + 100}
|
122
|
+
assert_raise(Constraint::Violation) {enum + 101}
|
123
|
+
enum = EvenInteger.new(2)
|
124
|
+
enum.and_constraint('LT10') {|o, e| e < 10}
|
125
|
+
assert_raise(Constraint::Violation) {enum + 10}
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_evenint_rescue_handle
|
129
|
+
enum = EvenInteger.new(2)
|
130
|
+
enum.on_constraint_violation('Even') {|o, object| (object / 2).round * 2}
|
131
|
+
assert_equal(2, (enum + 1).constrained_value)
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_evenintlt10
|
135
|
+
enum = EvenIntegerLT10.new(2)
|
136
|
+
assert_equal(9, (enum + 20).constrained_value)
|
137
|
+
assert_raise(Constraint::Violation) {enum + 1}
|
138
|
+
assert_raise(Constraint::Violation) {enum + 101}
|
139
|
+
assert_nothing_raised {enum + 100}
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_generator_evenintlt10
|
143
|
+
enum = EvenIntegerLT10.new(2)
|
144
|
+
assert_equal(4, (enum.next_constrained_value!).constrained_value)
|
145
|
+
assert_equal(6, (enum.next_constrained_value).constrained_value)
|
146
|
+
assert_equal(4, enum.constrained_value)
|
147
|
+
coll = enum.collect_constrained_values_until {|e| e > 6}
|
148
|
+
assert_equal([4, 6], coll.collect {|e| e.constrained_value})
|
149
|
+
coll = enum.collect_constrained_values_while {|e| e <= 6}
|
150
|
+
assert_equal([4, 6], coll.collect {|e| e.constrained_value})
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_inspect
|
154
|
+
arr = [1,2,3,4]
|
155
|
+
numarr = NumericArray.new(arr.dup)
|
156
|
+
assert_equal(arr.inspect, numarr.inspect)
|
157
|
+
assert_not_equal(arr.inspect, numarr.inspect_constraint_shell)
|
158
|
+
num = 2
|
159
|
+
enum = EvenIntegerLT10.new(num)
|
160
|
+
assert_equal(num.inspect, enum.inspect)
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_equal
|
164
|
+
arr = [1,2,3,4]
|
165
|
+
numarr = NumericArray.new(arr.dup)
|
166
|
+
assert_equal(true, numarr === arr)
|
167
|
+
assert_equal(false, numarr.case_equal_constraint_shell(arr))
|
122
168
|
end
|
123
169
|
end
|
124
170
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: constraint
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date: 2005-06-
|
6
|
+
version: "0.2"
|
7
|
+
date: 2005-06-14
|
8
8
|
summary: Ensure that objects comply with some constraints
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -28,6 +28,13 @@ authors:
|
|
28
28
|
- Thomas Link
|
29
29
|
files:
|
30
30
|
- benchmarks/primes.rb
|
31
|
+
- examples/in_range.rb
|
32
|
+
- examples/primes.rb
|
33
|
+
- examples/queens.rb
|
34
|
+
- examples/queens_ca.rb
|
35
|
+
- examples/queens_cb.rb
|
36
|
+
- examples/queens_s.rb
|
37
|
+
- examples/run_queens.sh
|
31
38
|
- lib/constraint.rb
|
32
39
|
- test/tc_contraint.rb
|
33
40
|
- test/ts_constraint.rb
|