PageRenderTime 50ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/jruby-1.7.3/test/rubicon/test_array.rb

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Ruby | 1166 lines | 928 code | 201 blank | 37 comment | 63 complexity | 0b36d1b8ddc3082f08f8f29b7e4a2e94 MD5 | raw file
  1. require 'test/unit'
  2. class TestArray < Test::Unit::TestCase
  3. IS19 = RUBY_VERSION =~ /1\.9/
  4. def setup
  5. super
  6. @cls = Array
  7. end
  8. def test_00_new
  9. # no argument
  10. a = @cls.new()
  11. assert_instance_of(@cls, a)
  12. assert_equal(0, a.length)
  13. assert_nil(a[0])
  14. # a length argument
  15. a = @cls.new(3)
  16. assert_instance_of(@cls, a)
  17. assert_equal(3, a.length)
  18. assert_nil(a[0])
  19. assert_nil(a[1])
  20. assert_nil(a[2])
  21. # length and value arguments
  22. a = @cls.new(3, "value")
  23. assert_instance_of(@cls, a)
  24. assert_equal(3, a.length)
  25. assert_equal("value", a[0])
  26. assert_equal("value", a[1])
  27. assert_equal("value", a[2])
  28. # length and value arguments:
  29. # even same instance in all array entries
  30. v = ["some", "complex", "value"]
  31. a = @cls.new(3, v)
  32. assert_instance_of(@cls, a)
  33. assert_equal(3, a.length)
  34. assert_same(v, a[0])
  35. assert_same(v, a[1])
  36. assert_same(v, a[2])
  37. # one argument that is an array:
  38. # like a "replace"
  39. v = @cls["some", "array", "value"]
  40. a = @cls.new(v)
  41. assert_instance_of(@cls, a)
  42. assert_equal(3, a.length)
  43. assert_not_same(v, a)
  44. assert_same(v[0], a[0])
  45. assert_same(v[1], a[1])
  46. assert_same(v[2], a[2])
  47. # with a block
  48. a = @cls.new(3) {|i| [i + 10] }
  49. assert_instance_of(@cls, a)
  50. assert_equal(3, a.length)
  51. 3.times {|i| assert_equal([i + 10], a[i]) }
  52. # error cases
  53. assert_raise(ArgumentError) { @cls.new(-10) }
  54. end
  55. def test_01_square_brackets
  56. a = @cls[ 5, 4, 3, 2, 1 ]
  57. assert_instance_of(@cls, a)
  58. assert_equal(5, a.length)
  59. 5.times { |i| assert_equal(5-i, a[i]) }
  60. assert_nil(a[6])
  61. a = @cls[]
  62. assert_instance_of(@cls, a)
  63. assert_equal(0, a.length)
  64. end
  65. def test_AND # '&'
  66. assert_equal(@cls[1, 3], @cls[ 1, 1, 3, 5 ] & @cls[ 1, 2, 3 ])
  67. assert_equal(@cls[1, 3], @cls[ 1, 1, 3, 5 ] & @cls[ 3, 2, 1 ])
  68. assert_equal(@cls[1, 3], @cls[ 1, 1, 3, 5 ] & @cls[ 3, 3, 2, 1 ])
  69. assert_equal(@cls[], @cls[ 1, 1, 3, 5 ] & @cls[ ])
  70. assert_equal(@cls[], @cls[ ] & @cls[ 1, 2, 3 ])
  71. assert_equal(@cls[], @cls[ 1, 2, 3 ] & @cls[ 4, 5, 6 ])
  72. # == is not used
  73. a1 = 1
  74. a2 = 1.0
  75. assert_equal(true, a1 == a2)
  76. assert_equal(false, a1.eql?(a2))
  77. assert_equal(@cls[2], @cls[ a1, 2, 3 ] & @cls[ a2, 2, 4 ])
  78. # eql? is used
  79. a1 = [1,2]
  80. a2 = [1,2]
  81. assert_equal(true, a1 == a2)
  82. assert_equal(true, a1.eql?(a2))
  83. assert_equal(@cls[[1,2], 2], @cls[ a1, 2, 3 ] & @cls[ a2, 2, 4 ])
  84. # error case
  85. assert_raise(TypeError) { @cls[ 1, 1, 3, 5 ] & Object.new }
  86. end
  87. def test_MUL # '*'
  88. assert_equal(@cls[], @cls[]*3)
  89. assert_equal(@cls[1, 1, 1], @cls[1]*3)
  90. assert_equal(@cls[1, 2, 1, 2, 1, 2], @cls[1, 2]*3)
  91. assert_equal(@cls[], @cls[1, 2, 3] * 0)
  92. assert_raise(ArgumentError) { @cls[1, 2]*(-3) }
  93. assert_raise(TypeError) { @cls[1, 2]*(Object.new) }
  94. assert_equal('1-2-3-4-5', @cls[1, 2, 3, 4, 5] * '-')
  95. assert_equal('12345', @cls[1, 2, 3, 4, 5] * '')
  96. end
  97. def test_PLUS # '+'
  98. assert_equal(@cls[], @cls[] + @cls[])
  99. assert_equal(@cls[1], @cls[1] + @cls[])
  100. assert_equal(@cls[1], @cls[] + @cls[1])
  101. assert_equal(@cls[1, 1], @cls[1] + @cls[1])
  102. assert_equal(@cls['cat', 'dog', 1, 2, 3], %w(cat dog) + (1..3).to_a)
  103. end
  104. def test_MINUS # '-'
  105. assert_equal(@cls[], @cls[1] - @cls[1])
  106. assert_equal(@cls[1], @cls[1, 2, 3, 4, 5] - @cls[2, 3, 4, 5])
  107. assert_equal(@cls[1,1,1,1], @cls[1, 2, 1, 3, 1, 4, 1, 5] - @cls[2, 3, 4, 5])
  108. a = @cls[]
  109. to_contrast = @cls[]
  110. 1000.times { a << 1 }
  111. 1000.times { to_contrast << 1}
  112. assert_equal(1000, a.length)
  113. assert_equal(to_contrast, a - @cls[2])
  114. assert_equal(@cls[1,1], @cls[ 1, 2, 1] - @cls[2])
  115. assert_equal(@cls[1, 2, 3], @cls[1, 2, 3] - @cls[4, 5, 6])
  116. end
  117. def test_LSHIFT # '<<'
  118. a = @cls[]
  119. res = a << 1
  120. assert_equal(@cls[1], a)
  121. assert_same(a, res)
  122. res = a << 2 << 3
  123. assert_equal(@cls[1, 2, 3], a)
  124. assert_same(a, res)
  125. res = a << nil << 'cat'
  126. assert_equal(@cls[1, 2, 3, nil, 'cat'], a)
  127. assert_same(a, res)
  128. res = a << a
  129. assert_equal(@cls[1, 2, 3, nil, 'cat', a], a)
  130. assert_same(a, res)
  131. end
  132. def test_CMP # '<=>'
  133. assert_equal(0, @cls[] <=> @cls[])
  134. assert_equal(0, @cls[1] <=> @cls[1])
  135. assert_equal(0, @cls[1, 2, 3, 'cat'] <=> @cls[1, 2, 3, 'cat'])
  136. assert_equal(-1, @cls[] <=> @cls[1])
  137. assert_equal(1, @cls[1] <=> @cls[])
  138. assert_equal(-1, @cls[1, 2, 3] <=> @cls[1, 2, 3, 'cat'])
  139. assert_equal(1, @cls[1, 2, 3, 'cat'] <=> @cls[1, 2, 3])
  140. assert_equal(-1, @cls[1, 2, 3, 'cat'] <=> @cls[1, 2, 3, 'dog'])
  141. assert_equal(1, @cls[1, 2, 3, 'dog'] <=> @cls[1, 2, 3, 'cat'])
  142. assert_equal(0, @cls[1] <=> @cls[1.000])
  143. assert_equal(-1, @cls[1] <=> @cls[1.001])
  144. assert_equal(1, @cls[1] <=> @cls[0.999])
  145. # nested arrays
  146. assert_equal(0, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 3], 5])
  147. assert_equal(1, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 2], 5])
  148. assert_equal(-1, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 4], 5])
  149. assert_equal(1, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 3], 4])
  150. assert_equal(-1, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 3], 6])
  151. # error cases
  152. assert_equal(nil, @cls[1,2,3] <=> @cls[1, "two", 3])
  153. # FIXME: JRUBY-1354 SystemStackError is untestable, because it is unpredictable
  154. #a = @cls[1,2,3]
  155. #a.push(a)
  156. #assert_raise(SystemStackError) { a <=> a }
  157. end
  158. def test_EQUAL # '=='
  159. assert_equal(true, @cls[] == @cls[])
  160. assert_equal(false, @cls[] == @cls[nil])
  161. assert_equal(false, @cls[] == @cls[9])
  162. assert_equal(false, @cls[8] == @cls[9])
  163. assert_equal(false, @cls[8] == @cls[])
  164. assert_equal(false, @cls[nil] == @cls[])
  165. assert_equal(true, @cls[1] == @cls[1])
  166. assert_equal(false, @cls[1] == Object.new)
  167. assert_equal(true, @cls[1, 1, 2, 2] == @cls[1, 1, 2, 2])
  168. assert_equal(false, @cls[1, 9, 2, 2] == @cls[1, 1, 2, 2])
  169. assert_equal(false, @cls[1, 1, 2, 2] == @cls[1, 1, 2, 2, 9])
  170. assert_equal(false, @cls[1, 1, 2, 2] == @cls[1, 1, 2])
  171. # elements are compared with ==
  172. assert_equal(true, @cls[1] == @cls[1.000])
  173. assert_equal(false, @cls[1] == @cls[1.001])
  174. assert_equal(true, @cls[1.0, 1.0, 2.0, 2.0] == @cls[1, 1, 2, 2])
  175. assert_equal(false, @cls[1.0, 1.0, 2.001, 2.0] == @cls[1, 1, 2, 2])
  176. # nested arrays
  177. assert_equal(true, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33],44])
  178. assert_equal(true, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33.0],44])
  179. assert_equal(false, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,99],44])
  180. assert_equal(false, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33,99],44])
  181. end
  182. def test_VERY_EQUAL # '==='
  183. # === is the same as == for arrays, so the tests below are
  184. # copies of the ones in test_EQUAL
  185. assert_equal(true, @cls[] == @cls[])
  186. assert_equal(false, @cls[] == @cls[nil])
  187. assert_equal(false, @cls[] == @cls[9])
  188. assert_equal(false, @cls[8] == @cls[9])
  189. assert_equal(false, @cls[8] == @cls[])
  190. assert_equal(false, @cls[nil] == @cls[])
  191. assert_equal(true, @cls[1] == @cls[1])
  192. assert_equal(false, @cls[1] == Object.new)
  193. assert_equal(true, @cls[1, 1, 2, 2] == @cls[1, 1, 2, 2])
  194. assert_equal(false, @cls[1, 9, 2, 2] == @cls[1, 1, 2, 2])
  195. assert_equal(false, @cls[1, 1, 2, 2] == @cls[1, 1, 2, 2, 9])
  196. assert_equal(false, @cls[1, 1, 2, 2] == @cls[1, 1, 2])
  197. # elements are compared with ==
  198. assert_equal(true, @cls[1] == @cls[1.000])
  199. assert_equal(false, @cls[1] == @cls[1.001])
  200. assert_equal(true, @cls[1.0, 1.0, 2.0, 2.0] == @cls[1, 1, 2, 2])
  201. assert_equal(false, @cls[1.0, 1.0, 2.001, 2.0] == @cls[1, 1, 2, 2])
  202. # nested arrays
  203. assert_equal(true, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33],44])
  204. assert_equal(true, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33.0],44])
  205. assert_equal(false, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,99],44])
  206. assert_equal(false, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33,99],44])
  207. end
  208. def test_AREF # '[]'
  209. a = @cls[*(1..100).to_a]
  210. assert_equal(1, a[0])
  211. assert_equal(100, a[99])
  212. assert_nil(a[100])
  213. assert_equal(100, a[-1])
  214. assert_equal(99, a[-2])
  215. assert_equal(1, a[-100])
  216. assert_nil(a[-101])
  217. assert_nil(a[-101,0])
  218. assert_nil(a[-101,1])
  219. assert_nil(a[-101,-1])
  220. assert_nil(a[10,-1])
  221. assert_equal(@cls[1], a[0,1])
  222. assert_equal(@cls[100], a[99,1])
  223. assert_equal(@cls[], a[100,1])
  224. assert_equal(@cls[100], a[99,100])
  225. assert_equal(@cls[100], a[-1,1])
  226. assert_equal(@cls[99], a[-2,1])
  227. assert_equal(@cls[], a[-100,0])
  228. assert_equal(@cls[1], a[-100,1])
  229. assert_equal(@cls[10, 11, 12], a[9, 3])
  230. assert_equal(@cls[10, 11, 12], a[-91, 3])
  231. assert_equal(@cls[1], a[0..0])
  232. assert_equal(@cls[100], a[99..99])
  233. assert_equal(@cls[], a[100..100])
  234. assert_equal(@cls[100], a[99..200])
  235. assert_equal(@cls[100], a[-1..-1])
  236. assert_equal(@cls[99], a[-2..-2])
  237. assert_equal(@cls[10, 11, 12], a[9..11])
  238. assert_equal(@cls[10, 11, 12], a[-91..-89])
  239. assert_nil(a[10, -3])
  240. assert_equal([], a[10..7])
  241. assert_raise(TypeError) {a['cat']}
  242. end
  243. def test_ASET # '[]='
  244. a = @cls[*(0..99).to_a]
  245. assert_equal(0, a[0] = 0)
  246. assert_equal(@cls[0] + @cls[*(1..99).to_a], a)
  247. a = @cls[*(0..99).to_a]
  248. assert_equal(0, a[10,10] = 0)
  249. assert_equal(@cls[*(0..9).to_a] + @cls[0] + @cls[*(20..99).to_a], a)
  250. a = @cls[*(0..99).to_a]
  251. assert_equal(0, a[-1] = 0)
  252. assert_equal(@cls[*(0..98).to_a] + @cls[0], a)
  253. a = @cls[*(0..99).to_a]
  254. assert_equal(0, a[-10, 10] = 0)
  255. assert_equal(@cls[*(0..89).to_a] + @cls[0], a)
  256. a = @cls[*(0..99).to_a]
  257. assert_equal(0, a[0,1000] = 0)
  258. assert_equal(@cls[0] , a)
  259. a = @cls[*(0..99).to_a]
  260. assert_equal(0, a[10..19] = 0)
  261. assert_equal(@cls[*(0..9).to_a] + @cls[0] + @cls[*(20..99).to_a], a)
  262. b = @cls[*%w( a b c )]
  263. a = @cls[*(0..99).to_a]
  264. assert_equal(b, a[0,1] = b)
  265. assert_equal(b + @cls[*(1..99).to_a], a)
  266. a = @cls[*(0..99).to_a]
  267. assert_equal(b, a[10,10] = b)
  268. assert_equal(@cls[*(0..9).to_a] + b + @cls[*(20..99).to_a], a)
  269. a = @cls[*(0..99).to_a]
  270. assert_equal(b, a[-1, 1] = b)
  271. assert_equal(@cls[*(0..98).to_a] + b, a)
  272. a = @cls[*(0..99).to_a]
  273. assert_equal(b, a[-10, 10] = b)
  274. assert_equal(@cls[*(0..89).to_a] + b, a)
  275. a = @cls[*(0..99).to_a]
  276. assert_equal(b, a[0,1000] = b)
  277. assert_equal(b , a)
  278. a = @cls[*(0..99).to_a]
  279. assert_equal(b, a[10..19] = b)
  280. assert_equal(@cls[*(0..9).to_a] + b + @cls[*(20..99).to_a], a)
  281. a = @cls[*(0..99).to_a]
  282. assert_equal(nil, a[0,1] = nil)
  283. if IS19
  284. assert_equal(@cls[nil, *(1..99).to_a], a)
  285. else
  286. assert_equal(@cls[*(1..99).to_a], a)
  287. end
  288. a = @cls[*(0..99).to_a]
  289. assert_equal(nil, a[10,10] = nil)
  290. if IS19
  291. assert_equal(@cls[*(0..9).to_a] + @cls[nil, *(20..99).to_a], a)
  292. else
  293. assert_equal(@cls[*(0..9).to_a] + @cls[*(20..99).to_a], a)
  294. end
  295. a = @cls[*(0..99).to_a]
  296. assert_equal(nil, a[-1, 1] = nil)
  297. if IS19
  298. assert_equal(@cls[*(0..98).to_a] + [nil], a)
  299. else
  300. assert_equal(@cls[*(0..98).to_a], a)
  301. end
  302. a = @cls[*(0..99).to_a]
  303. assert_equal(nil, a[-10, 10] = nil)
  304. if IS19
  305. assert_equal(@cls[*(0..89).to_a] + [nil], a)
  306. else
  307. assert_equal(@cls[*(0..89).to_a], a)
  308. end
  309. a = @cls[*(0..99).to_a]
  310. assert_equal(nil, a[0,1000] = nil)
  311. if IS19
  312. assert_equal(@cls[nil] , a)
  313. else
  314. assert_equal(@cls[] , a)
  315. end
  316. a = @cls[*(0..99).to_a]
  317. assert_equal(nil, a[10..19] = nil)
  318. if IS19
  319. assert_equal(@cls[*(0..9).to_a] + @cls[nil, *(20..99).to_a], a)
  320. else
  321. assert_equal(@cls[*(0..9).to_a] + @cls[*(20..99).to_a], a)
  322. end
  323. a = @cls[1, 2, 3]
  324. a[1, 0] = a
  325. assert_equal([1, 1, 2, 3, 2, 3], a)
  326. a = @cls[1, 2, 3]
  327. a[-1, 0] = a
  328. assert_equal([1, 2, 1, 2, 3, 3], a)
  329. end
  330. def test_assoc
  331. a1 = @cls[*%w( cat feline )]
  332. a2 = @cls[*%w( dog canine )]
  333. a3 = @cls[*%w( mule asinine )]
  334. a4 = @cls[*%w( mule asinine )]
  335. a = @cls[ a1, a2, a3, a4 ]
  336. assert_same(a1, a.assoc('cat'))
  337. assert_same(a3, a.assoc('mule'))
  338. assert_same(nil, a.assoc('asinine'))
  339. assert_same(nil, a.assoc('wombat'))
  340. assert_same(nil, a.assoc(1..2))
  341. end
  342. def test_at
  343. a = @cls[*(0..99).to_a]
  344. assert_equal(0, a.at(0))
  345. assert_equal(10, a.at(10))
  346. assert_equal(99, a.at(99))
  347. assert_equal(nil, a.at(100))
  348. assert_equal(99, a.at(-1))
  349. assert_equal(0, a.at(-100))
  350. assert_equal(nil, a.at(-101))
  351. assert_raise(TypeError) { a.at('cat') }
  352. end
  353. def test_clear
  354. a = @cls[1, 2, 3]
  355. b = a.clear
  356. assert_equal(@cls[], a)
  357. assert_equal(@cls[], b)
  358. assert_equal(a.__id__, b.__id__)
  359. end
  360. def test_clone
  361. for taint in [ false, true ]
  362. for frozen in [ false, true ]
  363. a = @cls[*(0..99).to_a]
  364. a.taint if taint
  365. a.freeze if frozen
  366. b = a.clone
  367. assert_equal(a, b)
  368. assert(a.__id__ != b.__id__)
  369. assert_equal(a.frozen?, b.frozen?)
  370. assert_equal(a.tainted?, b.tainted?)
  371. end
  372. end
  373. end
  374. def test_collect
  375. a = @cls[ 1, 'cat', 1..1 ]
  376. assert_equal([ Fixnum, String, Range], a.collect {|e| e.class} )
  377. assert_equal([ 99, 99, 99], a.collect { 99 } )
  378. assert_equal([], @cls[].collect { 99 })
  379. assert_equal([1, 2, 3], @cls[1, 2, 3].collect) unless IS19
  380. end
  381. def test_collect!
  382. generic_test_collect!(:collect!)
  383. end
  384. def generic_test_collect!(method)
  385. a = @cls[ 1, 'cat', 1..1 ]
  386. res = a.send(method) {|e| e.class}
  387. assert_equal([ Fixnum, String, Range], a)
  388. assert_same(a, res)
  389. a = @cls[ 1, 'cat', 1..1 ]
  390. res = a.send(method) { 99 }
  391. assert_equal([ 99, 99, 99], a)
  392. assert_equal(a, res)
  393. a = @cls[ ]
  394. res = a.send(method) { 99 }
  395. assert_equal([], a)
  396. assert_equal(a, res)
  397. end
  398. def test_compact
  399. a = @cls[ 1, nil, nil, 2, 3, nil, 4 ]
  400. assert_equal(@cls[1, 2, 3, 4], a.compact)
  401. a = @cls[ nil, 1, nil, 2, 3, nil, 4 ]
  402. assert_equal(@cls[1, 2, 3, 4], a.compact)
  403. a = @cls[ 1, nil, nil, 2, 3, nil, 4, nil ]
  404. assert_equal(@cls[1, 2, 3, 4], a.compact)
  405. a = @cls[ 1, 2, 3, 4 ]
  406. assert_equal(@cls[1, 2, 3, 4], a.compact)
  407. end
  408. def test_compact!
  409. a = @cls[ 1, nil, nil, 2, 3, nil, 4 ]
  410. assert_equal(@cls[1, 2, 3, 4], a.compact!)
  411. assert_equal(@cls[1, 2, 3, 4], a)
  412. a = @cls[ nil, 1, nil, 2, 3, nil, 4 ]
  413. assert_equal(@cls[1, 2, 3, 4], a.compact!)
  414. assert_equal(@cls[1, 2, 3, 4], a)
  415. a = @cls[ 1, nil, nil, 2, 3, nil, 4, nil ]
  416. assert_equal(@cls[1, 2, 3, 4], a.compact!)
  417. assert_equal(@cls[1, 2, 3, 4], a)
  418. a = @cls[ 1, 2, 3, 4 ]
  419. assert_equal(nil, a.compact!)
  420. assert_equal(@cls[1, 2, 3, 4], a)
  421. end
  422. def test_concat
  423. assert_equal(@cls[1, 2, 3, 4], @cls[1, 2].concat(@cls[3, 4]))
  424. assert_equal(@cls[1, 2, 3, 4], @cls[].concat(@cls[1, 2, 3, 4]))
  425. assert_equal(@cls[1, 2, 3, 4], @cls[1, 2, 3, 4].concat(@cls[]))
  426. assert_equal(@cls[], @cls[].concat(@cls[]))
  427. assert_equal(@cls[@cls[1, 2], @cls[3, 4]], @cls[@cls[1, 2]].concat(@cls[@cls[3, 4]]))
  428. a = @cls[1, 2, 3]
  429. a.concat(a)
  430. assert_equal([1, 2, 3, 1, 2, 3], a)
  431. end
  432. def test_delete
  433. a = @cls[*('cab'..'cat').to_a]
  434. assert_equal('cap', a.delete('cap'))
  435. assert_equal(@cls[*('cab'..'cao').to_a] + @cls[*('caq'..'cat').to_a], a)
  436. a = @cls[*('cab'..'cat').to_a]
  437. assert_equal('cab', a.delete('cab'))
  438. assert_equal(@cls[*('cac'..'cat').to_a], a)
  439. a = @cls[*('cab'..'cat').to_a]
  440. assert_equal('cat', a.delete('cat'))
  441. assert_equal(@cls[*('cab'..'cas').to_a], a)
  442. a = @cls[*('cab'..'cat').to_a]
  443. assert_equal(nil, a.delete('cup'))
  444. assert_equal(@cls[*('cab'..'cat').to_a], a)
  445. a = @cls[*('cab'..'cat').to_a]
  446. assert_equal(99, a.delete('cup') { 99 } )
  447. assert_equal(@cls[*('cab'..'cat').to_a], a)
  448. end
  449. def test_delete_at
  450. a = @cls[*(1..5).to_a]
  451. assert_equal(3, a.delete_at(2))
  452. assert_equal(@cls[1, 2, 4, 5], a)
  453. a = @cls[*(1..5).to_a]
  454. assert_equal(4, a.delete_at(-2))
  455. assert_equal(@cls[1, 2, 3, 5], a)
  456. a = @cls[*(1..5).to_a]
  457. assert_equal(nil, a.delete_at(5))
  458. assert_equal(@cls[1, 2, 3, 4, 5], a)
  459. a = @cls[*(1..5).to_a]
  460. assert_equal(nil, a.delete_at(-6))
  461. assert_equal(@cls[1, 2, 3, 4, 5], a)
  462. end
  463. # almost identical to reject!
  464. def test_delete_if
  465. a = @cls[ 1, 2, 3, 4, 5 ]
  466. assert_equal(a, a.delete_if { false }) # reject! returns nil here
  467. assert_equal(@cls[1, 2, 3, 4, 5], a)
  468. a = @cls[ 1, 2, 3, 4, 5 ]
  469. assert_equal(a, a.delete_if { true })
  470. assert_equal(@cls[], a)
  471. a = @cls[ 1, 2, 3, 4, 5 ]
  472. assert_equal(a, a.delete_if { |i| i > 3 })
  473. assert_equal(@cls[1, 2, 3], a)
  474. end
  475. def test_dup
  476. for taint in [ false, true ]
  477. for frozen in [ false, true ]
  478. a = @cls[*(0..99).to_a]
  479. a.taint if taint
  480. a.freeze if frozen
  481. b = a.dup
  482. assert_equal(a, b)
  483. assert(a.__id__ != b.__id__)
  484. assert_equal(false, b.frozen?)
  485. assert_equal(a.tainted?, b.tainted?)
  486. end
  487. end
  488. end
  489. def test_each
  490. a = @cls[*%w( ant bat cat dog )]
  491. i = 0
  492. a.each { |e|
  493. assert_equal(a[i], e)
  494. i += 1
  495. }
  496. assert_equal(4, i)
  497. a = @cls[]
  498. i = 0
  499. a.each { |e|
  500. assert_equal(a[i], e)
  501. i += 1
  502. }
  503. assert_equal(0, i)
  504. assert_equal(a, a.each {})
  505. end
  506. def test_each_index
  507. a = @cls[*%w( ant bat cat dog )]
  508. i = 0
  509. a.each_index { |ind|
  510. assert_equal(i, ind)
  511. i += 1
  512. }
  513. assert_equal(4, i)
  514. a = @cls[]
  515. i = 0
  516. a.each_index { |ind|
  517. assert_equal(i, ind)
  518. i += 1
  519. }
  520. assert_equal(0, i)
  521. assert_equal(a, a.each_index {})
  522. end
  523. def test_empty?
  524. assert(@cls[].empty?)
  525. assert(!@cls[1].empty?)
  526. end
  527. def test_eql?
  528. assert(@cls[].eql?(@cls[]))
  529. assert(@cls[1].eql?(@cls[1]))
  530. assert(@cls[1, 1, 2, 2].eql?(@cls[1, 1, 2, 2]))
  531. assert(!@cls[1.0, 1.0, 2.0, 2.0].eql?(@cls[1, 1, 2, 2]))
  532. end
  533. def test_fetch
  534. a = %w(a b c d)
  535. assert_equal('a', a.fetch(0))
  536. assert_equal('c', a.fetch(2))
  537. assert_raise(IndexError) { a.fetch(4) }
  538. assert_equal(8, a.fetch(4) {|k| k*2} )
  539. assert_equal('default', a.fetch(4, 'default'))
  540. assert_equal('d', a.fetch(-1))
  541. assert_equal('b', a.fetch(-3))
  542. assert_raise(IndexError) { a.fetch(-5) }
  543. assert_equal(-10, a.fetch(-5) {|k| k*2} )
  544. assert_equal('default', a.fetch(-5, 'default'))
  545. end
  546. def test_fill
  547. assert_equal(@cls[], @cls[].fill(99))
  548. assert_equal(@cls[], @cls[].fill(99, 0))
  549. assert_equal(@cls[99], @cls[].fill(99, 0, 1))
  550. assert_equal(@cls[99], @cls[].fill(99, 0..0))
  551. assert_equal(@cls[99], @cls[1].fill(99))
  552. assert_equal(@cls[99], @cls[1].fill(99, 0))
  553. assert_equal(@cls[99], @cls[1].fill(99, 0, 1))
  554. assert_equal(@cls[99], @cls[1].fill(99, 0..0))
  555. assert_equal(@cls[99, 99], @cls[1, 2].fill(99))
  556. assert_equal(@cls[99, 99], @cls[1, 2].fill(99, 0))
  557. assert_equal(@cls[99, 99], @cls[1, 2].fill(99, nil))
  558. assert_equal(@cls[1, 99], @cls[1, 2].fill(99, 1, nil))
  559. assert_equal(@cls[99, 2], @cls[1, 2].fill(99, 0, 1))
  560. assert_equal(@cls[99, 2], @cls[1, 2].fill(99, 0..0))
  561. # fill outside of original array
  562. assert_equal(@cls[1, 2, nil, nil, 88, 88, 88], @cls[1,2].fill(88, 4..6))
  563. # negative index counts from end
  564. assert_equal(@cls[1,2,77,77,77,77,77], @cls[1,2,3,4].fill(77, -2, 5))
  565. # with a block providing values
  566. arr = @cls[1,2].fill(4..6) {|i| 100 + i }
  567. assert_equal(@cls[1, 2, nil, nil, 104, 105, 106], arr)
  568. end
  569. def test_first
  570. assert_equal(3, @cls[3,4,5].first)
  571. assert_equal(4, @cls[4,5].first)
  572. assert_equal(5, @cls[5].first)
  573. assert_equal(nil, @cls[].first)
  574. # with argument
  575. assert_equal([], @cls[3,4,5].first(0))
  576. assert_equal([3], @cls[3,4,5].first(1))
  577. assert_equal([3,4], @cls[3,4,5].first(2))
  578. assert_equal([3,4,5], @cls[3,4,5].first(3))
  579. assert_equal([3,4,5], @cls[3,4,5].first(4))
  580. assert_equal([3,4,5], @cls[3,4,5].first(999))
  581. # error cases
  582. assert_raise(ArgumentError) { @cls[3,4,5].first(-1) }
  583. assert_raise(TypeError) { @cls[3,4,5].first(Object.new) }
  584. end
  585. def test_flatten
  586. a1 = @cls[ 1, 2, 3]
  587. a2 = @cls[ 5, 6 ]
  588. a3 = @cls[ 4, a2 ]
  589. a4 = @cls[ a1, a3 ]
  590. assert_equal(@cls[1, 2, 3, 4, 5, 6], a4.flatten)
  591. assert_equal(@cls[ a1, a3], a4)
  592. a5 = @cls[ a1, @cls[], a3 ]
  593. assert_equal(@cls[1, 2, 3, 4, 5, 6], a5.flatten)
  594. assert_equal(@cls[], @cls[].flatten)
  595. assert_equal(@cls[],
  596. @cls[@cls[@cls[@cls[],@cls[]],@cls[@cls[]],@cls[]],@cls[@cls[@cls[]]]].flatten)
  597. end
  598. def test_flatten!
  599. a1 = @cls[ 1, 2, 3]
  600. a2 = @cls[ 5, 6 ]
  601. a3 = @cls[ 4, a2 ]
  602. a4 = @cls[ a1, a3 ]
  603. assert_equal(@cls[1, 2, 3, 4, 5, 6], a4.flatten!)
  604. assert_equal(@cls[1, 2, 3, 4, 5, 6], a4)
  605. a5 = @cls[ a1, @cls[], a3 ]
  606. assert_equal(@cls[1, 2, 3, 4, 5, 6], a5.flatten!)
  607. assert_equal(@cls[1, 2, 3, 4, 5, 6], a5)
  608. assert_equal(@cls[], @cls[].flatten)
  609. assert_equal(@cls[],
  610. @cls[@cls[@cls[@cls[],@cls[]],@cls[@cls[]],@cls[]],@cls[@cls[@cls[]]]].flatten)
  611. end
  612. def test_hash
  613. a1 = @cls[ 'cat', 'dog' ]
  614. a2 = @cls[ 'cat', 'dog' ]
  615. a3 = @cls[ 'dog', 'cat' ]
  616. assert(a1.hash == a2.hash)
  617. assert(a1.hash != a3.hash)
  618. end
  619. def test_include?
  620. a = @cls[ 'cat', 99, /a/, @cls[ 1, 2, 3] ]
  621. assert(a.include?('cat'))
  622. assert(a.include?(99))
  623. assert(a.include?(/a/))
  624. assert(a.include?([1,2,3]))
  625. assert(!a.include?('ca'))
  626. assert(!a.include?([1,2]))
  627. end
  628. def test_index
  629. a = @cls[ 'cat', 99, /a/, 99, @cls[ 1, 2, 3] ]
  630. assert_equal(0, a.index('cat'))
  631. assert_equal(1, a.index(99))
  632. assert_equal(4, a.index([1,2,3]))
  633. assert_nil(a.index('ca'))
  634. assert_nil(a.index([1,2]))
  635. end
  636. # this clutters up the alphabetic ordering of methods
  637. def generic_index_test(symbol)
  638. a = @cls[*('a'..'j').to_a]
  639. assert_equal(@cls['a', 'c', 'e'], a.send(symbol,0, 2, 4))
  640. assert_equal(@cls['j', 'h', 'f'], a.send(symbol,-1, -3, -5))
  641. assert_equal(@cls['h', nil, 'a'], a.send(symbol,-3, 99, 0))
  642. end
  643. def test_insert
  644. x = %w(a b c)
  645. assert_equal(%w(a b c), x.insert(2))
  646. assert_equal(%w(a b x c), x.insert(2, 'x'))
  647. assert_equal(%w(a b x c), x)
  648. assert_equal(%w(a b x y z w c), x.insert(-2, 'y', 'z', 'w'))
  649. assert_equal(%w(a b x y z w c) + [nil, nil] + %w(Q), x.insert(9, 'Q'))
  650. assert_raise(IndexError) { x.insert(-12, 'Z') }
  651. end
  652. def test_join
  653. $, = ""
  654. a = @cls[]
  655. assert_equal("", a.join)
  656. assert_equal("", a.join(','))
  657. $, = ""
  658. a = @cls[1, 2]
  659. assert_equal("12", a.join)
  660. assert_equal("1,2", a.join(','))
  661. $, = ""
  662. a = @cls[1, 2, 3]
  663. assert_equal("123", a.join)
  664. assert_equal("1,2,3", a.join(','))
  665. $, = ":"
  666. a = @cls[1, 2, 3]
  667. assert_equal("1:2:3", a.join)
  668. assert_equal("1,2,3", a.join(','))
  669. $, = ""
  670. end
  671. def test_last
  672. assert_equal(5, @cls[3,4,5].last)
  673. assert_equal(4, @cls[3,4].last)
  674. assert_equal(3, @cls[3].last)
  675. assert_equal(nil, @cls[].last)
  676. # with argument
  677. assert_equal([], @cls[3,4,5].last(0))
  678. assert_equal([5], @cls[3,4,5].last(1))
  679. assert_equal([4,5], @cls[3,4,5].last(2))
  680. assert_equal([3,4,5], @cls[3,4,5].last(3))
  681. assert_equal([3,4,5], @cls[3,4,5].last(4))
  682. assert_equal([3,4,5], @cls[3,4,5].last(999))
  683. # error cases
  684. assert_raise(ArgumentError) { @cls[3,4,5].last(-1) }
  685. assert_raise(TypeError) { @cls[3,4,5].last(Object.new) }
  686. # misc
  687. assert_equal(nil, @cls[].last)
  688. assert_equal(1, @cls[1].last)
  689. assert_equal(99, @cls[*(3..99).to_a].last)
  690. end
  691. def test_length
  692. assert_equal(0, @cls[].length)
  693. assert_equal(1, @cls[1].length)
  694. assert_equal(2, @cls[1, nil].length)
  695. assert_equal(2, @cls[nil, 1].length)
  696. assert_equal(234, @cls[*(0..233).to_a].length)
  697. end
  698. def test_map!
  699. generic_test_collect!(:map!)
  700. end
  701. if !IS19
  702. def test_nitems
  703. assert_equal(0, @cls[].nitems)
  704. assert_equal(1, @cls[1].nitems)
  705. assert_equal(1, @cls[1, nil].nitems)
  706. assert_equal(1, @cls[nil, 1].nitems)
  707. assert_equal(3, @cls[1, nil, nil, 2, nil, 3, nil].nitems)
  708. end
  709. end
  710. def test_pop
  711. a = @cls[ 'cat', 'dog' ]
  712. assert_equal('dog', a.pop)
  713. assert_equal(@cls['cat'], a)
  714. assert_equal('cat', a.pop)
  715. assert_equal(@cls[], a)
  716. assert_nil(a.pop)
  717. assert_equal(@cls[], a)
  718. end
  719. def test_push
  720. a = @cls[1, 2, 3]
  721. assert_equal(@cls[1, 2, 3, 4, 5], a.push(4, 5))
  722. assert_equal(@cls[1, 2, 3, 4, 5], a.push())
  723. assert_equal(@cls[1, 2, 3, 4, 5, nil], a.push(nil))
  724. end
  725. def test_rassoc
  726. a1 = @cls[*%w( cat feline )]
  727. a2 = @cls[*%w( dog canine )]
  728. a3 = @cls[*%w( mule asinine )]
  729. a4 = @cls[*%w( mule asinine )]
  730. a = @cls[ a1, a2, a3, a4 ]
  731. assert_same(a1, a.rassoc('feline'))
  732. assert_same(a3, a.rassoc('asinine'))
  733. assert_same(nil, a.rassoc('dog'))
  734. assert_same(nil, a.rassoc('mule'))
  735. assert_same(nil, a.rassoc(1..2))
  736. end
  737. # almost identical to delete_if
  738. def test_reject!
  739. a = @cls[ 1, 2, 3, 4, 5 ]
  740. assert_equal(nil, a.reject! { false }) # delete_if returns a here
  741. assert_equal(@cls[1, 2, 3, 4, 5], a)
  742. a = @cls[ 1, 2, 3, 4, 5 ]
  743. assert_equal(a, a.reject! { true })
  744. assert_equal(@cls[], a)
  745. a = @cls[ 1, 2, 3, 4, 5 ]
  746. assert_equal(a, a.reject! { |i| i > 3 })
  747. assert_equal(@cls[1, 2, 3], a)
  748. end
  749. def test_replace
  750. a = @cls[ 1, 2, 3]
  751. a_id = a.__id__
  752. assert_equal(@cls[4, 5, 6], a.replace(@cls[4, 5, 6]))
  753. assert_equal(@cls[4, 5, 6], a)
  754. assert_equal(a_id, a.__id__)
  755. assert_equal(@cls[], a.replace(@cls[]))
  756. end
  757. def test_reverse
  758. a = @cls[*%w( dog cat bee ant )]
  759. assert_equal(@cls[*%w(ant bee cat dog)], a.reverse)
  760. assert_equal(@cls[*%w(dog cat bee ant)], a)
  761. assert_equal(@cls[], @cls[].reverse)
  762. end
  763. def test_reverse!
  764. a = @cls[*%w( dog cat bee ant )]
  765. assert_equal(@cls[*%w(ant bee cat dog)], a.reverse!)
  766. assert_equal(@cls[*%w(ant bee cat dog)], a)
  767. assert_equal(@cls[],@cls[].reverse!)
  768. end
  769. def test_reverse_each
  770. a = @cls[*%w( dog cat bee ant )]
  771. i = a.length
  772. a.reverse_each { |e|
  773. i -= 1
  774. assert_equal(a[i], e)
  775. }
  776. assert_equal(0, i)
  777. a = @cls[]
  778. i = 0
  779. a.reverse_each { |e|
  780. assert(false, "Never get here")
  781. }
  782. assert_equal(0, i)
  783. end
  784. def test_rindex
  785. a = @cls[ 'cat', 99, /a/, 99, [ 1, 2, 3] ]
  786. assert_equal(0, a.rindex('cat'))
  787. assert_equal(3, a.rindex(99))
  788. assert_equal(4, a.rindex([1,2,3]))
  789. assert_nil(a.rindex('ca'))
  790. assert_nil(a.rindex([1,2]))
  791. end
  792. def test_shift
  793. a = @cls[ 'cat', 'dog' ]
  794. assert_equal('cat', a.shift)
  795. assert_equal(@cls['dog'], a)
  796. assert_equal('dog', a.shift)
  797. assert_equal(@cls[], a)
  798. assert_nil(a.shift)
  799. assert_equal(@cls[], a)
  800. end
  801. def test_size
  802. assert_equal(0, @cls[].size)
  803. assert_equal(1, @cls[1].size)
  804. assert_equal(100, @cls[*(0..99).to_a].size)
  805. end
  806. def test_slice
  807. a = @cls[*(1..100).to_a]
  808. assert_equal(1, a.slice(0))
  809. assert_equal(100, a.slice(99))
  810. assert_nil(a.slice(100))
  811. assert_equal(100, a.slice(-1))
  812. assert_equal(99, a.slice(-2))
  813. assert_equal(1, a.slice(-100))
  814. assert_nil(a.slice(-101))
  815. assert_equal(@cls[1], a.slice(0,1))
  816. assert_equal(@cls[100], a.slice(99,1))
  817. assert_equal(@cls[], a.slice(100,1))
  818. assert_equal(@cls[100], a.slice(99,100))
  819. assert_equal(@cls[100], a.slice(-1,1))
  820. assert_equal(@cls[99], a.slice(-2,1))
  821. assert_equal(@cls[10, 11, 12], a.slice(9, 3))
  822. assert_equal(@cls[10, 11, 12], a.slice(-91, 3))
  823. assert_equal(@cls[1], a.slice(0..0))
  824. assert_equal(@cls[100], a.slice(99..99))
  825. assert_equal(@cls[], a.slice(100..100))
  826. assert_equal(@cls[100], a.slice(99..200))
  827. assert_equal(@cls[100], a.slice(-1..-1))
  828. assert_equal(@cls[99], a.slice(-2..-2))
  829. assert_equal(@cls[10, 11, 12], a.slice(9..11))
  830. assert_equal(@cls[10, 11, 12], a.slice(-91..-89))
  831. assert_nil(a.slice(10, -3))
  832. assert_equal([], a.slice(10..7))
  833. end
  834. def test_slice!
  835. a = @cls[1, 2, 3, 4, 5]
  836. assert_equal(3, a.slice!(2))
  837. assert_equal(@cls[1, 2, 4, 5], a)
  838. a = @cls[1, 2, 3, 4, 5]
  839. assert_equal(4, a.slice!(-2))
  840. assert_equal(@cls[1, 2, 3, 5], a)
  841. a = @cls[1, 2, 3, 4, 5]
  842. assert_equal(@cls[3,4], a.slice!(2,2))
  843. assert_equal(@cls[1, 2, 5], a)
  844. a = @cls[1, 2, 3, 4, 5]
  845. assert_equal(@cls[4,5], a.slice!(-2,2))
  846. assert_equal(@cls[1, 2, 3], a)
  847. a = @cls[1, 2, 3, 4, 5]
  848. assert_equal(@cls[3,4], a.slice!(2..3))
  849. assert_equal(@cls[1, 2, 5], a)
  850. a = @cls[1, 2, 3, 4, 5]
  851. assert_equal(nil, a.slice!(20))
  852. assert_equal(@cls[1, 2, 3, 4, 5], a)
  853. end
  854. def test_sort
  855. a = @cls[ 4, 1, 2, 3 ]
  856. assert_equal(@cls[1, 2, 3, 4], a.sort)
  857. assert_equal(@cls[4, 1, 2, 3], a)
  858. assert_equal(@cls[4, 3, 2, 1], a.sort { |x, y| y <=> x} )
  859. assert_equal(@cls[4, 1, 2, 3], a)
  860. a.fill(1)
  861. assert_equal(@cls[1, 1, 1, 1], a.sort)
  862. assert_equal(@cls[], @cls[].sort)
  863. end
  864. def test_sort!
  865. a = @cls[ 4, 1, 2, 3 ]
  866. assert_equal(@cls[1, 2, 3, 4], a.sort!)
  867. assert_equal(@cls[1, 2, 3, 4], a)
  868. assert_equal(@cls[4, 3, 2, 1], a.sort! { |x, y| y <=> x} )
  869. assert_equal(@cls[4, 3, 2, 1], a)
  870. a.fill(1)
  871. assert_equal(@cls[1, 1, 1, 1], a.sort!)
  872. end
  873. def test_to_a
  874. a = @cls[ 1, 2, 3 ]
  875. a_id = a.__id__
  876. assert_equal(a, a.to_a)
  877. assert_equal(a_id, a.to_a.__id__)
  878. end
  879. def test_to_ary
  880. a = [ 1, 2, 3 ]
  881. b = @cls[*a]
  882. a_id = a.__id__
  883. assert_equal(a, b.to_ary)
  884. if (@cls == Array)
  885. assert_equal(a_id, a.to_ary.__id__)
  886. end
  887. end
  888. def test_to_s
  889. $, = ""
  890. a = @cls[]
  891. assert_equal("", a.to_s) unless IS19
  892. $, = ""
  893. a = @cls[1, 2]
  894. assert_equal(IS19 ? "[1, 2]" : "12", a.to_s)
  895. $, = ""
  896. a = @cls[1, 2, 3]
  897. assert_equal(IS19 ? "[1, 2, 3]" : "123", a.to_s)
  898. $, = ":"
  899. a = @cls[1, 2, 3]
  900. assert_equal(IS19 ? "[1, 2, 3]" : "1:2:3", a.to_s)
  901. $, = ""
  902. end
  903. def test_transpose
  904. # normal case
  905. ary = [%w(a b c), %w(d e f), %w(g h i), %w(j k l)]
  906. exp = [%w(a d g j), %w(b e h k), %w(c f i l)]
  907. assert_equal(exp, ary.transpose)
  908. assert_equal(ary, ary.transpose.transpose)
  909. # the following happens in case of malformed data
  910. e = assert_raise(IndexError) { [%w(a b c), %w(d)].transpose }
  911. assert_match(/1 should be 3/, e.message)
  912. end
  913. def test_uniq
  914. a = @cls[ 1, 2, 3, 2, 1, 2, 3, 4, nil ]
  915. b = a.dup
  916. assert_equal(@cls[1, 2, 3, 4, nil], a.uniq)
  917. assert_equal(b, a)
  918. assert_equal(@cls[1, 2, 3], @cls[1, 2, 3].uniq)
  919. end
  920. def test_uniq!
  921. a = @cls[ 1, 2, 3, 2, 1, 2, 3, 4, nil ]
  922. assert_equal(@cls[1, 2, 3, 4, nil], a.uniq!)
  923. assert_equal(@cls[1, 2, 3, 4, nil], a)
  924. assert_nil(@cls[1, 2, 3].uniq!)
  925. end
  926. def test_unshift
  927. a = @cls[]
  928. assert_equal(@cls['cat'], a.unshift('cat'))
  929. assert_equal(@cls['dog', 'cat'], a.unshift('dog'))
  930. assert_equal(@cls[nil, 'dog', 'cat'], a.unshift(nil))
  931. assert_equal(@cls[@cls[1,2], nil, 'dog', 'cat'], a.unshift(@cls[1, 2]))
  932. end
  933. def test_values_at
  934. assert_equal([], %w(a b c d e).values_at)
  935. assert_equal(%w(c), %w(a b c d e).values_at(2))
  936. assert_equal(%w(b d), %w(a b c d e).values_at(1, 3))
  937. assert_equal([nil, nil], %w(a b c d e).values_at(5, 300))
  938. assert_equal(%w(e), %w(a b c d e).values_at(-1))
  939. assert_equal(%w(d b), %w(a b c d e).values_at(-2, -4))
  940. assert_equal([nil, nil], %w(a b c d e).values_at(-6, -500))
  941. assert_equal(%w(a c e), %w(a b c d e).values_at(0.0, 2.0, 4.0)) # float as index
  942. assert_equal(%w(b), %w(a b c d e).values_at(1.8)) # float as index
  943. assert_equal(%w(b c d), %w(a b c d e).values_at(1..3))
  944. assert_raise(TypeError) { %w(a b c).values_at(nil) }
  945. assert_raise(TypeError) { %w(a b c).values_at("x") }
  946. assert_raise(TypeError) { %w(a b c).values_at([]) }
  947. assert_raise(TypeError) { %w(a b c).values_at(true) }
  948. end
  949. def test_OR # '|'
  950. assert_equal(@cls[], @cls[] | @cls[])
  951. assert_equal(@cls[1], @cls[1] | @cls[])
  952. assert_equal(@cls[1], @cls[] | @cls[1])
  953. assert_equal(@cls[1], @cls[1] | @cls[1])
  954. assert_equal(@cls[1,2], @cls[1] | @cls[2])
  955. assert_equal(@cls[1,2], @cls[1, 1] | @cls[2, 2])
  956. assert_equal(@cls[1,2], @cls[1, 2] | @cls[1, 2])
  957. end
  958. def test_zip
  959. a = @cls[4, 5, 6]
  960. b = @cls[7, 8, 9]
  961. assert_equal([[1, 4, 7], [2, 5, 8], [3, 6, 9]], @cls[1, 2, 3].zip(a, b))
  962. assert_equal([[1, 4, 7], [2, 5, 8]], @cls[1, 2].zip(a, b))
  963. assert_equal([[4, 1, 8], [5, 2, nil], [6, nil, nil]], a.zip([1, 2], [8]))
  964. end
  965. end