summaryrefslogtreecommitdiffstats
path: root/test/ruby/test_proc.rb
blob: f0b78ffb230b5e20c297a815effe8bd1f1f481b7 (plain)
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
require 'test/unit'

class TestProc < Test::Unit::TestCase
  def test_proc
    p1 = proc{|i| i}
    assert_equal(2, p1.call(2))
    assert_equal(3, p1.call(3))

    p1 = proc{|i| i*2}
    assert_equal(4, p1.call(2))
    assert_equal(6, p1.call(3))

    p2 = nil
    x=0

    proc{
      iii=5				# nested local variable
      p1 = proc{|i|
        iii = i
      }
      p2 = proc {
        x = iii                 	# nested variables shared by procs
      }
      # scope of nested variables
      assert(defined?(iii))
    }.call
    assert(!defined?(iii))		# out of scope

    loop{iii=5; assert(eval("defined? iii")); break}
    loop {
      iii = 10
      def self.dyna_var_check
        loop {
          assert(!defined?(iii))
          break
        }
      end
      dyna_var_check
      break
    }
    p1.call(5)
    p2.call
    assert_equal(5, x)
  end

  def assert_arity(n)
    meta = class << self; self; end
    meta.class_eval {define_method(:foo, Proc.new)}
    assert_equal(n, method(:foo).arity)
  end

  def test_arity
    assert_equal(-1, proc{}.arity)
    assert_equal(0, proc{||}.arity)
    assert_equal(1, proc{|x|}.arity)
    assert_equal(2, proc{|x, y|}.arity)
    assert_equal(-2, proc{|x, *y|}.arity)
    assert_equal(-1, proc{|*x|}.arity)
    assert_equal(-1, proc{|*|}.arity)

    assert_arity(-1) {}
    assert_arity(0) {||}
    assert_arity(1) {|x|}
    assert_arity(2) {|x, y|}
    assert_arity(-2) {|x, *y|}
    assert_arity(-1) {|*x|}
    assert_arity(-1) {|*|}
  end

  # [ruby-dev:22592]
  def m(x)
    lambda { x }
  end
  def test_eq
    # [ruby-dev:22592]
    a = m(1)
    b = m(2)
    assert_not_equal(a, b)
    assert_not_equal(a.call, b.call)

    # [ruby-dev:22599]
    assert_not_equal(proc {||}, proc {|x,y|})

    # [ruby-dev:22601]
    a = lambda {|x| lambda {} }.call(1)
    b = lambda {}
    assert_not_equal(a, b)
  end
end
"hl com"> * * @version $Revision$, $Date$ */ public class Nonces { private Hashtable<Long, X509Certificate> mNonces = new Hashtable<Long, X509Certificate>(); private Vector<Long> mNonceList = new Vector<Long>(); private int mNonceLimit; /** * Constructs nonces. */ public Nonces() { this(100); } public Nonces(int limit) { mNonceLimit = limit; } public long addNonce(long nonce, X509Certificate cert) { long i; long k = 0; long n = nonce; long m = (mNonceLimit / 2) + 1; for (i = 0; i < m; i++) { k = n + i; // avoid collisions if (!mNonceList.contains(k)) { break; } k = n - i; // avoid collisions if (!mNonceList.contains(k)) { break; } } if (i < m) { mNonceList.add(k); mNonces.put(k, cert); if (mNonceList.size() > mNonceLimit) { n = mNonceList.firstElement().longValue(); mNonceList.remove(0); mNonces.remove(n); } } else { // failed to resolved collision k = -nonce; } return k; } public X509Certificate getCertificate(long nonce) { X509Certificate cert = mNonces.get(nonce); return cert; } public X509Certificate getCertificate(int index) { X509Certificate cert = null; if (index >= 0 && index < mNonceList.size()) { long nonce = mNonceList.elementAt(index).longValue(); cert = mNonces.get(nonce); } return cert; } public long getNonce(int index) { long nonce = 0; if (index >= 0 && index < mNonceList.size()) { nonce = mNonceList.elementAt(index).longValue(); } return nonce; } public void removeNonce(long nonce) { mNonceList.remove(nonce); mNonces.remove(nonce); } public int size() { return mNonceList.size(); } public int maxSize() { return mNonceLimit; } public void clear() { mNonceList.clear(); mNonces.clear(); } public boolean isInSync() { return (mNonceList.size() == mNonces.size()); } }