/bootstraptest/test_block.rb

https://github.com/kosaki/ruby · Ruby · 599 lines · 577 code · 22 blank · 0 comment · 8 complexity · ae2636280064071bd8a236d0edeb1265 MD5 · raw file

  1. assert_equal %q{1}, %q{
  2. 1.times{
  3. begin
  4. a = 1
  5. ensure
  6. foo = nil
  7. end
  8. }
  9. }
  10. assert_equal %q{2}, %q{
  11. [1,2,3].find{|x| x == 2}
  12. }
  13. assert_equal %q{2}, %q{
  14. class E
  15. include Enumerable
  16. def each(&block)
  17. [1, 2, 3].each(&block)
  18. end
  19. end
  20. E.new.find {|x| x == 2 }
  21. }
  22. assert_equal %q{6}, %q{
  23. sum = 0
  24. for x in [1, 2, 3]
  25. sum += x
  26. end
  27. sum
  28. }
  29. assert_equal %q{15}, %q{
  30. sum = 0
  31. for x in (1..5)
  32. sum += x
  33. end
  34. sum
  35. }
  36. assert_equal %q{0}, %q{
  37. sum = 0
  38. for x in []
  39. sum += x
  40. end
  41. sum
  42. }
  43. assert_equal %q{1}, %q{
  44. ans = []
  45. 1.times{
  46. for n in 1..3
  47. a = n
  48. ans << a
  49. end
  50. }
  51. }
  52. assert_equal %q{1..3}, %q{
  53. ans = []
  54. for m in 1..3
  55. for n in 1..3
  56. a = [m, n]
  57. ans << a
  58. end
  59. end
  60. }
  61. assert_equal %q{[1, 2, 3]}, %q{
  62. (1..3).to_a
  63. }
  64. assert_equal %q{[4, 8, 12]}, %q{
  65. (1..3).map{|e|
  66. e * 4
  67. }
  68. }
  69. assert_equal %q{[1, 2, 3]}, %q{
  70. class C
  71. include Enumerable
  72. def each
  73. [1,2,3].each{|e|
  74. yield e
  75. }
  76. end
  77. end
  78. C.new.to_a
  79. }
  80. assert_equal %q{[4, 5, 6]}, %q{
  81. class C
  82. include Enumerable
  83. def each
  84. [1,2,3].each{|e|
  85. yield e
  86. }
  87. end
  88. end
  89. C.new.map{|e|
  90. e + 3
  91. }
  92. }
  93. assert_equal %q{100}, %q{
  94. def m
  95. yield
  96. end
  97. def n
  98. yield
  99. end
  100. m{
  101. n{
  102. 100
  103. }
  104. }
  105. }
  106. assert_equal %q{20}, %q{
  107. def m
  108. yield 1
  109. end
  110. m{|ib|
  111. m{|jb|
  112. i = 20
  113. }
  114. }
  115. }
  116. assert_equal %q{2}, %q{
  117. def m
  118. yield 1
  119. end
  120. m{|ib|
  121. m{|jb|
  122. ib = 20
  123. kb = 2
  124. }
  125. }
  126. }
  127. assert_equal %q{3}, %q{
  128. def iter1
  129. iter2{
  130. yield
  131. }
  132. end
  133. def iter2
  134. yield
  135. end
  136. iter1{
  137. jb = 2
  138. iter1{
  139. jb = 3
  140. }
  141. jb
  142. }
  143. }
  144. assert_equal %q{2}, %q{
  145. def iter1
  146. iter2{
  147. yield
  148. }
  149. end
  150. def iter2
  151. yield
  152. end
  153. iter1{
  154. jb = 2
  155. iter1{
  156. jb
  157. }
  158. jb
  159. }
  160. }
  161. assert_equal %q{2}, %q{
  162. def m
  163. yield 1
  164. end
  165. m{|ib|
  166. ib*2
  167. }
  168. }
  169. assert_equal %q{92580}, %q{
  170. def m
  171. yield 12345, 67890
  172. end
  173. m{|ib,jb|
  174. ib*2+jb
  175. }
  176. }
  177. assert_equal %q{[10, nil]}, %q{
  178. def iter
  179. yield 10
  180. end
  181. a = nil
  182. [iter{|a|
  183. a
  184. }, a]
  185. }
  186. assert_equal %q{21}, %q{
  187. def iter
  188. yield 10
  189. end
  190. iter{|a|
  191. iter{|a|
  192. a + 1
  193. } + a
  194. }
  195. }
  196. assert_equal %q{[10, 20, 30, 40, nil, nil, nil, nil]}, %q{
  197. def iter
  198. yield 10, 20, 30, 40
  199. end
  200. a = b = c = d = nil
  201. iter{|a, b, c, d|
  202. [a, b, c, d]
  203. } + [a, b, c, d]
  204. }
  205. assert_equal %q{[10, 20, 30, 40, nil, nil]}, %q{
  206. def iter
  207. yield 10, 20, 30, 40
  208. end
  209. a = b = nil
  210. iter{|a, b, c, d|
  211. [a, b, c, d]
  212. } + [a, b]
  213. }
  214. assert_equal %q{[1]}, %q{
  215. $a = []
  216. def iter
  217. yield 1
  218. end
  219. def m
  220. x = iter{|x|
  221. $a << x
  222. y = 0
  223. }
  224. end
  225. m
  226. $a
  227. }
  228. assert_equal %q{[1, [2]]}, %q{
  229. def iter
  230. yield 1, 2
  231. end
  232. iter{|a, *b|
  233. [a, b]
  234. }
  235. }
  236. assert_equal %q{[[1, 2]]}, %q{
  237. def iter
  238. yield 1, 2
  239. end
  240. iter{|*a|
  241. [a]
  242. }
  243. }
  244. assert_equal %q{[1, 2, []]}, %q{
  245. def iter
  246. yield 1, 2
  247. end
  248. iter{|a, b, *c|
  249. [a, b, c]
  250. }
  251. }
  252. assert_equal %q{[1, 2, nil, []]}, %q{
  253. def iter
  254. yield 1, 2
  255. end
  256. iter{|a, b, c, *d|
  257. [a, b, c, d]
  258. }
  259. }
  260. assert_equal %q{1}, %q{
  261. def m
  262. yield
  263. end
  264. m{
  265. 1
  266. }
  267. }
  268. assert_equal %q{15129}, %q{
  269. def m
  270. yield 123
  271. end
  272. m{|ib|
  273. m{|jb|
  274. ib*jb
  275. }
  276. }
  277. }
  278. assert_equal %q{2}, %q{
  279. def m a
  280. yield a
  281. end
  282. m(1){|ib|
  283. m(2){|jb|
  284. ib*jb
  285. }
  286. }
  287. }
  288. assert_equal %q{9}, %q{
  289. sum = 0
  290. 3.times{|ib|
  291. 2.times{|jb|
  292. sum += ib + jb
  293. }}
  294. sum
  295. }
  296. assert_equal %q{10}, %q{
  297. 3.times{|bl|
  298. break 10
  299. }
  300. }
  301. assert_equal %q{[1, 2]}, %q{
  302. def iter
  303. yield 1,2,3
  304. end
  305. iter{|i, j|
  306. [i, j]
  307. }
  308. }
  309. assert_equal %q{[1, nil]}, %q{
  310. def iter
  311. yield 1
  312. end
  313. iter{|i, j|
  314. [i, j]
  315. }
  316. }
  317. assert_equal '0', %q{
  318. def m()
  319. end
  320. m {|(v0,*,(*)),|}
  321. m {|(*v0,(*)),|}
  322. m {|(v0,*v1,(*)),|}
  323. m {|((v0,*v1,v2)),|}
  324. m {|(v0,*v1,v2),|}
  325. m {|(v0,*v1,(v2)),|}
  326. m {|((*),*v0,v1),|}
  327. m {|((v0),*v1,v2),|}
  328. m {|(v0,v1,*v2,v3),|}
  329. m {|v0,(v1,*v2,v3),|}
  330. m {|(v0,*v1,v2),v3,|}
  331. m {|(v0,*v1,v2)|}
  332. m {|(v0,*v1,v2),&v3|}
  333. m {|(v0,*v1,v2),*|}
  334. m {|(v0,*v1,v2),*,&v3|}
  335. m {|*,(v0,*v1,v2)|}
  336. m {|*,(v0,*v1,v2),&v3|}
  337. m {|v0,*,(v1,*v2,v3)|}
  338. m {|v0,*,(v1,*v2,v3),&v4|}
  339. m {|(v0,*v1,v2),*,v3|}
  340. m {|(v0,*v1,v2),*,v3,&v4|}
  341. m {|(v0, *v1, v2)|}
  342. m {|(*,v)|}
  343. 0
  344. }, "block parameter (shouldn't SEGV: [ruby-dev:31143])"
  345. assert_equal 'nil', %q{
  346. def m
  347. yield
  348. end
  349. m{|&b| b}.inspect
  350. }, '[ruby-dev:31147]'
  351. assert_equal 'nil', %q{
  352. def m()
  353. yield
  354. end
  355. m {|(v,(*))|}.inspect
  356. }, '[ruby-dev:31160]'
  357. assert_equal 'nil', %q{
  358. def m()
  359. yield
  360. end
  361. m {|(*,a,b)|}.inspect
  362. }, '[ruby-dev:31153]'
  363. assert_equal 'nil', %q{
  364. def m()
  365. yield
  366. end
  367. m {|((*))|}.inspect
  368. }
  369. assert_equal %q{[1, 1, [1, nil], [1, nil], [1, nil], [1, nil], [1, 1], 1, [1, nil], [1, nil], [1, nil], [1, nil], [[1, 1], [1, 1]], [1, 1], [1, 1], [1, 1], [1, nil], [1, nil], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[1, 1], [1, 1]], [[1, 1], [1, 1]], [[1, 1], [1, 1]], [1, 1], [1, 1], [[[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[1, 1], [1, 1]], [[1, 1], [1, 1]]]}, %q{
  370. def m(ary = [])
  371. yield(ary)
  372. end
  373. $ans = []
  374. o = 1
  375. 5.times{
  376. v,(*) = o; $ans << o
  377. m(o){|(v,(*))| $ans << v}
  378. ((x, y)) = o; $ans << [x, y]
  379. m(o){|((x, y))| $ans << [x, y]}
  380. (((x, y))) = o; $ans << [x, y]
  381. m(o){|(((x, y)))| $ans << [x, y]}
  382. o = [o, o]
  383. }; $ans
  384. }
  385. assert_equal '0', %q{
  386. def m()
  387. yield [0]
  388. end
  389. m {|*,v| v}.inspect
  390. }, '[ruby-dev:31437]'
  391. assert_equal '[0]', %q{
  392. def m
  393. yield [0]
  394. end
  395. m{|v, &b| v}.inspect
  396. }, '[ruby-dev:31440]'
  397. assert_equal 'ok', %q{
  398. begin
  399. lambda{|a|}.call(1, 2)
  400. rescue ArgumentError
  401. :ok
  402. else
  403. :ng
  404. end
  405. }, '[ruby-dev:31464]'
  406. assert_equal 'ok', %q{
  407. begin
  408. lambda{|&b|}.call(3)
  409. rescue ArgumentError
  410. :ok
  411. else
  412. :ng
  413. end
  414. }, '[ruby-dev:31472]'
  415. assert_equal 'ok', %q{
  416. class C
  417. def each
  418. yield [1,2]
  419. yield 1,2
  420. end
  421. end
  422. vs1 = []
  423. C.new.each {|*v| vs1 << v }
  424. vs2 = []
  425. C.new.to_enum.each {|*v| vs2 << v }
  426. vs1 == vs2 ? :ok : :ng
  427. }, '[ruby-dev:32329]'
  428. assert_normal_exit %q{
  429. e = [1,2,3].each
  430. 10000.times {
  431. e = [e].each
  432. }
  433. Thread.new { GC.start }.join
  434. }, '[ruby-dev:32604]'
  435. assert_equal '[nil, []]', %q{
  436. def m() yield nil,[] end
  437. l = lambda {|*v| v}
  438. GC.stress=true
  439. r = m(&l)
  440. GC.stress=false
  441. r.inspect
  442. }, '[ruby-dev:32567]'
  443. assert_equal NilClass.to_s, %q{
  444. r = false; 1.times{|&b| r = b}; r.class
  445. }
  446. assert_equal 'ok', %q{
  447. class C
  448. define_method(:foo) do |arg, &block|
  449. if block then block.call else arg end
  450. end
  451. end
  452. C.new.foo("ng") {"ok"}
  453. }, '[ruby-talk:266422]'
  454. assert_equal 'ok', %q{
  455. class C
  456. define_method(:xyz) do |o, k, &block|
  457. block.call(o, k)
  458. end
  459. end
  460. C.new.xyz("o","k") {|o, k| o+k}
  461. }, '[ruby-core:20544]'
  462. assert_equal 'ok', %q{
  463. class C
  464. define_method(:xyz) do |*args, &block|
  465. block.call(*args)
  466. end
  467. end
  468. C.new.xyz("o","k") {|*args| args.join("")}
  469. }, '[ruby-core:20544]'
  470. assert_equal 'ok', %q{
  471. STDERR.reopen(STDOUT)
  472. class C
  473. define_method(:foo) do |&block|
  474. block.call if block
  475. end
  476. result = "ng"
  477. new.foo() {result = "ok"}
  478. result
  479. end
  480. }
  481. assert_equal "ok", %q{
  482. class Bar
  483. def bar; :ok; end
  484. end
  485. def foo
  486. yield(Bar.new) if block_given?
  487. end
  488. foo(&:bar)
  489. }, '[ruby-core:14279]'
  490. assert_normal_exit %q{
  491. class Controller
  492. def respond_to(&block)
  493. responder = Responder.new
  494. block.call(responder)
  495. responder.respond
  496. end
  497. def test_for_bug
  498. respond_to{|format|
  499. format.js{
  500. puts "in test"
  501. render{|obj|
  502. puts obj
  503. }
  504. }
  505. }
  506. end
  507. def render(&block)
  508. puts "in render"
  509. end
  510. end
  511. class Responder
  512. def method_missing(symbol, &block)
  513. puts "enter method_missing"
  514. @response = Proc.new{
  515. puts 'in method missing'
  516. block.call
  517. }
  518. puts "leave method_missing"
  519. end
  520. def respond
  521. @response.call
  522. end
  523. end
  524. t = Controller.new
  525. t.test_for_bug
  526. }, '[ruby-core:14395]'
  527. assert_equal 'true', %q{
  528. class C0
  529. def foo
  530. block_given?
  531. end
  532. end
  533. class C1 < C0
  534. def foo
  535. super
  536. end
  537. end
  538. C1.new.foo{}
  539. }
  540. assert_equal 'true', %q{
  541. class C0
  542. def foo
  543. block_given?
  544. end
  545. end
  546. class C1 < C0
  547. def foo
  548. super()
  549. end
  550. end
  551. C1.new.foo{}
  552. }