File: data.rb

package info (click to toggle)
mruby 3.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,584 kB
  • sloc: ansic: 51,933; ruby: 29,510; yacc: 7,077; cpp: 517; makefile: 51; sh: 42
file content (76 lines) | stat: -rw-r--r-- 1,535 bytes parent folder | download | duplicates (4)
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
##
# Struct ISO Test

assert('Data') do
  assert_equal Class, Data.class
end

assert('Data.define') do
  c = Data.define(:m1, :m2)
  assert_equal Data, c.superclass
  assert_equal [:m1, :m2], c.members
end

assert('Data#==') do
  c = Data.define(:m1, :m2)
  cc1 = c.new(1,2)
  cc2 = c.new(1,2)
  assert_true cc1 == cc2
end

assert('Data#members') do
  c = Data.define(:m1, :m2)
  assert_equal [:m1, :m2], c.new(1,2).members
end

assert('wrong struct arg count') do
  c = Data.define(:m1)
  assert_raise ArgumentError do
    cc = c.new(1,2,3)
  end
end

assert('data dup') do
  c = Data.define(:m1, :m2, :m3, :m4, :m5)
  cc = c.new(1,2,3,4,5)
  assert_nothing_raised {
    assert_equal(cc, cc.dup)
  }
end

assert('Data inspect') do
  c = Data.define(:m1, :m2, :m3, :m4, :m5)
  cc = c.new(1,2,3,4,5)
  assert_equal "#<data m1=1, m2=2, m3=3, m4=4, m5=5>", cc.inspect
end

assert('Data#to_h') do
  s = Data.define(:white, :red, :green).new('ruuko', 'yuzuki', 'hitoe')
  assert_equal({:white => 'ruuko', :red => 'yuzuki', :green => 'hitoe'}) { s.to_h }
end

assert("Data.define does not allow array") do
  assert_raise(TypeError) do
    Data.define("Test", [:a])
  end
end

assert("Data.define generates subclass of Data") do
  begin
    original_struct = Data
    Data = String
    assert_equal original_struct, original_struct.define(:foo).superclass
  ensure
    Data = original_struct
  end
end

assert 'Data#freeze' do
  c = Data.define(:m)

  o = c.new(:test)
  assert_equal :test, o.m
  assert_nothing_raised {
    o.freeze
  }
end