PageRenderTime 63ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/jruby-1.7.3/test/externals/ruby1.8/ruby/test_array.rb

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Ruby | 1273 lines | 964 code | 218 blank | 91 comment | 32 complexity | a4f8211eb26c1a256dace93b796b6545 MD5 | raw file
  1. require 'test/unit'
  2. class TestArray < Test::Unit::TestCase
  3. def test_0_literal
  4. assert_equal([1, 2, 3, 4], [1, 2] + [3, 4])
  5. assert_equal([1, 2, 1, 2], [1, 2] * 2)
  6. assert_equal("1:2", [1, 2] * ":")
  7. assert_equal([1, 2].hash, [1, 2].hash)
  8. assert_equal([2,3], [1,2,3] & [2,3,4])
  9. assert_equal([1,2,3,4], [1,2,3] | [2,3,4])
  10. assert_equal([1,2,3] - [2,3], [1])
  11. x = [0, 1, 2, 3, 4, 5]
  12. assert_equal(2, x[2])
  13. assert_equal([1, 2, 3], x[1..3])
  14. assert_equal([1, 2, 3], x[1,3])
  15. x[0, 2] = 10
  16. assert(x[0] == 10 && x[1] == 2)
  17. x[0, 0] = -1
  18. assert(x[0] == -1 && x[1] == 10)
  19. x[-1, 1] = 20
  20. assert(x[-1] == 20 && x.pop == 20)
  21. end
  22. def test_array_andor_0
  23. assert_equal([2], ([1,2,3]&[2,4,6]))
  24. assert_equal([1,2,3,4,6], ([1,2,3]|[2,4,6]))
  25. end
  26. def test_compact_0
  27. a = [nil, 1, nil, nil, 5, nil, nil]
  28. assert_equal [1, 5], a.compact
  29. assert_equal [nil, 1, nil, nil, 5, nil, nil], a
  30. a.compact!
  31. assert_equal [1, 5], a
  32. end
  33. def test_uniq_0
  34. x = [1, 1, 4, 2, 5, 4, 5, 1, 2]
  35. x.uniq!
  36. assert_equal([1, 4, 2, 5], x)
  37. end
  38. def test_empty_0
  39. assert_equal true, [].empty?
  40. assert_equal false, [1].empty?
  41. assert_equal false, [1, 1, 4, 2, 5, 4, 5, 1, 2].empty?
  42. end
  43. def test_sort_0
  44. x = ["it", "came", "to", "pass", "that", "..."]
  45. x = x.sort.join(" ")
  46. assert_equal("... came it pass that to", x)
  47. x = [2,5,3,1,7]
  48. x.sort!{|a,b| a<=>b} # sort with condition
  49. assert_equal([1,2,3,5,7], x)
  50. x.sort!{|a,b| b-a} # reverse sort
  51. assert_equal([7,5,3,2,1], x)
  52. end
  53. def test_split_0
  54. x = "The Boassert of Mormon"
  55. assert_equal(x.reverse, x.split(//).reverse!.join)
  56. assert_equal(x.reverse, x.reverse!)
  57. assert_equal("g:n:i:r:t:s: :e:t:y:b: :1", "1 byte string".split(//).reverse.join(":"))
  58. x = "a b c d"
  59. assert_equal(['a', 'b', 'c', 'd'], x.split)
  60. assert_equal(['a', 'b', 'c', 'd'], x.split(' '))
  61. end
  62. def test_misc_0
  63. assert(defined? "a".chomp)
  64. assert_equal(["a", "b", "c"], "abc".scan(/./))
  65. assert_equal([["1a"], ["2b"], ["3c"]], "1a2b3c".scan(/(\d.)/))
  66. # non-greedy match
  67. assert_equal([["a", "12"], ["b", "22"]], "a=12;b=22".scan(/(.*?)=(\d*);?/))
  68. x = [1]
  69. assert_equal('1:1:1:1:1', (x * 5).join(":"))
  70. assert_equal('1', (x * 1).join(":"))
  71. assert_equal('', (x * 0).join(":"))
  72. *x = *(1..7).to_a
  73. assert_equal(7, x.size)
  74. assert_equal([1, 2, 3, 4, 5, 6, 7], x)
  75. x = [1,2,3]
  76. x[1,0] = x
  77. assert_equal([1,1,2,3,2,3], x)
  78. x = [1,2,3]
  79. x[-1,0] = x
  80. assert_equal([1,2,1,2,3,3], x)
  81. x = [1,2,3]
  82. x.concat(x)
  83. assert_equal([1,2,3,1,2,3], x)
  84. x = [1,2,3]
  85. x.clear
  86. assert_equal([], x)
  87. x = [1,2,3]
  88. y = x.dup
  89. x << 4
  90. y << 5
  91. assert_equal([1,2,3,4], x)
  92. assert_equal([1,2,3,5], y)
  93. end
  94. def test_beg_end_0
  95. x = [1, 2, 3, 4, 5]
  96. assert_equal(1, x.first)
  97. assert_equal([1], x.first(1))
  98. assert_equal([1, 2, 3], x.first(3))
  99. assert_equal(5, x.last)
  100. assert_equal([5], x.last(1))
  101. assert_equal([3, 4, 5], x.last(3))
  102. assert_equal(1, x.shift)
  103. assert_equal([2, 3, 4], x.shift(3))
  104. assert_equal([5], x)
  105. assert_equal([2, 3, 4, 5], x.unshift(2, 3, 4))
  106. assert_equal([1, 2, 3, 4, 5], x.unshift(1))
  107. assert_equal([1, 2, 3, 4, 5], x)
  108. assert_equal(5, x.pop)
  109. assert_equal([3, 4], x.pop(2))
  110. assert_equal([1, 2], x)
  111. assert_equal([1, 2, 3, 4], x.push(3, 4))
  112. assert_equal([1, 2, 3, 4, 5], x.push(5))
  113. assert_equal([1, 2, 3, 4, 5], x)
  114. end
  115. def test_find_all_0
  116. assert_respond_to([], :find_all)
  117. assert_respond_to([], :select) # Alias
  118. assert_equal([], [].find_all{ |obj| obj == "foo"})
  119. x = ["foo", "bar", "baz", "baz", 1, 2, 3, 3, 4]
  120. assert_equal(["baz","baz"], x.find_all{ |obj| obj == "baz" })
  121. assert_equal([3,3], x.find_all{ |obj| obj == 3 })
  122. end
  123. def test_fill_0
  124. assert_equal([-1, -1, -1, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1))
  125. assert_equal([0, 1, 2, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, 3))
  126. assert_equal([0, 1, 2, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3, 2))
  127. assert_equal([0, 1, 2, -1, -1, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, 3, 5))
  128. assert_equal([0, 1, -1, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2, 2))
  129. assert_equal([0, 1, -1, -1, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, 2, 5))
  130. assert_equal([0, 1, 2, 3, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, -2, 1))
  131. assert_equal([0, 1, 2, 3, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, -2, 3))
  132. assert_equal([0, 1, 2, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3..4))
  133. assert_equal([0, 1, 2, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3...4))
  134. assert_equal([0, 1, -1, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2..-2))
  135. assert_equal([0, 1, -1, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2...-2))
  136. assert_equal([10, 11, 12, 13, 14, 15], [0, 1, 2, 3, 4, 5].fill{|i| i+10})
  137. assert_equal([0, 1, 2, 13, 14, 15], [0, 1, 2, 3, 4, 5].fill(3){|i| i+10})
  138. assert_equal([0, 1, 2, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(3, 2){|i| i+10})
  139. assert_equal([0, 1, 2, 13, 14, 15, 16, 17], [0, 1, 2, 3, 4, 5].fill(3, 5){|i| i+10})
  140. assert_equal([0, 1, 2, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(3..4){|i| i+10})
  141. assert_equal([0, 1, 2, 13, 4, 5], [0, 1, 2, 3, 4, 5].fill(3...4){|i| i+10})
  142. assert_equal([0, 1, 12, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(2..-2){|i| i+10})
  143. assert_equal([0, 1, 12, 13, 4, 5], [0, 1, 2, 3, 4, 5].fill(2...-2){|i| i+10})
  144. end
  145. # From rubicon
  146. def setup
  147. @cls = Array
  148. end
  149. def test_00_new
  150. a = @cls.new()
  151. assert_instance_of(@cls, a)
  152. assert_equal(0, a.length)
  153. assert_nil(a[0])
  154. end
  155. def test_01_square_brackets
  156. a = @cls[ 5, 4, 3, 2, 1 ]
  157. assert_instance_of(@cls, a)
  158. assert_equal(5, a.length)
  159. 5.times { |i| assert_equal(5-i, a[i]) }
  160. assert_nil(a[6])
  161. end
  162. def test_AND # '&'
  163. assert_equal(@cls[1, 3], @cls[ 1, 1, 3, 5 ] & @cls[ 1, 2, 3 ])
  164. assert_equal(@cls[], @cls[ 1, 1, 3, 5 ] & @cls[ ])
  165. assert_equal(@cls[], @cls[ ] & @cls[ 1, 2, 3 ])
  166. assert_equal(@cls[], @cls[ 1, 2, 3 ] & @cls[ 4, 5, 6 ])
  167. end
  168. def test_MUL # '*'
  169. assert_equal(@cls[], @cls[]*3)
  170. assert_equal(@cls[1, 1, 1], @cls[1]*3)
  171. assert_equal(@cls[1, 2, 1, 2, 1, 2], @cls[1, 2]*3)
  172. assert_equal(@cls[], @cls[1, 2, 3] * 0)
  173. assert_raise(ArgumentError) { @cls[1, 2]*(-3) }
  174. assert_equal('1-2-3-4-5', @cls[1, 2, 3, 4, 5] * '-')
  175. assert_equal('12345', @cls[1, 2, 3, 4, 5] * '')
  176. end
  177. def test_PLUS # '+'
  178. assert_equal(@cls[], @cls[] + @cls[])
  179. assert_equal(@cls[1], @cls[1] + @cls[])
  180. assert_equal(@cls[1], @cls[] + @cls[1])
  181. assert_equal(@cls[1, 1], @cls[1] + @cls[1])
  182. assert_equal(@cls['cat', 'dog', 1, 2, 3], %w(cat dog) + (1..3).to_a)
  183. end
  184. def test_MINUS # '-'
  185. assert_equal(@cls[], @cls[1] - @cls[1])
  186. assert_equal(@cls[1], @cls[1, 2, 3, 4, 5] - @cls[2, 3, 4, 5])
  187. # Ruby 1.8 feature change
  188. #assert_equal(@cls[1], @cls[1, 2, 1, 3, 1, 4, 1, 5] - @cls[2, 3, 4, 5])
  189. assert_equal(@cls[1, 1, 1, 1], @cls[1, 2, 1, 3, 1, 4, 1, 5] - @cls[2, 3, 4, 5])
  190. a = @cls[]
  191. 1000.times { a << 1 }
  192. assert_equal(1000, a.length)
  193. #assert_equal(@cls[1], a - @cls[2])
  194. assert_equal(@cls[1] * 1000, a - @cls[2])
  195. #assert_equal(@cls[1], @cls[1, 2, 1] - @cls[2])
  196. assert_equal(@cls[1, 1], @cls[1, 2, 1] - @cls[2])
  197. assert_equal(@cls[1, 2, 3], @cls[1, 2, 3] - @cls[4, 5, 6])
  198. end
  199. def test_LSHIFT # '<<'
  200. a = @cls[]
  201. a << 1
  202. assert_equal(@cls[1], a)
  203. a << 2 << 3
  204. assert_equal(@cls[1, 2, 3], a)
  205. a << nil << 'cat'
  206. assert_equal(@cls[1, 2, 3, nil, 'cat'], a)
  207. a << a
  208. assert_equal(@cls[1, 2, 3, nil, 'cat', a], a)
  209. end
  210. def test_CMP # '<=>'
  211. assert_equal(0, @cls[] <=> @cls[])
  212. assert_equal(0, @cls[1] <=> @cls[1])
  213. assert_equal(0, @cls[1, 2, 3, 'cat'] <=> @cls[1, 2, 3, 'cat'])
  214. assert_equal(-1, @cls[] <=> @cls[1])
  215. assert_equal(1, @cls[1] <=> @cls[])
  216. assert_equal(-1, @cls[1, 2, 3] <=> @cls[1, 2, 3, 'cat'])
  217. assert_equal(1, @cls[1, 2, 3, 'cat'] <=> @cls[1, 2, 3])
  218. assert_equal(-1, @cls[1, 2, 3, 'cat'] <=> @cls[1, 2, 3, 'dog'])
  219. assert_equal(1, @cls[1, 2, 3, 'dog'] <=> @cls[1, 2, 3, 'cat'])
  220. end
  221. def test_EQUAL # '=='
  222. assert(@cls[] == @cls[])
  223. assert(@cls[1] == @cls[1])
  224. assert(@cls[1, 1, 2, 2] == @cls[1, 1, 2, 2])
  225. assert(@cls[1.0, 1.0, 2.0, 2.0] == @cls[1, 1, 2, 2])
  226. end
  227. def test_VERY_EQUAL # '==='
  228. assert(@cls[] === @cls[])
  229. assert(@cls[1] === @cls[1])
  230. assert(@cls[1, 1, 2, 2] === @cls[1, 1, 2, 2])
  231. assert(@cls[1.0, 1.0, 2.0, 2.0] === @cls[1, 1, 2, 2])
  232. end
  233. def test_AREF # '[]'
  234. a = @cls[*(1..100).to_a]
  235. assert_equal(1, a[0])
  236. assert_equal(100, a[99])
  237. assert_nil(a[100])
  238. assert_equal(100, a[-1])
  239. assert_equal(99, a[-2])
  240. assert_equal(1, a[-100])
  241. assert_nil(a[-101])
  242. assert_nil(a[-101,0])
  243. assert_nil(a[-101,1])
  244. assert_nil(a[-101,-1])
  245. assert_nil(a[10,-1])
  246. assert_equal(@cls[1], a[0,1])
  247. assert_equal(@cls[100], a[99,1])
  248. assert_equal(@cls[], a[100,1])
  249. assert_equal(@cls[100], a[99,100])
  250. assert_equal(@cls[100], a[-1,1])
  251. assert_equal(@cls[99], a[-2,1])
  252. assert_equal(@cls[], a[-100,0])
  253. assert_equal(@cls[1], a[-100,1])
  254. assert_equal(@cls[10, 11, 12], a[9, 3])
  255. assert_equal(@cls[10, 11, 12], a[-91, 3])
  256. assert_equal(@cls[1], a[0..0])
  257. assert_equal(@cls[100], a[99..99])
  258. assert_equal(@cls[], a[100..100])
  259. assert_equal(@cls[100], a[99..200])
  260. assert_equal(@cls[100], a[-1..-1])
  261. assert_equal(@cls[99], a[-2..-2])
  262. assert_equal(@cls[10, 11, 12], a[9..11])
  263. assert_equal(@cls[10, 11, 12], a[-91..-89])
  264. assert_nil(a[10, -3])
  265. # Ruby 1.8 feature change:
  266. # Array#[size..x] returns [] instead of nil.
  267. #assert_nil(a[10..7])
  268. assert_equal [], a[10..7]
  269. assert_raise(TypeError) {a['cat']}
  270. end
  271. def test_ASET # '[]='
  272. a = @cls[*(0..99).to_a]
  273. assert_equal(0, a[0] = 0)
  274. assert_equal(@cls[0] + @cls[*(1..99).to_a], a)
  275. a = @cls[*(0..99).to_a]
  276. assert_equal(0, a[10,10] = 0)
  277. assert_equal(@cls[*(0..9).to_a] + @cls[0] + @cls[*(20..99).to_a], a)
  278. a = @cls[*(0..99).to_a]
  279. assert_equal(0, a[-1] = 0)
  280. assert_equal(@cls[*(0..98).to_a] + @cls[0], a)
  281. a = @cls[*(0..99).to_a]
  282. assert_equal(0, a[-10, 10] = 0)
  283. assert_equal(@cls[*(0..89).to_a] + @cls[0], a)
  284. a = @cls[*(0..99).to_a]
  285. assert_equal(0, a[0,1000] = 0)
  286. assert_equal(@cls[0] , a)
  287. a = @cls[*(0..99).to_a]
  288. assert_equal(0, a[10..19] = 0)
  289. assert_equal(@cls[*(0..9).to_a] + @cls[0] + @cls[*(20..99).to_a], a)
  290. b = @cls[*%w( a b c )]
  291. a = @cls[*(0..99).to_a]
  292. assert_equal(b, a[0,1] = b)
  293. assert_equal(b + @cls[*(1..99).to_a], a)
  294. a = @cls[*(0..99).to_a]
  295. assert_equal(b, a[10,10] = b)
  296. assert_equal(@cls[*(0..9).to_a] + b + @cls[*(20..99).to_a], a)
  297. a = @cls[*(0..99).to_a]
  298. assert_equal(b, a[-1, 1] = b)
  299. assert_equal(@cls[*(0..98).to_a] + b, a)
  300. a = @cls[*(0..99).to_a]
  301. assert_equal(b, a[-10, 10] = b)
  302. assert_equal(@cls[*(0..89).to_a] + b, a)
  303. a = @cls[*(0..99).to_a]
  304. assert_equal(b, a[0,1000] = b)
  305. assert_equal(b , a)
  306. a = @cls[*(0..99).to_a]
  307. assert_equal(b, a[10..19] = b)
  308. assert_equal(@cls[*(0..9).to_a] + b + @cls[*(20..99).to_a], a)
  309. # Ruby 1.8 feature change:
  310. # assigning nil does not remove elements.
  311. =begin
  312. a = @cls[*(0..99).to_a]
  313. assert_equal(nil, a[0,1] = nil)
  314. assert_equal(@cls[*(1..99).to_a], a)
  315. a = @cls[*(0..99).to_a]
  316. assert_equal(nil, a[10,10] = nil)
  317. assert_equal(@cls[*(0..9).to_a] + @cls[*(20..99).to_a], a)
  318. a = @cls[*(0..99).to_a]
  319. assert_equal(nil, a[-1, 1] = nil)
  320. assert_equal(@cls[*(0..98).to_a], a)
  321. a = @cls[*(0..99).to_a]
  322. assert_equal(nil, a[-10, 10] = nil)
  323. assert_equal(@cls[*(0..89).to_a], a)
  324. a = @cls[*(0..99).to_a]
  325. assert_equal(nil, a[0,1000] = nil)
  326. assert_equal(@cls[] , a)
  327. a = @cls[*(0..99).to_a]
  328. assert_equal(nil, a[10..19] = nil)
  329. assert_equal(@cls[*(0..9).to_a] + @cls[*(20..99).to_a], a)
  330. =end
  331. a = @cls[1, 2, 3]
  332. a[1, 0] = a
  333. assert_equal([1, 1, 2, 3, 2, 3], a)
  334. a = @cls[1, 2, 3]
  335. a[-1, 0] = a
  336. assert_equal([1, 2, 1, 2, 3, 3], a)
  337. end
  338. def test_assoc
  339. a1 = @cls[*%w( cat feline )]
  340. a2 = @cls[*%w( dog canine )]
  341. a3 = @cls[*%w( mule asinine )]
  342. a = @cls[ a1, a2, a3 ]
  343. assert_equal(a1, a.assoc('cat'))
  344. assert_equal(a3, a.assoc('mule'))
  345. assert_equal(nil, a.assoc('asinine'))
  346. assert_equal(nil, a.assoc('wombat'))
  347. assert_equal(nil, a.assoc(1..2))
  348. end
  349. def test_at
  350. a = @cls[*(0..99).to_a]
  351. assert_equal(0, a.at(0))
  352. assert_equal(10, a.at(10))
  353. assert_equal(99, a.at(99))
  354. assert_equal(nil, a.at(100))
  355. assert_equal(99, a.at(-1))
  356. assert_equal(0, a.at(-100))
  357. assert_equal(nil, a.at(-101))
  358. assert_raise(TypeError) { a.at('cat') }
  359. end
  360. def test_clear
  361. a = @cls[1, 2, 3]
  362. b = a.clear
  363. assert_equal(@cls[], a)
  364. assert_equal(@cls[], b)
  365. assert_equal(a.__id__, b.__id__)
  366. end
  367. def test_clone
  368. for taint in [ false, true ]
  369. for frozen in [ false, true ]
  370. a = @cls[*(0..99).to_a]
  371. a.taint if taint
  372. a.freeze if frozen
  373. b = a.clone
  374. assert_equal(a, b)
  375. assert(a.__id__ != b.__id__)
  376. assert_equal(a.frozen?, b.frozen?)
  377. assert_equal(a.tainted?, b.tainted?)
  378. end
  379. end
  380. end
  381. def test_collect
  382. a = @cls[ 1, 'cat', 1..1 ]
  383. assert_equal([ Fixnum, String, Range], a.collect {|e| e.class} )
  384. assert_equal([ 99, 99, 99], a.collect { 99 } )
  385. assert_equal([], @cls[].collect { 99 })
  386. assert_equal([1, 2, 3], @cls[1, 2, 3].collect)
  387. end
  388. # also update map!
  389. def test_collect!
  390. a = @cls[ 1, 'cat', 1..1 ]
  391. assert_equal([ Fixnum, String, Range], a.collect! {|e| e.class} )
  392. assert_equal([ Fixnum, String, Range], a)
  393. a = @cls[ 1, 'cat', 1..1 ]
  394. assert_equal([ 99, 99, 99], a.collect! { 99 } )
  395. assert_equal([ 99, 99, 99], a)
  396. a = @cls[ ]
  397. assert_equal([], a.collect! { 99 })
  398. assert_equal([], a)
  399. end
  400. def test_compact
  401. a = @cls[ 1, nil, nil, 2, 3, nil, 4 ]
  402. assert_equal(@cls[1, 2, 3, 4], a.compact)
  403. a = @cls[ nil, 1, nil, 2, 3, nil, 4 ]
  404. assert_equal(@cls[1, 2, 3, 4], a.compact)
  405. a = @cls[ 1, nil, nil, 2, 3, nil, 4, nil ]
  406. assert_equal(@cls[1, 2, 3, 4], a.compact)
  407. a = @cls[ 1, 2, 3, 4 ]
  408. assert_equal(@cls[1, 2, 3, 4], a.compact)
  409. end
  410. def test_compact!
  411. a = @cls[ 1, nil, nil, 2, 3, nil, 4 ]
  412. assert_equal(@cls[1, 2, 3, 4], a.compact!)
  413. assert_equal(@cls[1, 2, 3, 4], a)
  414. a = @cls[ nil, 1, nil, 2, 3, nil, 4 ]
  415. assert_equal(@cls[1, 2, 3, 4], a.compact!)
  416. assert_equal(@cls[1, 2, 3, 4], a)
  417. a = @cls[ 1, nil, nil, 2, 3, nil, 4, nil ]
  418. assert_equal(@cls[1, 2, 3, 4], a.compact!)
  419. assert_equal(@cls[1, 2, 3, 4], a)
  420. a = @cls[ 1, 2, 3, 4 ]
  421. assert_equal(nil, a.compact!)
  422. assert_equal(@cls[1, 2, 3, 4], a)
  423. end
  424. def test_concat
  425. assert_equal(@cls[1, 2, 3, 4], @cls[1, 2].concat(@cls[3, 4]))
  426. assert_equal(@cls[1, 2, 3, 4], @cls[].concat(@cls[1, 2, 3, 4]))
  427. assert_equal(@cls[1, 2, 3, 4], @cls[1, 2, 3, 4].concat(@cls[]))
  428. assert_equal(@cls[], @cls[].concat(@cls[]))
  429. assert_equal(@cls[@cls[1, 2], @cls[3, 4]], @cls[@cls[1, 2]].concat(@cls[@cls[3, 4]]))
  430. a = @cls[1, 2, 3]
  431. a.concat(a)
  432. assert_equal([1, 2, 3, 1, 2, 3], a)
  433. end
  434. def test_count
  435. a = @cls[1, 2, 3, 1, 2]
  436. assert_equal(5, a.count)
  437. assert_equal(2, a.count(1))
  438. assert_equal(3, a.count {|x| x % 2 == 1 })
  439. assert_equal(2, a.count(1) {|x| x % 2 == 1 })
  440. assert_raise(ArgumentError) { a.count(0, 1) }
  441. end
  442. def test_delete
  443. a = @cls[*('cab'..'cat').to_a]
  444. assert_equal('cap', a.delete('cap'))
  445. assert_equal(@cls[*('cab'..'cao').to_a] + @cls[*('caq'..'cat').to_a], a)
  446. a = @cls[*('cab'..'cat').to_a]
  447. assert_equal('cab', a.delete('cab'))
  448. assert_equal(@cls[*('cac'..'cat').to_a], a)
  449. a = @cls[*('cab'..'cat').to_a]
  450. assert_equal('cat', a.delete('cat'))
  451. assert_equal(@cls[*('cab'..'cas').to_a], a)
  452. a = @cls[*('cab'..'cat').to_a]
  453. assert_equal(nil, a.delete('cup'))
  454. assert_equal(@cls[*('cab'..'cat').to_a], a)
  455. a = @cls[*('cab'..'cat').to_a]
  456. assert_equal(99, a.delete('cup') { 99 } )
  457. assert_equal(@cls[*('cab'..'cat').to_a], a)
  458. end
  459. def test_delete_at
  460. a = @cls[*(1..5).to_a]
  461. assert_equal(3, a.delete_at(2))
  462. assert_equal(@cls[1, 2, 4, 5], a)
  463. a = @cls[*(1..5).to_a]
  464. assert_equal(4, a.delete_at(-2))
  465. assert_equal(@cls[1, 2, 3, 5], a)
  466. a = @cls[*(1..5).to_a]
  467. assert_equal(nil, a.delete_at(5))
  468. assert_equal(@cls[1, 2, 3, 4, 5], a)
  469. a = @cls[*(1..5).to_a]
  470. assert_equal(nil, a.delete_at(-6))
  471. assert_equal(@cls[1, 2, 3, 4, 5], a)
  472. end
  473. # also reject!
  474. def test_delete_if
  475. a = @cls[ 1, 2, 3, 4, 5 ]
  476. assert_equal(a, a.delete_if { false })
  477. assert_equal(@cls[1, 2, 3, 4, 5], a)
  478. a = @cls[ 1, 2, 3, 4, 5 ]
  479. assert_equal(a, a.delete_if { true })
  480. assert_equal(@cls[], a)
  481. a = @cls[ 1, 2, 3, 4, 5 ]
  482. assert_equal(a, a.delete_if { |i| i > 3 })
  483. assert_equal(@cls[1, 2, 3], a)
  484. end
  485. def test_dup
  486. for taint in [ false, true ]
  487. for frozen in [ false, true ]
  488. a = @cls[*(0..99).to_a]
  489. a.taint if taint
  490. a.freeze if frozen
  491. b = a.dup
  492. assert_equal(a, b)
  493. assert(a.__id__ != b.__id__)
  494. assert_equal(false, b.frozen?)
  495. assert_equal(a.tainted?, b.tainted?)
  496. end
  497. end
  498. end
  499. def test_each
  500. a = @cls[*%w( ant bat cat dog )]
  501. i = 0
  502. a.each { |e|
  503. assert_equal(a[i], e)
  504. i += 1
  505. }
  506. assert_equal(4, i)
  507. a = @cls[]
  508. i = 0
  509. a.each { |e|
  510. assert_equal(a[i], e)
  511. i += 1
  512. }
  513. assert_equal(0, i)
  514. assert_equal(a, a.each {})
  515. end
  516. def test_each_index
  517. a = @cls[*%w( ant bat cat dog )]
  518. i = 0
  519. a.each_index { |ind|
  520. assert_equal(i, ind)
  521. i += 1
  522. }
  523. assert_equal(4, i)
  524. a = @cls[]
  525. i = 0
  526. a.each_index { |ind|
  527. assert_equal(i, ind)
  528. i += 1
  529. }
  530. assert_equal(0, i)
  531. assert_equal(a, a.each_index {})
  532. end
  533. def test_empty?
  534. assert(@cls[].empty?)
  535. assert(!@cls[1].empty?)
  536. end
  537. def test_eql?
  538. assert(@cls[].eql?(@cls[]))
  539. assert(@cls[1].eql?(@cls[1]))
  540. assert(@cls[1, 1, 2, 2].eql?(@cls[1, 1, 2, 2]))
  541. assert(!@cls[1.0, 1.0, 2.0, 2.0].eql?(@cls[1, 1, 2, 2]))
  542. end
  543. def test_fill
  544. assert_equal(@cls[], @cls[].fill(99))
  545. assert_equal(@cls[], @cls[].fill(99, 0))
  546. assert_equal(@cls[99], @cls[].fill(99, 0, 1))
  547. assert_equal(@cls[99], @cls[].fill(99, 0..0))
  548. assert_equal(@cls[99], @cls[1].fill(99))
  549. assert_equal(@cls[99], @cls[1].fill(99, 0))
  550. assert_equal(@cls[99], @cls[1].fill(99, 0, 1))
  551. assert_equal(@cls[99], @cls[1].fill(99, 0..0))
  552. assert_equal(@cls[99, 99], @cls[1, 2].fill(99))
  553. assert_equal(@cls[99, 99], @cls[1, 2].fill(99, 0))
  554. assert_equal(@cls[99, 99], @cls[1, 2].fill(99, nil))
  555. assert_equal(@cls[1, 99], @cls[1, 2].fill(99, 1, nil))
  556. assert_equal(@cls[99, 2], @cls[1, 2].fill(99, 0, 1))
  557. assert_equal(@cls[99, 2], @cls[1, 2].fill(99, 0..0))
  558. end
  559. def test_first
  560. assert_equal(3, @cls[3, 4, 5].first)
  561. assert_equal(nil, @cls[].first)
  562. end
  563. def test_flatten
  564. a1 = @cls[ 1, 2, 3]
  565. a2 = @cls[ 5, 6 ]
  566. a3 = @cls[ 4, a2 ]
  567. a4 = @cls[ a1, a3 ]
  568. assert_equal(@cls[1, 2, 3, 4, 5, 6], a4.flatten)
  569. assert_equal(@cls[ a1, a3], a4)
  570. a5 = @cls[ a1, @cls[], a3 ]
  571. assert_equal(@cls[1, 2, 3, 4, 5, 6], a5.flatten)
  572. assert_equal(@cls[], @cls[].flatten)
  573. assert_equal(@cls[],
  574. @cls[@cls[@cls[@cls[],@cls[]],@cls[@cls[]],@cls[]],@cls[@cls[@cls[]]]].flatten)
  575. assert_raise(TypeError, "[ruby-dev:31197]") { [[]].flatten("") }
  576. end
  577. def test_flatten!
  578. a1 = @cls[ 1, 2, 3]
  579. a2 = @cls[ 5, 6 ]
  580. a3 = @cls[ 4, a2 ]
  581. a4 = @cls[ a1, a3 ]
  582. assert_equal(@cls[1, 2, 3, 4, 5, 6], a4.flatten!)
  583. assert_equal(@cls[1, 2, 3, 4, 5, 6], a4)
  584. a5 = @cls[ a1, @cls[], a3 ]
  585. assert_equal(@cls[1, 2, 3, 4, 5, 6], a5.flatten!)
  586. assert_equal(@cls[1, 2, 3, 4, 5, 6], a5)
  587. assert_equal(@cls[], @cls[].flatten)
  588. assert_equal(@cls[],
  589. @cls[@cls[@cls[@cls[],@cls[]],@cls[@cls[]],@cls[]],@cls[@cls[@cls[]]]].flatten)
  590. end
  591. # JRuby does not support callcc
  592. # def test_flatten_with_callcc
  593. # respond_to?(:callcc, true) or require 'continuation'
  594. # o = Object.new
  595. # def o.to_ary() callcc {|k| @cont = k; [1,2,3]} end
  596. # begin
  597. # assert_equal([10, 20, 1, 2, 3, 30, 1, 2, 3, 40], [10, 20, o, 30, o, 40].flatten)
  598. # rescue => e
  599. # else
  600. # o.instance_eval {@cont}.call
  601. # end
  602. # assert_instance_of(RuntimeError, e, '[ruby-dev:34798]')
  603. # assert_match(/reentered/, e.message, '[ruby-dev:34798]')
  604. # end
  605. def test_hash
  606. a1 = @cls[ 'cat', 'dog' ]
  607. a2 = @cls[ 'cat', 'dog' ]
  608. a3 = @cls[ 'dog', 'cat' ]
  609. assert(a1.hash == a2.hash)
  610. assert(a1.hash != a3.hash)
  611. end
  612. def test_include?
  613. a = @cls[ 'cat', 99, /a/, @cls[ 1, 2, 3] ]
  614. assert(a.include?('cat'))
  615. assert(a.include?(99))
  616. assert(a.include?(/a/))
  617. assert(a.include?([1,2,3]))
  618. assert(!a.include?('ca'))
  619. assert(!a.include?([1,2]))
  620. end
  621. def test_index
  622. a = @cls[ 'cat', 99, /a/, 99, @cls[ 1, 2, 3] ]
  623. assert_equal(0, a.index('cat'))
  624. assert_equal(1, a.index(99))
  625. assert_equal(4, a.index([1,2,3]))
  626. assert_nil(a.index('ca'))
  627. assert_nil(a.index([1,2]))
  628. end
  629. def test_values_at
  630. a = @cls[*('a'..'j').to_a]
  631. assert_equal(@cls['a', 'c', 'e'], a.values_at(0, 2, 4))
  632. assert_equal(@cls['j', 'h', 'f'], a.values_at(-1, -3, -5))
  633. assert_equal(@cls['h', nil, 'a'], a.values_at(-3, 99, 0))
  634. end
  635. def test_join
  636. $, = ""
  637. a = @cls[]
  638. assert_equal("", a.join)
  639. assert_equal("", a.join(','))
  640. $, = ""
  641. a = @cls[1, 2]
  642. assert_equal("12", a.join)
  643. assert_equal("1,2", a.join(','))
  644. $, = ""
  645. a = @cls[1, 2, 3]
  646. assert_equal("123", a.join)
  647. assert_equal("1,2,3", a.join(','))
  648. $, = ":"
  649. a = @cls[1, 2, 3]
  650. assert_equal("1:2:3", a.join)
  651. assert_equal("1,2,3", a.join(','))
  652. $, = ""
  653. end
  654. def test_last
  655. assert_equal(nil, @cls[].last)
  656. assert_equal(1, @cls[1].last)
  657. assert_equal(99, @cls[*(3..99).to_a].last)
  658. end
  659. def test_length
  660. assert_equal(0, @cls[].length)
  661. assert_equal(1, @cls[1].length)
  662. assert_equal(2, @cls[1, nil].length)
  663. assert_equal(2, @cls[nil, 1].length)
  664. assert_equal(234, @cls[*(0..233).to_a].length)
  665. end
  666. # also update collect!
  667. def test_map!
  668. a = @cls[ 1, 'cat', 1..1 ]
  669. assert_equal(@cls[ Fixnum, String, Range], a.map! {|e| e.class} )
  670. assert_equal(@cls[ Fixnum, String, Range], a)
  671. a = @cls[ 1, 'cat', 1..1 ]
  672. assert_equal(@cls[ 99, 99, 99], a.map! { 99 } )
  673. assert_equal(@cls[ 99, 99, 99], a)
  674. a = @cls[ ]
  675. assert_equal(@cls[], a.map! { 99 })
  676. assert_equal(@cls[], a)
  677. end
  678. def test_nitems
  679. assert_equal(0, @cls[].nitems)
  680. assert_equal(1, @cls[1].nitems)
  681. assert_equal(1, @cls[1, nil].nitems)
  682. assert_equal(1, @cls[nil, 1].nitems)
  683. assert_equal(3, @cls[1, nil, nil, 2, nil, 3, nil].nitems)
  684. end
  685. def test_pack
  686. a = @cls[*%w( cat wombat x yy)]
  687. assert_equal("catwomx yy ", a.pack("A3A3A3A3"))
  688. assert_equal("cat", a.pack("A*"))
  689. assert_equal("cwx yy ", a.pack("A3@1A3@2A3A3"))
  690. assert_equal("catwomx\000\000yy\000", a.pack("a3a3a3a3"))
  691. assert_equal("cat", a.pack("a*"))
  692. assert_equal("ca", a.pack("a2"))
  693. assert_equal("cat\000\000", a.pack("a5"))
  694. assert_equal("\x61", @cls["01100001"].pack("B8"))
  695. assert_equal("\x61", @cls["01100001"].pack("B*"))
  696. assert_equal("\x61", @cls["0110000100110111"].pack("B8"))
  697. assert_equal("\x61\x37", @cls["0110000100110111"].pack("B16"))
  698. assert_equal("\x61\x37", @cls["01100001", "00110111"].pack("B8B8"))
  699. assert_equal("\x60", @cls["01100001"].pack("B4"))
  700. assert_equal("\x40", @cls["01100001"].pack("B2"))
  701. assert_equal("\x86", @cls["01100001"].pack("b8"))
  702. assert_equal("\x86", @cls["01100001"].pack("b*"))
  703. assert_equal("\x86", @cls["0110000100110111"].pack("b8"))
  704. assert_equal("\x86\xec", @cls["0110000100110111"].pack("b16"))
  705. assert_equal("\x86\xec", @cls["01100001", "00110111"].pack("b8b8"))
  706. assert_equal("\x06", @cls["01100001"].pack("b4"))
  707. assert_equal("\x02", @cls["01100001"].pack("b2"))
  708. assert_equal("ABC", @cls[ 65, 66, 67 ].pack("C3"))
  709. assert_equal("\377BC", @cls[ -1, 66, 67 ].pack("C*"))
  710. assert_equal("ABC", @cls[ 65, 66, 67 ].pack("c3"))
  711. assert_equal("\377BC", @cls[ -1, 66, 67 ].pack("c*"))
  712. assert_equal("AB\n\x10", @cls["4142", "0a", "12"].pack("H4H2H1"))
  713. assert_equal("AB\n\x02", @cls["1424", "a0", "21"].pack("h4h2h1"))
  714. assert_equal("abc=02def=\ncat=\n=01=\n",
  715. @cls["abc\002def", "cat", "\001"].pack("M9M3M4"))
  716. assert_equal("aGVsbG8K\n", @cls["hello\n"].pack("m"))
  717. assert_equal(",:&5L;&\\*:&5L;&\\*\n", @cls["hello\nhello\n"].pack("u"))
  718. assert_equal("\xc2\xa9B\xe2\x89\xa0", @cls[0xa9, 0x42, 0x2260].pack("U*"))
  719. format = "c2x5CCxsdils_l_a6";
  720. # Need the expression in here to force ary[5] to be numeric. This avoids
  721. # test2 failing because ary2 goes str->numeric->str and ary does not.
  722. ary = [1, -100, 127, 128, 32767, 987.654321098/100.0,
  723. 12345, 123456, -32767, -123456, "abcdef"]
  724. x = ary.pack(format)
  725. ary2 = x.unpack(format)
  726. assert_equal(ary.length, ary2.length)
  727. assert_equal(ary.join(':'), ary2.join(':'))
  728. assert_not_nil(x =~ /def/)
  729. =begin
  730. skipping "Not tested:
  731. D,d & double-precision float, native format\\
  732. E & double-precision float, little-endian byte order\\
  733. e & single-precision float, little-endian byte order\\
  734. F,f & single-precision float, native format\\
  735. G & double-precision float, network (big-endian) byte order\\
  736. g & single-precision float, network (big-endian) byte order\\
  737. I & unsigned integer\\
  738. i & integer\\
  739. L & unsigned long\\
  740. l & long\\
  741. N & long, network (big-endian) byte order\\
  742. n & short, network (big-endian) byte-order\\
  743. P & pointer to a structure (fixed-length string)\\
  744. p & pointer to a null-terminated string\\
  745. S & unsigned short\\
  746. s & short\\
  747. V & long, little-endian byte order\\
  748. v & short, little-endian byte order\\
  749. X & back up a byte\\
  750. x & null byte\\
  751. Z & ASCII string (null padded, count is width)\\
  752. "
  753. =end
  754. end
  755. def test_pop
  756. a = @cls[ 'cat', 'dog' ]
  757. assert_equal('dog', a.pop)
  758. assert_equal(@cls['cat'], a)
  759. assert_equal('cat', a.pop)
  760. assert_equal(@cls[], a)
  761. assert_nil(a.pop)
  762. assert_equal(@cls[], a)
  763. end
  764. def test_push
  765. a = @cls[1, 2, 3]
  766. assert_equal(@cls[1, 2, 3, 4, 5], a.push(4, 5))
  767. assert_equal(@cls[1, 2, 3, 4, 5, nil], a.push(nil))
  768. # Ruby 1.8 feature:
  769. # Array#push accepts any number of arguments.
  770. #assert_raise(ArgumentError, "a.push()") { a.push() }
  771. a.push
  772. assert_equal @cls[1, 2, 3, 4, 5, nil], a
  773. a.push 6, 7
  774. assert_equal @cls[1, 2, 3, 4, 5, nil, 6, 7], a
  775. end
  776. def test_rassoc
  777. a1 = @cls[*%w( cat feline )]
  778. a2 = @cls[*%w( dog canine )]
  779. a3 = @cls[*%w( mule asinine )]
  780. a = @cls[ a1, a2, a3 ]
  781. assert_equal(a1, a.rassoc('feline'))
  782. assert_equal(a3, a.rassoc('asinine'))
  783. assert_equal(nil, a.rassoc('dog'))
  784. assert_equal(nil, a.rassoc('mule'))
  785. assert_equal(nil, a.rassoc(1..2))
  786. end
  787. # also delete_if
  788. def test_reject!
  789. a = @cls[ 1, 2, 3, 4, 5 ]
  790. assert_equal(nil, a.reject! { false })
  791. assert_equal(@cls[1, 2, 3, 4, 5], a)
  792. a = @cls[ 1, 2, 3, 4, 5 ]
  793. assert_equal(a, a.reject! { true })
  794. assert_equal(@cls[], a)
  795. a = @cls[ 1, 2, 3, 4, 5 ]
  796. assert_equal(a, a.reject! { |i| i > 3 })
  797. assert_equal(@cls[1, 2, 3], a)
  798. end
  799. def test_replace
  800. a = @cls[ 1, 2, 3]
  801. a_id = a.__id__
  802. assert_equal(@cls[4, 5, 6], a.replace(@cls[4, 5, 6]))
  803. assert_equal(@cls[4, 5, 6], a)
  804. assert_equal(a_id, a.__id__)
  805. assert_equal(@cls[], a.replace(@cls[]))
  806. end
  807. def test_reverse
  808. a = @cls[*%w( dog cat bee ant )]
  809. assert_equal(@cls[*%w(ant bee cat dog)], a.reverse)
  810. assert_equal(@cls[*%w(dog cat bee ant)], a)
  811. assert_equal(@cls[], @cls[].reverse)
  812. end
  813. def test_reverse!
  814. a = @cls[*%w( dog cat bee ant )]
  815. assert_equal(@cls[*%w(ant bee cat dog)], a.reverse!)
  816. assert_equal(@cls[*%w(ant bee cat dog)], a)
  817. # Ruby 1.8 feature change:
  818. # Array#reverse always returns self.
  819. #assert_nil(@cls[].reverse!)
  820. assert_equal @cls[], @cls[].reverse!
  821. end
  822. def test_reverse_each
  823. a = @cls[*%w( dog cat bee ant )]
  824. i = a.length
  825. a.reverse_each { |e|
  826. i -= 1
  827. assert_equal(a[i], e)
  828. }
  829. assert_equal(0, i)
  830. a = @cls[]
  831. i = 0
  832. a.reverse_each { |e|
  833. assert(false, "Never get here")
  834. }
  835. assert_equal(0, i)
  836. end
  837. def test_rindex
  838. a = @cls[ 'cat', 99, /a/, 99, [ 1, 2, 3] ]
  839. assert_equal(0, a.rindex('cat'))
  840. assert_equal(3, a.rindex(99))
  841. assert_equal(4, a.rindex([1,2,3]))
  842. assert_nil(a.rindex('ca'))
  843. assert_nil(a.rindex([1,2]))
  844. end
  845. def test_shift
  846. a = @cls[ 'cat', 'dog' ]
  847. assert_equal('cat', a.shift)
  848. assert_equal(@cls['dog'], a)
  849. assert_equal('dog', a.shift)
  850. assert_equal(@cls[], a)
  851. assert_nil(a.shift)
  852. assert_equal(@cls[], a)
  853. end
  854. def test_size
  855. assert_equal(0, @cls[].size)
  856. assert_equal(1, @cls[1].size)
  857. assert_equal(100, @cls[*(0..99).to_a].size)
  858. end
  859. def test_slice
  860. a = @cls[*(1..100).to_a]
  861. assert_equal(1, a.slice(0))
  862. assert_equal(100, a.slice(99))
  863. assert_nil(a.slice(100))
  864. assert_equal(100, a.slice(-1))
  865. assert_equal(99, a.slice(-2))
  866. assert_equal(1, a.slice(-100))
  867. assert_nil(a.slice(-101))
  868. assert_equal(@cls[1], a.slice(0,1))
  869. assert_equal(@cls[100], a.slice(99,1))
  870. assert_equal(@cls[], a.slice(100,1))
  871. assert_equal(@cls[100], a.slice(99,100))
  872. assert_equal(@cls[100], a.slice(-1,1))
  873. assert_equal(@cls[99], a.slice(-2,1))
  874. assert_equal(@cls[10, 11, 12], a.slice(9, 3))
  875. assert_equal(@cls[10, 11, 12], a.slice(-91, 3))
  876. assert_nil(a.slice(-101, 2))
  877. assert_equal(@cls[1], a.slice(0..0))
  878. assert_equal(@cls[100], a.slice(99..99))
  879. assert_equal(@cls[], a.slice(100..100))
  880. assert_equal(@cls[100], a.slice(99..200))
  881. assert_equal(@cls[100], a.slice(-1..-1))
  882. assert_equal(@cls[99], a.slice(-2..-2))
  883. assert_equal(@cls[10, 11, 12], a.slice(9..11))
  884. assert_equal(@cls[10, 11, 12], a.slice(-91..-89))
  885. assert_nil(a.slice(-101..-1))
  886. assert_nil(a.slice(10, -3))
  887. # Ruby 1.8 feature change:
  888. # Array#slice[size..x] always returns [].
  889. #assert_nil(a.slice(10..7))
  890. assert_equal @cls[], a.slice(10..7)
  891. end
  892. def test_slice!
  893. a = @cls[1, 2, 3, 4, 5]
  894. assert_equal(3, a.slice!(2))
  895. assert_equal(@cls[1, 2, 4, 5], a)
  896. a = @cls[1, 2, 3, 4, 5]
  897. assert_equal(4, a.slice!(-2))
  898. assert_equal(@cls[1, 2, 3, 5], a)
  899. a = @cls[1, 2, 3, 4, 5]
  900. assert_equal(@cls[3,4], a.slice!(2,2))
  901. assert_equal(@cls[1, 2, 5], a)
  902. a = @cls[1, 2, 3, 4, 5]
  903. assert_equal(@cls[4,5], a.slice!(-2,2))
  904. assert_equal(@cls[1, 2, 3], a)
  905. a = @cls[1, 2, 3, 4, 5]
  906. assert_equal(@cls[3,4], a.slice!(2..3))
  907. assert_equal(@cls[1, 2, 5], a)
  908. a = @cls[1, 2, 3, 4, 5]
  909. assert_equal(nil, a.slice!(20))
  910. assert_equal(@cls[1, 2, 3, 4, 5], a)
  911. a = @cls[1, 2, 3, 4, 5]
  912. assert_equal(nil, a.slice!(-6))
  913. assert_equal(@cls[1, 2, 3, 4, 5], a)
  914. a = @cls[1, 2, 3, 4, 5]
  915. assert_equal(nil, a.slice!(-6..4))
  916. assert_equal(@cls[1, 2, 3, 4, 5], a)
  917. a = @cls[1, 2, 3, 4, 5]
  918. assert_equal(nil, a.slice!(-6,2))
  919. assert_equal(@cls[1, 2, 3, 4, 5], a)
  920. end
  921. def test_sort
  922. a = @cls[ 4, 1, 2, 3 ]
  923. assert_equal(@cls[1, 2, 3, 4], a.sort)
  924. assert_equal(@cls[4, 1, 2, 3], a)
  925. assert_equal(@cls[4, 3, 2, 1], a.sort { |x, y| y <=> x} )
  926. assert_equal(@cls[4, 1, 2, 3], a)
  927. a.fill(1)
  928. assert_equal(@cls[1, 1, 1, 1], a.sort)
  929. assert_equal(@cls[], @cls[].sort)
  930. end
  931. def test_sort!
  932. a = @cls[ 4, 1, 2, 3 ]
  933. assert_equal(@cls[1, 2, 3, 4], a.sort!)
  934. assert_equal(@cls[1, 2, 3, 4], a)
  935. assert_equal(@cls[4, 3, 2, 1], a.sort! { |x, y| y <=> x} )
  936. assert_equal(@cls[4, 3, 2, 1], a)
  937. a.fill(1)
  938. assert_equal(@cls[1, 1, 1, 1], a.sort!)
  939. assert_equal(@cls[1], @cls[1].sort!)
  940. assert_equal(@cls[], @cls[].sort!)
  941. end
  942. def test_to_a
  943. a = @cls[ 1, 2, 3 ]
  944. a_id = a.__id__
  945. assert_equal(a, a.to_a)
  946. assert_equal(a_id, a.to_a.__id__)
  947. end
  948. def test_to_ary
  949. a = [ 1, 2, 3 ]
  950. b = @cls[*a]
  951. a_id = a.__id__
  952. assert_equal(a, b.to_ary)
  953. if (@cls == Array)
  954. assert_equal(a_id, a.to_ary.__id__)
  955. end
  956. end
  957. def test_to_s
  958. $, = ""
  959. a = @cls[]
  960. assert_equal("", a.to_s)
  961. $, = ""
  962. a = @cls[1, 2]
  963. assert_equal("12", a.to_s)
  964. $, = ""
  965. a = @cls[1, 2, 3]
  966. assert_equal("123", a.to_s)
  967. $, = ":"
  968. a = @cls[1, 2, 3]
  969. assert_equal("1:2:3", a.to_s)
  970. $, = ""
  971. end
  972. def test_uniq
  973. a = @cls[ 1, 2, 3, 2, 1, 2, 3, 4, nil ]
  974. b = a.dup
  975. assert_equal(@cls[1, 2, 3, 4, nil], a.uniq)
  976. assert_equal(b, a)
  977. assert_equal(@cls[1, 2, 3], @cls[1, 2, 3].uniq)
  978. end
  979. def test_uniq!
  980. a = @cls[ 1, 2, 3, 2, 1, 2, 3, 4, nil ]
  981. assert_equal(@cls[1, 2, 3, 4, nil], a.uniq!)
  982. assert_equal(@cls[1, 2, 3, 4, nil], a)
  983. assert_nil(@cls[1, 2, 3].uniq!)
  984. end
  985. def test_unshift
  986. a = @cls[]
  987. assert_equal(@cls['cat'], a.unshift('cat'))
  988. assert_equal(@cls['dog', 'cat'], a.unshift('dog'))
  989. assert_equal(@cls[nil, 'dog', 'cat'], a.unshift(nil))
  990. assert_equal(@cls[@cls[1,2], nil, 'dog', 'cat'], a.unshift(@cls[1, 2]))
  991. end
  992. def test_OR # '|'
  993. assert_equal(@cls[], @cls[] | @cls[])
  994. assert_equal(@cls[1], @cls[1] | @cls[])
  995. assert_equal(@cls[1], @cls[] | @cls[1])
  996. assert_equal(@cls[1], @cls[1] | @cls[1])
  997. assert_equal(@cls[1,2], @cls[1] | @cls[2])
  998. assert_equal(@cls[1,2], @cls[1, 1] | @cls[2, 2])
  999. assert_equal(@cls[1,2], @cls[1, 2] | @cls[1, 2])
  1000. end
  1001. def test_combination
  1002. assert_equal(@cls[[]], @cls[1,2,3,4].combination(0).to_a)
  1003. assert_equal(@cls[[1],[2],[3],[4]], @cls[1,2,3,4].combination(1).to_a)
  1004. assert_equal(@cls[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]], @cls[1,2,3,4].combination(2).to_a)
  1005. assert_equal(@cls[[1,2,3],[1,2,4],[1,3,4],[2,3,4]], @cls[1,2,3,4].combination(3).to_a)
  1006. assert_equal(@cls[[1,2,3,4]], @cls[1,2,3,4].combination(4).to_a)
  1007. assert_equal(@cls[], @cls[1,2,3,4].combination(5).to_a)
  1008. end
  1009. def test_product
  1010. assert_equal(@cls[[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]],
  1011. @cls[1,2,3].product([4,5]))
  1012. assert_equal(@cls[[1,1],[1,2],[2,1],[2,2]], @cls[1,2].product([1,2]))
  1013. assert_equal(@cls[[1,3,5],[1,3,6],[1,4,5],[1,4,6],
  1014. [2,3,5],[2,3,6],[2,4,5],[2,4,6]],
  1015. @cls[1,2].product([3,4],[5,6]))
  1016. assert_equal(@cls[[1],[2]], @cls[1,2].product)
  1017. assert_equal(@cls[], @cls[1,2].product([]))
  1018. end
  1019. def test_permutation
  1020. a = @cls[1,2,3]
  1021. assert_equal(@cls[[]], a.permutation(0).to_a)
  1022. assert_equal(@cls[[1],[2],[3]], a.permutation(1).to_a.sort)
  1023. assert_equal(@cls[[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]],
  1024. a.permutation(2).to_a.sort)
  1025. assert_equal(@cls[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]],
  1026. a.permutation(3).sort.to_a)
  1027. assert_equal(@cls[], a.permutation(4).to_a)
  1028. assert_equal(@cls[], a.permutation(-1).to_a)
  1029. assert_equal("abcde".each_char.to_a.permutation(5).sort,
  1030. "edcba".each_char.to_a.permutation(5).sort)
  1031. assert_equal(@cls[].permutation(0).to_a, @cls[[]])
  1032. end
  1033. def test_take
  1034. assert_equal([1,2,3], [1,2,3,4,5,0].take(3))
  1035. assert_raise(ArgumentError, '[ruby-dev:34123]') { [1,2].take(-1) }
  1036. assert_equal([1,2], [1,2].take(1000000000), '[ruby-dev:34123]')
  1037. end
  1038. def test_take_while
  1039. assert_equal([1,2], [1,2,3,4,5,0].take_while {|i| i < 3 })
  1040. end
  1041. def test_drop
  1042. assert_equal([4,5,0], [1,2,3,4,5,0].drop(3))
  1043. assert_raise(ArgumentError, '[ruby-dev:34123]') { [1,2].drop(-1) }
  1044. assert_equal([], [1,2].drop(1000000000), '[ruby-dev:34123]')
  1045. end
  1046. def test_drop_while
  1047. assert_equal([3,4,5,0], [1,2,3,4,5,0].drop_while {|i| i < 3 })
  1048. end
  1049. end