cellular_map 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cellular_map/cell.rb +4 -0
- data/lib/cellular_map/zone.rb +6 -1
- data/test/test_cell.rb +19 -4
- data/test/test_zone.rb +16 -0
- metadata +1 -1
data/lib/cellular_map/cell.rb
CHANGED
data/lib/cellular_map/zone.rb
CHANGED
@@ -44,7 +44,7 @@ module CellularMap
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def ==(other) # :nodoc:
|
47
|
-
|
47
|
+
! self.detect { |c| ! (other.map[c.x, c.y].content == c.content) }
|
48
48
|
end
|
49
49
|
|
50
50
|
# Iterating over each cells inside the zone.
|
@@ -79,5 +79,10 @@ module CellularMap
|
|
79
79
|
def rangeize(x, y)
|
80
80
|
[x, y].collect { |i| i.respond_to?(:to_i) ? (i.to_i..i.to_i) : i }
|
81
81
|
end
|
82
|
+
|
83
|
+
def initialize_copy(other) # :nodoc:
|
84
|
+
@map = other.map.dup
|
85
|
+
@map.each { |c| c.content = nil unless x === c.x && y === c.y }
|
86
|
+
end
|
82
87
|
end
|
83
88
|
end
|
data/test/test_cell.rb
CHANGED
@@ -39,25 +39,40 @@ class TestCell < Test::Unit::TestCase
|
|
39
39
|
context("An array of cells") {
|
40
40
|
setup {
|
41
41
|
@map = CellularMap::Map.new
|
42
|
-
@
|
42
|
+
@sorted = [
|
43
|
+
@map[6, -9],
|
43
44
|
@map[0, 0],
|
45
|
+
@map[0, 5],
|
44
46
|
@map[1, 5],
|
45
47
|
@map[-4, 7],
|
48
|
+
@map[0, 7],
|
49
|
+
@map[3, 7],
|
50
|
+
@map[3, 8],
|
51
|
+
]
|
52
|
+
@cells = [
|
46
53
|
@map[3, 8],
|
47
|
-
@map[
|
54
|
+
@map[3, 7],
|
55
|
+
@map[1, 5],
|
56
|
+
@map[0, 0],
|
57
|
+
@map[0, 7],
|
58
|
+
@map[-4, 7],
|
59
|
+
@map[0, 5],
|
60
|
+
@map[6, -9],
|
48
61
|
]
|
49
62
|
@duplicated = @cells + [
|
50
63
|
@map[0, 0],
|
51
64
|
@map[1, 5],
|
52
65
|
]
|
53
|
-
@sort_order = lambda { |a, b| 2 * (a[0] <=> b[0]) + (a[1] <=> b[1]) }
|
54
66
|
}
|
55
67
|
|
68
|
+
should("be easy to sort (by rows then by columns)") {
|
69
|
+
assert_equal @sorted, @cells.sort }
|
70
|
+
|
56
71
|
should("remove duplicated elements") {
|
57
72
|
expected, obtained = [
|
58
73
|
@cells,
|
59
74
|
@duplicated.uniq
|
60
|
-
].collect { |a| a.collect { |c| [c.x, c.y] }.sort
|
75
|
+
].collect { |a| a.collect { |c| [c.x, c.y] }.sort }
|
61
76
|
assert_equal expected, obtained
|
62
77
|
}
|
63
78
|
}
|
data/test/test_zone.rb
CHANGED
@@ -95,6 +95,22 @@ class TestZone < Test::Unit::TestCase
|
|
95
95
|
} }
|
96
96
|
assert_equal @positions, inside
|
97
97
|
}
|
98
|
+
|
99
|
+
context("and its duplicate") {
|
100
|
+
setup { @duplicate = @zone.dup }
|
101
|
+
should("be identical") { assert_equal @zone, @duplicate }
|
102
|
+
should("not be the same instance") {
|
103
|
+
assert_not_same @zone, @duplicate }
|
104
|
+
should("not be on the same map") {
|
105
|
+
assert_not_same @zone.map, @duplicate.map }
|
106
|
+
should("have duplicated only the cells inside the zone") {
|
107
|
+
expected, obtained = [
|
108
|
+
@duplicate.map.to_a,
|
109
|
+
@duplicate.reject { |c| c.content.nil? }
|
110
|
+
].collect { |a| a.sort }
|
111
|
+
assert_equal expected, obtained
|
112
|
+
}
|
113
|
+
}
|
98
114
|
}
|
99
115
|
}
|
100
116
|
}
|