PageRenderTime 27ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/test/ordered_hash_test.rb

http://github.com/twitter/cassandra
Ruby | 386 lines | 318 code | 68 blank | 0 comment | 10 complexity | 75e3777868ff3a11e8d743d78107cb2e MD5 | raw file
Possible License(s): Apache-2.0
  1. require File.expand_path(File.dirname(__FILE__) + '/test_helper')
  2. class OrderedHashTestInt < Test::Unit::TestCase
  3. def setup
  4. @keys = %w( blue green red pink orange )
  5. @values = %w( 000099 009900 aa0000 cc0066 cc6633 )
  6. @hash = Hash.new
  7. @ordered_hash = Cassandra::OrderedHash.new
  8. @keys.each_with_index do |key, index|
  9. @hash[key] = @values[index]
  10. @ordered_hash[key] = @values[index]
  11. end
  12. end
  13. def test_order
  14. assert_equal @keys, @ordered_hash.keys
  15. assert_equal @values, @ordered_hash.values
  16. end
  17. def test_access
  18. assert @hash.all? { |k, v| @ordered_hash[k] == v }
  19. end
  20. def test_assignment
  21. key, value = 'purple', '5422a8'
  22. @ordered_hash[key] = value
  23. assert_equal @keys.length + 1, @ordered_hash.length
  24. assert_equal key, @ordered_hash.keys.last
  25. assert_equal value, @ordered_hash.values.last
  26. assert_equal value, @ordered_hash[key]
  27. end
  28. def test_delete
  29. key, value = 'white', 'ffffff'
  30. bad_key = 'black'
  31. @ordered_hash[key] = value
  32. assert_equal @keys.length + 1, @ordered_hash.length
  33. assert_equal @ordered_hash.keys.length, @ordered_hash.length
  34. assert_equal value, @ordered_hash.delete(key)
  35. assert_equal @keys.length, @ordered_hash.length
  36. assert_equal @ordered_hash.keys.length, @ordered_hash.length
  37. assert_nil @ordered_hash.delete(bad_key)
  38. end
  39. def test_to_hash
  40. assert_same @ordered_hash, @ordered_hash.to_hash
  41. end
  42. def test_to_a
  43. assert_equal @keys.zip(@values), @ordered_hash.to_a
  44. end
  45. def test_has_key
  46. assert_equal true, @ordered_hash.has_key?('blue')
  47. assert_equal true, @ordered_hash.key?('blue')
  48. assert_equal true, @ordered_hash.include?('blue')
  49. assert_equal true, @ordered_hash.member?('blue')
  50. assert_equal false, @ordered_hash.has_key?('indigo')
  51. assert_equal false, @ordered_hash.key?('indigo')
  52. assert_equal false, @ordered_hash.include?('indigo')
  53. assert_equal false, @ordered_hash.member?('indigo')
  54. end
  55. def test_has_value
  56. assert_equal true, @ordered_hash.has_value?('000099')
  57. assert_equal true, @ordered_hash.value?('000099')
  58. assert_equal false, @ordered_hash.has_value?('ABCABC')
  59. assert_equal false, @ordered_hash.value?('ABCABC')
  60. end
  61. def test_each_key
  62. keys = []
  63. @ordered_hash.each_key { |k| keys << k }
  64. assert_equal @keys, keys
  65. end
  66. def test_each_value
  67. values = []
  68. @ordered_hash.each_value { |v| values << v }
  69. assert_equal @values, values
  70. end
  71. def test_each
  72. values = []
  73. @ordered_hash.each {|key, value| values << value}
  74. assert_equal @values, values
  75. end
  76. def test_each_with_index
  77. @ordered_hash.each_with_index { |pair, index| assert_equal [@keys[index], @values[index]], pair}
  78. end
  79. def test_each_pair
  80. values = []
  81. keys = []
  82. @ordered_hash.each_pair do |key, value|
  83. keys << key
  84. values << value
  85. end
  86. assert_equal @values, values
  87. assert_equal @keys, keys
  88. end
  89. def test_delete_if
  90. copy = @ordered_hash.dup
  91. copy.delete('pink')
  92. assert_equal copy, @ordered_hash.delete_if { |k, _| k == 'pink' }
  93. assert !@ordered_hash.keys.include?('pink')
  94. end
  95. def test_reject!
  96. (copy = @ordered_hash.dup).delete('pink')
  97. @ordered_hash.reject! { |k, _| k == 'pink' }
  98. assert_equal copy, @ordered_hash
  99. assert !@ordered_hash.keys.include?('pink')
  100. end
  101. def test_reject
  102. copy = @ordered_hash.dup
  103. new_ordered_hash = @ordered_hash.reject { |k, _| k == 'pink' }
  104. assert_equal copy, @ordered_hash
  105. assert !new_ordered_hash.keys.include?('pink')
  106. assert @ordered_hash.keys.include?('pink')
  107. end
  108. def test_clear
  109. @ordered_hash.clear
  110. assert_equal [], @ordered_hash.keys
  111. end
  112. def test_merge
  113. other_hash = Cassandra::OrderedHash.new
  114. other_hash['purple'] = '800080'
  115. other_hash['violet'] = 'ee82ee'
  116. merged = @ordered_hash.merge other_hash
  117. assert_equal merged.length, @ordered_hash.length + other_hash.length
  118. assert_equal @keys + ['purple', 'violet'], merged.keys
  119. @ordered_hash.merge! other_hash
  120. assert_equal @ordered_hash, merged
  121. assert_equal @ordered_hash.keys, merged.keys
  122. end
  123. def test_shift
  124. pair = @ordered_hash.shift
  125. assert_equal [@keys.first, @values.first], pair
  126. assert !@ordered_hash.keys.include?(pair.first)
  127. end
  128. def test_keys
  129. original = @ordered_hash.keys.dup
  130. @ordered_hash.keys.pop
  131. assert_equal original, @ordered_hash.keys
  132. end
  133. def test_inspect
  134. assert @ordered_hash.inspect.include?(@hash.inspect)
  135. end
  136. def test_alternate_initialization_with_splat
  137. alternate = Cassandra::OrderedHash[1,2,3,4]
  138. assert_kind_of Cassandra::OrderedHash, alternate
  139. assert_equal [1, 3], alternate.keys
  140. end
  141. def test_alternate_initialization_with_array
  142. alternate = Cassandra::OrderedHash[ [
  143. [1, 2],
  144. [3, 4],
  145. "bad key value pair",
  146. [ 'missing value' ]
  147. ]]
  148. assert_kind_of Cassandra::OrderedHash, alternate
  149. assert_equal [1, 3, 'missing value'], alternate.keys
  150. assert_equal [2, 4, nil ], alternate.values
  151. end
  152. def test_alternate_initialization_raises_exception_on_odd_length_args
  153. begin
  154. alternate = Cassandra::OrderedHash[1,2,3,4,5]
  155. flunk "Hash::[] should have raised an exception on initialization " +
  156. "with an odd number of parameters"
  157. rescue
  158. assert_equal "odd number of arguments for Hash", $!.message
  159. end
  160. end
  161. def test_replace_updates_keys
  162. @other_ordered_hash = Cassandra::OrderedHash[:black, '000000', :white, '000000']
  163. original = @ordered_hash.replace(@other_ordered_hash)
  164. assert_same original, @ordered_hash
  165. assert_equal @other_ordered_hash.keys, @ordered_hash.keys
  166. end
  167. def test_reverse
  168. assert_equal @keys.reverse, @ordered_hash.reverse.keys
  169. assert_equal @values.reverse, @ordered_hash.reverse.values
  170. end
  171. end
  172. class OrderedHashTest < Test::Unit::TestCase
  173. def setup
  174. @keys = %w( blue green red pink orange )
  175. @values = %w( 000099 009900 aa0000 cc0066 cc6633 )
  176. @timestamps = %w( 12 34 56 78 90 )
  177. @hash = Hash.new
  178. @timestamps_hash = Hash.new
  179. @ordered_hash = Cassandra::OrderedHash.new
  180. @keys.each_with_index do |key, index|
  181. @hash[key] = @values[index]
  182. @timestamps_hash[key] = @timestamps[index]
  183. @ordered_hash.[]=(key, @values[index], @timestamps[index])
  184. end
  185. end
  186. def test_order
  187. assert_equal @keys, @ordered_hash.keys
  188. assert_equal @values, @ordered_hash.values
  189. assert_equal @timestamps_hash, @ordered_hash.timestamps
  190. end
  191. def test_access
  192. assert @hash.all? { |k, v| @ordered_hash[k] == v }
  193. assert @timestamps_hash.all? { |k, v| @ordered_hash.timestamps[k] == v }
  194. end
  195. def test_assignment
  196. key, value, timestamp = 'purple', '5422a8', '1234'
  197. @ordered_hash.[]=(key, value, timestamp)
  198. assert_equal @keys.length + 1, @ordered_hash.length
  199. assert_equal key, @ordered_hash.keys.last
  200. assert_equal value, @ordered_hash.values.last
  201. assert_equal value, @ordered_hash[key]
  202. assert_equal @keys.length + 1, @ordered_hash.timestamps.length
  203. assert_equal key, @ordered_hash.timestamps.keys.last
  204. assert_equal timestamp, @ordered_hash.timestamps.values.last
  205. assert_equal timestamp, @ordered_hash.timestamps[key]
  206. end
  207. def test_delete
  208. key, value, timestamp = 'white', 'ffffff', '999'
  209. bad_key = 'black'
  210. @ordered_hash.[]=(key, value, timestamp)
  211. assert_equal @keys.length + 1, @ordered_hash.length
  212. assert_equal @ordered_hash.keys.length, @ordered_hash.length
  213. assert_equal value, @ordered_hash.delete(key)
  214. assert_equal @keys.length, @ordered_hash.length
  215. assert_equal @ordered_hash.keys.length, @ordered_hash.length
  216. assert_nil @ordered_hash.delete(bad_key)
  217. @ordered_hash.[]=(key, value, timestamp)
  218. assert_equal @keys.length + 1, @ordered_hash.timestamps.length
  219. assert_equal @ordered_hash.keys.length, @ordered_hash.timestamps.length
  220. assert_equal value, @ordered_hash.delete(key)
  221. assert_equal @keys.length, @ordered_hash.timestamps.length
  222. assert_equal @ordered_hash.keys.length, @ordered_hash.timestamps.length
  223. assert_nil @ordered_hash.delete(bad_key)
  224. end
  225. def test_to_a
  226. assert_equal @keys.zip(@timestamps).sort, @ordered_hash.timestamps.sort.to_a
  227. end
  228. def test_has_key
  229. assert_equal true, @ordered_hash.timestamps.has_key?('blue')
  230. assert_equal true, @ordered_hash.timestamps.key?('blue')
  231. assert_equal true, @ordered_hash.timestamps.include?('blue')
  232. assert_equal true, @ordered_hash.timestamps.member?('blue')
  233. assert_equal false, @ordered_hash.timestamps.has_key?('indigo')
  234. assert_equal false, @ordered_hash.timestamps.key?('indigo')
  235. assert_equal false, @ordered_hash.timestamps.include?('indigo')
  236. assert_equal false, @ordered_hash.timestamps.member?('indigo')
  237. end
  238. def test_has_value
  239. assert_equal true, @ordered_hash.timestamps.has_value?('12')
  240. assert_equal true, @ordered_hash.timestamps.value?('12')
  241. assert_equal false, @ordered_hash.timestamps.has_value?('99')
  242. assert_equal false, @ordered_hash.timestamps.value?('99')
  243. end
  244. def test_each_key
  245. keys = []
  246. @ordered_hash.timestamps.each_key { |k| keys << k }
  247. assert_equal @keys.sort, keys.sort
  248. end
  249. def test_each_value
  250. values = []
  251. @ordered_hash.timestamps.each_value { |v| values << v }
  252. assert_equal @timestamps.sort, values.sort
  253. end
  254. def test_each
  255. values = []
  256. @ordered_hash.timestamps.each {|key, value| values << value}
  257. assert_equal @timestamps.sort, values.sort
  258. end
  259. def test_delete_if
  260. copy = @ordered_hash.dup
  261. copy.delete('pink')
  262. assert_equal copy, @ordered_hash.delete_if { |k, _| k == 'pink' }
  263. assert !@ordered_hash.timestamps.keys.include?('pink')
  264. end
  265. def test_reject!
  266. (copy = @ordered_hash.dup).delete('pink')
  267. @ordered_hash.reject! { |k, _| k == 'pink' }
  268. assert_equal copy, @ordered_hash
  269. assert !@ordered_hash.keys.include?('pink')
  270. assert !@ordered_hash.timestamps.keys.include?('pink')
  271. end
  272. def test_reject
  273. copy = @ordered_hash.dup
  274. new_ordered_hash = @ordered_hash.reject { |k, _| k == 'pink' }
  275. assert_equal copy, @ordered_hash
  276. assert !new_ordered_hash.timestamps.keys.include?('pink')
  277. assert @ordered_hash.timestamps.keys.include?('pink')
  278. end
  279. def test_clear
  280. @ordered_hash.clear
  281. assert_equal [], @ordered_hash.timestamps.keys
  282. end
  283. def test_merge
  284. other_hash = Cassandra::OrderedHash.new
  285. other_hash['purple'] = '800080'
  286. other_hash['violet'] = 'ee82ee'
  287. merged = @ordered_hash.merge other_hash
  288. assert_equal merged.timestamps.length, @ordered_hash.timestamps.length + other_hash.timestamps.length
  289. assert_equal (@keys + ['purple', 'violet']).sort, merged.timestamps.keys.sort
  290. @ordered_hash.merge! other_hash
  291. assert_equal @ordered_hash.timestamps, merged.timestamps
  292. assert_equal @ordered_hash.timestamps.keys.sort, merged.timestamps.keys.sort
  293. end
  294. def test_shift
  295. pair = @ordered_hash.shift
  296. assert_equal [@keys.first, @values.first], pair
  297. assert !@ordered_hash.timestamps.keys.include?(pair.first)
  298. end
  299. def test_keys
  300. original = @ordered_hash.keys.dup
  301. @ordered_hash.keys.pop
  302. assert_equal original.sort, @ordered_hash.timestamps.keys.sort
  303. end
  304. def test_inspect
  305. assert @ordered_hash.timestamps.sort.inspect.include?(@timestamps_hash.sort.inspect)
  306. end
  307. def test_alternate_initialization_with_splat
  308. alternate = Cassandra::OrderedHash[1,2,3,4]
  309. assert_kind_of Cassandra::OrderedHash, alternate
  310. assert_equal [1, 3], alternate.timestamps.keys
  311. end
  312. def test_replace_updates_keys
  313. @other_ordered_hash = Cassandra::OrderedHash[:black, '000000', :white, '000000']
  314. original = @ordered_hash.replace(@other_ordered_hash)
  315. assert_equal original.timestamps, @ordered_hash.timestamps
  316. assert_equal @other_ordered_hash.timestamps.keys, @ordered_hash.timestamps.keys
  317. end
  318. end