File: order_spec.rb

package info (click to toggle)
ruby3.3 3.3.8-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 153,620 kB
  • sloc: ruby: 1,244,308; ansic: 836,474; yacc: 28,074; pascal: 6,748; sh: 3,913; python: 1,719; cpp: 1,158; makefile: 742; asm: 712; javascript: 394; lisp: 97; perl: 62; awk: 36; sed: 23; xml: 4
file content (75 lines) | stat: -rw-r--r-- 2,291 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
require_relative '../spec_helper'

describe "A method call" do
  before :each do
    @obj = Object.new
    def @obj.foo0(&a)
      [a ? a.call : nil]
    end
    def @obj.foo1(a, &b)
      [a, b ? b.call : nil]
    end
    def @obj.foo2(a, b, &c)
      [a, b, c ? c.call : nil]
    end
    def @obj.foo3(a, b, c, &d)
      [a, b, c, d ? d.call : nil]
    end
    def @obj.foo4(a, b, c, d, &e)
      [a, b, c, d, e ? e.call : nil]
    end
  end

  it "evaluates the receiver first" do
    (obj = @obj).foo1(obj = nil).should == [nil, nil]
    (obj = @obj).foo2(obj = nil, obj = nil).should == [nil, nil, nil]
    (obj = @obj).foo3(obj = nil, obj = nil, obj = nil).should == [nil, nil, nil, nil]
    (obj = @obj).foo4(obj = nil, obj = nil, obj = nil, obj = nil).should == [nil, nil, nil, nil, nil]
  end

  it "evaluates arguments after receiver" do
    a = 0
    (a += 1; @obj).foo1(a).should == [1, nil]
    (a += 1; @obj).foo2(a, a).should == [2, 2, nil]
    (a += 1; @obj).foo3(a, a, a).should == [3, 3, 3, nil]
    (a += 1; @obj).foo4(a, a, a, a).should == [4, 4, 4, 4, nil]
    a.should == 4
  end

  it "evaluates arguments left-to-right" do
    a = 0
    @obj.foo1(a += 1).should == [1, nil]
    @obj.foo2(a += 1, a += 1).should == [2, 3, nil]
    @obj.foo3(a += 1, a += 1, a += 1).should == [4, 5, 6, nil]
    @obj.foo4(a += 1, a += 1, a += 1, a += 1).should == [7, 8, 9, 10, nil]
    a.should == 10
  end

  it "evaluates block pass after arguments" do
    a = 0
    p = proc {true}
    @obj.foo1(a += 1, &(a += 1; p)).should == [1, true]
    @obj.foo2(a += 1, a += 1, &(a += 1; p)).should == [3, 4, true]
    @obj.foo3(a += 1, a += 1, a += 1, &(a += 1; p)).should == [6, 7, 8, true]
    @obj.foo4(a += 1, a += 1, a += 1, a += 1, &(a += 1; p)).should == [10, 11, 12, 13, true]
    a.should == 14
  end

  it "evaluates block pass after receiver" do
    p1 = proc {true}
    p2 = proc {false}
    p1.should_not == p2

    p = p1
    (p = p2; @obj).foo0(&p).should == [false]
    p = p1
    (p = p2; @obj).foo1(1, &p).should == [1, false]
    p = p1
    (p = p2; @obj).foo2(1, 1, &p).should == [1, 1, false]
    p = p1
    (p = p2; @obj).foo3(1, 1, 1, &p).should == [1, 1, 1, false]
    p = p1
    (p = p2; @obj).foo4(1, 1, 1, 1, &p).should == [1, 1, 1, 1, false]
    p = p1
  end
end