Skip to content

Commit 53b2eec

Browse files
chrisseatonLillian Zhang
authored andcommitted
PE tests for Thread.detect_recursion
1 parent 0101e7d commit 53b2eec

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

test/truffle/compiler/pe/pe.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ def counter(example)
8888
require_relative 'core/encoding_pe'
8989
require_relative 'interop/interop_pe'
9090
require_relative 'truffle/engine_pe.rb'
91+
require_relative 'truffle/thread_pe.rb'
9192
require_relative 'macro/pushing_pixels_pe.rb'
9293

9394
if Truffle::Interop.mime_type_supported?('application/javascript')
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved. This
2+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
3+
# redistribute it and/or modify it under the terms of the:
4+
#
5+
# Eclipse Public License version 2.0, or
6+
# GNU General Public License version 2, or
7+
# GNU Lesser General Public License version 2.1.
8+
9+
example "Thread.detect_recursion(Object.new) { }", false
10+
example "Thread.detect_recursion([]) { }", false
11+
example "Thread.detect_recursion({}) { }", false
12+
13+
example "y = nil; Thread.detect_recursion(Object.new) { y = Thread.detect_recursion(Object.new) { } }; y", false
14+
example "x = Object.new; y = nil; Thread.detect_recursion(x) { y = Thread.detect_recursion(x) { } }; y", true
15+
16+
def detect_recursion_recursive(method, object)
17+
Thread.detect_recursion(object) do
18+
object.send(method) do |child|
19+
return detect_recursion_recursive(method, child)
20+
end
21+
end
22+
end
23+
24+
example "detect_recursion_recursive(:each, [])", false
25+
example "detect_recursion_recursive(:each_value, {})", false
26+
example "a = []; a << a; detect_recursion_recursive(:each, a)", true
27+
example "a = {}; a[:a] = a; detect_recursion_recursive(:each_value, a)", true

0 commit comments

Comments
 (0)