new world
[rubydium.git] / baby / perf.rb
blob1b276870b30acd019abd7d02a9ff8e8cbe66e71d
1 #!/usr/bin/env ruby
3 require "testing.rb"
5 module Test_Perf
7    include TestMod
9    # DO_TESTS = [:test_perf_inc_while_with_break]
11    def real_test?
12       (!Comparison.left? and !Comparison.right?)
13    end
15    def test_perf_inc_while_with_break
16          do_blah <<SRC, nil, [65131, 439]
17          n = 0
18          while true
19             n += 1
20             if n == 1000
21                break
22             end
23          end
24          pi n
25 SRC
26    end
28    def test_perf_instantiate_call_instance_method
29          do_blah <<SRC, nil, [9993, 848]
30          class Blah
31             def one
32                1
33             end
34          end
35          n = 0
36          while n < 50
37             t = Blah.new
38             n += t.one
39          end
40          pi n
41 SRC
42    end
44    def test_perf_call_two_methods
45          do_blah <<SRC, nil, [6169, 866]
46          def bub
47             1
48          end
49          def bub2
50             1
51          end
52          a = 0
53          while a < 50
54             a += bub
55             a += bub2
56             pi a
57          end
58          pi a
59 SRC
60    end
62    def test_perf_call_single_method
63       # TODO - this is broken when we use 2000 instead of 1000...
64       count = real_test? ? 1000 : 20
65          do_blah <<SRC, nil, [129206, 597]
66          def bub
67             1
68          end
69          a = 0
70          while a < #{count}
71             # breakpoint
72             a += bub
73          end
74          pi a
75 SRC
76    end
78    def test_perf_trivial_while
79          do_blah <<SRC, nil, [9361, 344]
80          a = 0
81          while a < 200
82             a += 1
83             pi 1
84          end
85          pi a
86 SRC
87    end
89    def test_perf_iterator
90          do_blah <<SRC, nil, [4635, 2649]
91          def times n
92             ln = 0
93             while ln < n
94                ln += 1
95                yield
96             end
97          end
98          class Blah
99             def test a
100                a = a * 2
101                a += 1
102                pi a
103             end
104          end
105          c = 1
106          times(10) {
107             b = Blah.new
108             b.test c
109          }
111    end
113    public_instance_methods.each {
114       |meth| 
115       next if meth !~ /^test.*/ or DO_TESTS.include? meth.to_sym
116       remove_method meth.to_sym
117    } if defined? DO_TESTS