summaryrefslogtreecommitdiffstats
path: root/spec/eina_list_spec.rb
blob: a51b14879e1474e24336358b5ae73762fb328d76 (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#! /usr/bin/env ruby
# -*- coding: UTF-8 -*-
#
require 'efl/eina'
require 'efl/eina_list'
#
describe Efl::EinaList do
    #
    before(:all) {
        REinaList = Efl::EinaList::REinaList
        Efl::Eina.init.should == 1
    }
    after(:all) {
        Efl::Eina.shutdown.should == 0
    }
    #
    it "should append prepend and fetch" do
        l = REinaList.new
        d1 = ::FFI::MemoryPointer.from_string "D0"
        d2 = ::FFI::MemoryPointer.from_string "D1"
        d3 = ::FFI::MemoryPointer.from_string "D2"
        d4 = ::FFI::MemoryPointer.from_string "D3"
        l.append d3
        l.prepend d2
        l << d4
        l.unshift d1
        0.upto 3 do |i|
            l.nth(i).read_string.should == "D#{i}"
        end
        l.each { |p| p.read_string.empty?.should be_false }
        l.free
    end
    #
    it "should be able to convert into ruby Array from NULL pointer" do
        ary = REinaList.new(FFI::Pointer::NULL).to_ary
        ary.empty?.should be_true
        ary.is_a?(Array).should be_true
    end
    #
    it "should be able to convert into ruby Array from empty REinaList" do
        ary = REinaList.new.to_ary
        ary.empty?.should be_true
        ary.is_a?(Array).should be_true
    end
    #
    it "should be able to convert into ruby Array from non empty REinaList" do
        l = REinaList.new
        d1 = ::FFI::MemoryPointer.from_string "D0"
        d2 = ::FFI::MemoryPointer.from_string "D1"
        d3 = ::FFI::MemoryPointer.from_string "D2"
        d4 = ::FFI::MemoryPointer.from_string "D3"
        l.append d3
        l.prepend d2
        l << d4
        l.unshift d1
        ary = l.to_ary
        ary.length.should == 4
        0.upto 3 do |i|
            ary[i].read_string.should == "D#{i}"
        end
        l.free
    end
    #
    it "should be able to convert into ruby Array from non empty REinaList pointer" do
        l = REinaList.new
        d1 = ::FFI::MemoryPointer.from_string "D0"
        d2 = ::FFI::MemoryPointer.from_string "D1"
        d3 = ::FFI::MemoryPointer.from_string "D2"
        d4 = ::FFI::MemoryPointer.from_string "D3"
        l.append d3
        l.prepend d2
        l << d4
        l.unshift d1
        ary = l.to_ary
        ary.length.should == 4
        0.upto 3 do |i|
            ary[i].read_string.should == "D#{i}"
        end
        l.free
    end
    #
    it "should be able to build from a ruby Array of pointers" do
        a =  []
        a << ::FFI::MemoryPointer.from_string("D0")
        a << ::FFI::MemoryPointer.from_string("D1")
        a << ::FFI::MemoryPointer.from_string("D2")
        a << ::FFI::MemoryPointer.from_string("D3")
        l = REinaList.new a
        0.upto 3 do |i|
            l.nth(i).read_string.should == "D#{i}"
        end
        l.free
    end
    #
    it "should be able to build from a ruby Array of int" do
        a =  [3,4,5,6]
        l = REinaList.from_a a, :int
        0.upto 3 do |i|
            l.nth(i).read_int.should == i+3
        end
        l.free
    end
    #
    it "Enumerable" do
        l = REinaList.new
        d1 = ::FFI::MemoryPointer.from_string "D0"
        d2 = ::FFI::MemoryPointer.from_string "D1"
        d3 = ::FFI::MemoryPointer.from_string "D2"
        d4 = ::FFI::MemoryPointer.from_string "D3"
        l.append d3
        l.prepend d2
        l << d4
        l.unshift d1
        r = 0
        l.each do |e| r+=1; end
        r.should == 4
        r = l.inject(0) do |s,e| s+=1; s; end
        r.should == 4
    end
end