cauterize 0.0.1.pre1 → 0.0.1.pre5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/.gitignore +5 -0
  2. data/.rspec +1 -1
  3. data/Gemfile +1 -1
  4. data/README.md +0 -2
  5. data/Rakefile +19 -3
  6. data/bin/cauterize +14 -6
  7. data/example/Cauterize +22 -10
  8. data/example/build.sh +15 -2
  9. data/lib/cauterize/base_type.rb +2 -5
  10. data/lib/cauterize/builders.rb +1 -3
  11. data/lib/cauterize/builders/c/buildable.rb +3 -2
  12. data/lib/cauterize/builders/c/builtin.rb +46 -0
  13. data/lib/cauterize/builders/c/enumeration.rb +23 -2
  14. data/lib/cauterize/builders/c/fixed_array.rb +16 -7
  15. data/lib/cauterize/builders/c/group.rb +32 -3
  16. data/lib/cauterize/builders/c/scalar.rb +5 -0
  17. data/lib/cauterize/builders/c/variable_array.rb +1 -1
  18. data/lib/cauterize/builders/cs/buildable.rb +59 -0
  19. data/lib/cauterize/builders/cs/builtin.rb +23 -0
  20. data/lib/cauterize/builders/cs/composite.rb +21 -0
  21. data/lib/cauterize/builders/cs/csarray.rb +32 -0
  22. data/lib/cauterize/builders/cs/enumeration.rb +21 -0
  23. data/lib/cauterize/builders/cs/fixed_array.rb +25 -0
  24. data/lib/cauterize/builders/cs/group.rb +33 -0
  25. data/lib/cauterize/builders/cs/scalar.rb +10 -0
  26. data/lib/cauterize/builders/cs/variable_array.rb +34 -0
  27. data/lib/cauterize/builtin.rb +52 -0
  28. data/lib/cauterize/c_builder.rb +15 -1
  29. data/lib/cauterize/cauterize.rb +44 -13
  30. data/lib/cauterize/composite.rb +3 -3
  31. data/lib/cauterize/cs_builder.rb +53 -0
  32. data/lib/cauterize/enumeration.rb +20 -3
  33. data/lib/cauterize/fixed_array.rb +3 -3
  34. data/lib/cauterize/formatter.rb +7 -3
  35. data/lib/cauterize/group.rb +5 -8
  36. data/lib/cauterize/scalar.rb +16 -7
  37. data/lib/cauterize/variable_array.rb +6 -6
  38. data/lib/cauterize/version.rb +1 -1
  39. data/spec/base_type_spec.rb +133 -125
  40. data/spec/builders/c/buildable_spec.rb +18 -18
  41. data/spec/builders/c/builtin_spec.rb +22 -0
  42. data/spec/builders/c/composite_spec.rb +37 -33
  43. data/spec/builders/c/enumeration_spec.rb +84 -21
  44. data/spec/builders/c/fixed_array_spec.rb +6 -6
  45. data/spec/builders/c/group_spec.rb +97 -90
  46. data/spec/builders/c/scalar_spec.rb +24 -6
  47. data/spec/builders/c/variable_array_spec.rb +37 -37
  48. data/spec/builders/cs/buildable_spec.rb +8 -0
  49. data/spec/builders/cs/composite_spec.rb +32 -0
  50. data/spec/builders/cs/enumeration_spec.rb +33 -0
  51. data/spec/builders/cs/fixed_array_spec.rb +40 -0
  52. data/spec/builders/cs/group_spec.rb +56 -0
  53. data/spec/builders/cs/scalar_spec.rb +7 -0
  54. data/spec/builders/cs/variable_array_spec.rb +46 -0
  55. data/spec/builders_spec.rb +38 -38
  56. data/spec/builtin_spec.rb +46 -0
  57. data/spec/c_builder_spec.rb +116 -102
  58. data/spec/cauterize_spec.rb +8 -1
  59. data/spec/composite_spec.rb +52 -48
  60. data/spec/cs_builder_spec.rb +113 -0
  61. data/spec/enumeration_spec.rb +55 -16
  62. data/spec/fixed_array_spec.rb +7 -9
  63. data/spec/group_spec.rb +81 -76
  64. data/spec/scalar_spec.rb +20 -10
  65. data/spec/spec_helper.rb +103 -94
  66. data/spec/support/shared_examples_for_c_buildables.rb +68 -64
  67. data/spec/variable_array_spec.rb +12 -17
  68. data/{c → support/c}/src/cauterize.c +8 -7
  69. data/support/c/src/cauterize.h +59 -0
  70. data/{c → support/c}/src/cauterize_debug.h +0 -0
  71. data/support/c/src/cauterize_util.h +49 -0
  72. data/{c → support/c}/test/greatest.h +0 -0
  73. data/{c → support/c}/test/test.c +0 -0
  74. data/support/cs/src/CauterizeCompositeFormatter.cs +34 -0
  75. data/support/cs/src/CauterizeContainerFormatter.cs +18 -0
  76. data/support/cs/src/CauterizeEnumFormatter.cs +67 -0
  77. data/support/cs/src/CauterizeException.cs +15 -0
  78. data/support/cs/src/CauterizeFixedArrayFormatter.cs +39 -0
  79. data/support/cs/src/CauterizeFormatter.cs +40 -0
  80. data/support/cs/src/CauterizeGroupFormatter.cs +46 -0
  81. data/support/cs/src/CauterizePrimitiveFormatter.cs +33 -0
  82. data/support/cs/src/CauterizeTypeFormatterFactory.cs +39 -0
  83. data/support/cs/src/CauterizeTypes.cs +107 -0
  84. data/support/cs/src/CauterizeVariableArrayFormatter.cs +49 -0
  85. data/support/cs/src/ICauterizeTypeFormatter.cs +12 -0
  86. data/support/cs/src/OrderAttribute.cs +50 -0
  87. data/support/cs/src/PrimitiveSupport.cs +134 -0
  88. data/support/cs/src/SerializedRepresentationAttribute.cs +24 -0
  89. data/support/cs/test/CauterizeCompositeFormatterTest.cs +59 -0
  90. data/support/cs/test/CauterizeEnumFormatterTest.cs +110 -0
  91. data/support/cs/test/CauterizeFixedArrayFormatterTest.cs +91 -0
  92. data/support/cs/test/CauterizeFormatterTest.cs +40 -0
  93. data/support/cs/test/CauterizeGroupFormatterTest.cs +147 -0
  94. data/support/cs/test/CauterizeIntegrationTest.cs +129 -0
  95. data/support/cs/test/CauterizePrimitiveFormatterTest.cs +98 -0
  96. data/support/cs/test/CauterizeTypeFormatterFactoryTest.cs +73 -0
  97. data/support/cs/test/CauterizeVariableArrayFormatterTest.cs +130 -0
  98. data/support/cs/test/OrderAttributeTest.cs +39 -0
  99. data/support/cs/test/SerializedRepresentationAttributeTest.cs +39 -0
  100. metadata +68 -10
  101. data/c/src/cauterize.h +0 -46
  102. data/c/src/cauterize_util.h +0 -7
@@ -1,26 +1,24 @@
1
- describe Cauterize do
2
- before { reset_for_test }
3
-
4
- describe EnumerationValue do
1
+ module Cauterize
2
+ describe Cauterize::EnumerationValue do
5
3
  describe :initialize do
6
4
  it "creates an EnumerationValue" do
7
- e = EnumerationValue.new(:foo, 1)
5
+ e = Cauterize::EnumerationValue.new(:foo, 1)
8
6
  e.name.should == :foo
9
7
  e.value.should == 1
10
8
  end
11
9
  end
12
10
  end
13
11
 
14
- describe Enumeration do
12
+ describe Cauterize::Enumeration do
15
13
  describe :initialize do
16
14
  it "creates a new enumeration with the right name" do
17
- Enumeration.new(:foo).name.should == :foo
15
+ Cauterize::Enumeration.new(:foo).name.should == :foo
18
16
  end
19
17
  end
20
18
 
21
19
  describe :value do
22
20
  it "adds a new value to the enumeration" do
23
- enum = enumeration(:foo) do |e|
21
+ enum = Cauterize.enumeration(:foo) do |e|
24
22
  e.value :a
25
23
  e.value :b
26
24
  e.value :c
@@ -34,7 +32,7 @@ describe Cauterize do
34
32
  end
35
33
 
36
34
  it "accepts a fixed value" do
37
- enum = enumeration(:foo) do |e|
35
+ enum = Cauterize.enumeration(:foo) do |e|
38
36
  e.value :a, 10
39
37
  e.value :b, 20
40
38
  e.value :c
@@ -47,7 +45,7 @@ describe Cauterize do
47
45
 
48
46
  it "allows out-of-order values" do
49
47
  lambda {
50
- enumeration(:foo) do |e|
48
+ Cauterize.enumeration(:foo) do |e|
51
49
  e.value :a, 10
52
50
  e.value :b, 9
53
51
  end
@@ -56,7 +54,7 @@ describe Cauterize do
56
54
 
57
55
  it "doesn't allow duplicate ids" do
58
56
  lambda {
59
- enumeration(:foo) do |e|
57
+ Cauterize.enumeration(:foo) do |e|
60
58
  e.value :a, 1
61
59
  e.value :b, 1
62
60
  end
@@ -64,7 +62,7 @@ describe Cauterize do
64
62
  end
65
63
 
66
64
  it "doesn't allow accidentally identical ids" do
67
- en = enumeration(:foo) do |e|
65
+ en = Cauterize.enumeration(:foo) do |e|
68
66
  e.value :a, 10
69
67
  e.value :b, 9
70
68
  e.value :c
@@ -75,30 +73,71 @@ describe Cauterize do
75
73
 
76
74
  it "errors on duplicate names" do
77
75
  lambda {
78
- enumeration(:foo) do |e|
76
+ Cauterize.enumeration(:foo) do |e|
79
77
  e.value :a
80
78
  e.value :a
81
79
  end
82
80
  }.should raise_error /duplicate name/
83
81
  end
84
82
  end
83
+
84
+ describe :representation do
85
+ it "chooses int8 when appropriate" do
86
+ Cauterize.enumeration(:a) do |t|
87
+ t.value :a, -128
88
+ end.representation.name.should == :int8
89
+ Cauterize.enumeration(:b) do |t|
90
+ t.value :a, 127
91
+ end.representation.name.should == :int8
92
+ end
93
+
94
+ it "chooses int16 when appropriate" do
95
+ Cauterize.enumeration(:a) do |t|
96
+ t.value :a, -32768
97
+ end.representation.name.should == :int16
98
+ Cauterize.enumeration(:b) do |t|
99
+ t.value :a, 32767
100
+ end.representation.name.should == :int16
101
+ Cauterize.enumeration(:c) do |t|
102
+ t.value :a, 300
103
+ end.representation.name.should == :int16
104
+ end
105
+
106
+ it "chooses int32 when appropriate" do
107
+ Cauterize.enumeration(:a) do |t|
108
+ t.value :a, -2147483648
109
+ end.representation.name.should == :int32
110
+ Cauterize.enumeration(:b) do |t|
111
+ t.value :a, 2147483647
112
+ end.representation.name.should == :int32
113
+ end
114
+
115
+ it "chooses int64 when appropriate" do
116
+ Cauterize.enumeration(:a) do |t|
117
+ t.value :a, -9223372036854775808
118
+ end.representation.name.should == :int64
119
+ Cauterize.enumeration(:b) do |t|
120
+ t.value :a, 9223372036854775807
121
+ end.representation.name.should == :int64
122
+ end
123
+ end
85
124
  end
86
125
 
87
126
  describe :enumeration do
88
127
  it { creates_a_named_object(:enumeration, Enumeration) }
89
128
  it { retrieves_obj_with_identical_name(:enumeration) }
90
129
  it { yields_the_object(:enumeration) }
91
- it { adds_object_to_hash(:enumeration, :enumerations) }
130
+ it { adds_object_to_hash(:enumeration, Cauterize.enumerations) }
92
131
  end
93
132
 
94
133
  describe :enumeration! do
95
134
  it { creates_a_named_object(:enumeration!, Enumeration) }
96
135
  it { raises_exception_with_identical_name(:enumeration!) }
97
136
  it { yields_the_object(:enumeration!) }
98
- it { adds_object_to_hash(:enumeration!, :enumerations) }
137
+ it { adds_object_to_hash(:enumeration!, Cauterize.enumerations) }
99
138
  end
100
139
 
101
140
  describe :enumerations do
102
- it { is_hash_of_created_objs(:enumeration, :enumerations) }
141
+ it { is_hash_of_created_objs(:enumeration, Cauterize.enumerations) }
103
142
  end
104
143
  end
@@ -1,22 +1,20 @@
1
- describe Cauterize do
2
- before { reset_for_test }
3
-
1
+ module Cauterize
4
2
  describe :fixed_array do
5
3
  it { creates_a_named_object(:fixed_array, FixedArray) }
6
4
  it { retrieves_obj_with_identical_name(:fixed_array) }
7
5
  it { yields_the_object(:fixed_array) }
8
- it { adds_object_to_hash(:fixed_array, :fixed_arrays) }
6
+ it { adds_object_to_hash(:fixed_array, Cauterize.fixed_arrays) }
9
7
  end
10
8
 
11
9
  describe :fixed_array! do
12
10
  it { creates_a_named_object(:fixed_array!, FixedArray) }
13
11
  it { raises_exception_with_identical_name(:variable_array!) }
14
12
  it { yields_the_object(:fixed_array!) }
15
- it { adds_object_to_hash(:fixed_array!, :fixed_arrays) }
13
+ it { adds_object_to_hash(:fixed_array!, Cauterize.fixed_arrays) }
16
14
  end
17
15
 
18
16
  describe FixedArray do
19
- before { @a = fixed_array(:foo) }
17
+ before { @a = Cauterize.fixed_array(:foo) }
20
18
 
21
19
  describe :initialize do
22
20
  it "Creates a fixed array." do
@@ -27,21 +25,21 @@ describe Cauterize do
27
25
 
28
26
  describe :array_type do
29
27
  it "Defines the type of the FixedArray." do
30
- scalar(:uint32_t)
28
+ Cauterize.scalar(:uint32_t)
31
29
  @a.array_type :uint32_t
32
30
  @a.instance_variable_get(:@array_type).name.should == :uint32_t
33
31
  end
34
32
 
35
33
  it "raises an error if type doesn't exist" do
36
34
  lambda {
37
- fixed_array(:fa) do |f|
35
+ Cauterize.fixed_array(:fa) do |f|
38
36
  f.array_type :lol
39
37
  end
40
38
  }.should raise_error /lol does not correspond/
41
39
  end
42
40
 
43
41
  it "is the defined type if no argument is passed" do
44
- s = scalar(:uint32_t)
42
+ s = Cauterize.scalar(:uint32_t)
45
43
  @a.array_type :uint32_t
46
44
  @a.array_type.should be s
47
45
  end
data/spec/group_spec.rb CHANGED
@@ -1,103 +1,108 @@
1
- describe Cauterize do
2
- before { reset_for_test }
3
-
4
- describe :group do
5
- it { creates_a_named_object(:group, Group) }
6
- it { retrieves_obj_with_identical_name(:group) }
7
- it { yields_the_object(:group) }
8
- it { adds_object_to_hash(:group, :groups) }
9
- end
10
-
11
- describe :group! do
12
- it { creates_a_named_object(:group!, Group) }
13
- it { raises_exception_with_identical_name(:group!) }
14
- it { yields_the_object(:group!) }
15
- it { adds_object_to_hash(:group!, :groups) }
16
- end
17
-
18
- describe :groups do
19
- it "is all the defined groups" do
20
- group(:a)
21
- group(:b)
22
- groups.values.map(&:name).should == [:a, :b]
1
+ module Cauterize
2
+ describe Cauterize do
3
+ describe :group do
4
+ it { creates_a_named_object(:group, Group) }
5
+ it { retrieves_obj_with_identical_name(:group) }
6
+ it { yields_the_object(:group) }
7
+ it { adds_object_to_hash(:group, Cauterize.groups) }
23
8
  end
24
- end
25
9
 
26
- describe GroupField do
27
- describe :initialize do
28
- it "creats a GroupField" do
29
- t = scalar(:type)
30
- f = GroupField.new(:name, :type)
31
- f.name.should == :name
32
- f.type.should be t
33
- end
10
+ describe :group! do
11
+ it { creates_a_named_object(:group!, Group) }
12
+ it { raises_exception_with_identical_name(:group!) }
13
+ it { yields_the_object(:group!) }
14
+ it { adds_object_to_hash(:group!, Cauterize.groups) }
34
15
  end
35
- end
36
16
 
37
- describe Group do
38
- describe :initialize do
39
- it "makes a new Group" do
40
- Group.new(:foo).name == :foo
41
- end
17
+ describe :groups do
18
+ it { is_hash_of_created_objs(:group, Cauterize.groups) }
19
+ end
42
20
 
43
- it "creates the tag enum" do
44
- e = Group.new(:foo).tag_enum
45
- e.name.should == :group_foo_type
46
- e.values == {}
21
+ describe GroupField do
22
+ describe :initialize do
23
+ it "creats a GroupField" do
24
+ t = Cauterize.scalar(:type)
25
+ f = GroupField.new(:name, :type)
26
+ f.name.should == :name
27
+ f.type.should be t
28
+ end
47
29
  end
48
30
  end
49
31
 
50
- describe :field do
51
- it "adds a field to the Group" do
52
- a = scalar(:aaa)
53
- b = scalar(:bbb)
54
- grp = group(:foo) do |g|
55
- g.field(:a, :aaa)
56
- g.field(:b, :bbb)
32
+ describe Group do
33
+ describe :initialize do
34
+ it "makes a new Group" do
35
+ Group.new(:foo).name == :foo
57
36
  end
58
37
 
59
- grp.fields.values.map(&:name).should == [:a, :b]
38
+ it "creates the tag enum" do
39
+ e = Group.new(:foo).tag_enum
40
+ e.name.should == :group_foo_type
41
+ e.values == {}
42
+ end
60
43
  end
61
44
 
62
- it "errors on duplicate field names" do
63
- a = scalar(:aaa)
64
- lambda {
65
- grp = group(:foo) do |g|
66
- g.field(:a, :aaa)
45
+ describe :field do
46
+ it "adds a field to the Group" do
47
+ a = Cauterize.scalar(:aaa)
48
+ b = Cauterize.scalar(:bbb)
49
+ grp = Cauterize.group(:foo) do |g|
67
50
  g.field(:a, :aaa)
51
+ g.field(:b, :bbb)
68
52
  end
69
- }.should raise_error /Field name a already used/
70
- end
71
53
 
72
- it "errors on non-existant types" do
73
- lambda {
74
- grp = group(:foo) do |g|
54
+ grp.fields.values.map(&:name).should == [:a, :b]
55
+ end
56
+
57
+ it "errors on duplicate field names" do
58
+ a = Cauterize.scalar(:aaa)
59
+ lambda {
60
+ grp = Cauterize.group(:foo) do |g|
61
+ g.field(:a, :aaa)
62
+ g.field(:a, :aaa)
63
+ end
64
+ }.should raise_error /Field name a already used/
65
+ end
66
+
67
+ it "errors on non-existant types" do
68
+ lambda {
69
+ grp = Cauterize.group(:foo) do |g|
70
+ g.field(:a, :aaa)
71
+ end
72
+ }.should raise_error /name aaa does not correspond to a type/
73
+ end
74
+
75
+ it "adds a new value to the enum for each field" do
76
+ a = Cauterize.scalar(:aaa)
77
+ b = Cauterize.scalar(:bbb)
78
+ grp = Cauterize.group(:foo) do |g|
75
79
  g.field(:a, :aaa)
80
+ g.field(:b, :bbb)
76
81
  end
77
- }.should raise_error /name aaa does not correspond to a type/
78
- end
79
82
 
80
- it "adds a new value to the enum for each field" do
81
- a = scalar(:aaa)
82
- b = scalar(:bbb)
83
- grp = group(:foo) do |g|
84
- g.field(:a, :aaa)
85
- g.field(:b, :bbb)
83
+ grp.tag_enum.values.keys.should =~ [:GROUP_FOO_TYPE_A, :GROUP_FOO_TYPE_B]
86
84
  end
87
85
 
88
- grp.tag_enum.values.keys.should =~ [:GROUP_FOO_TYPE_A, :GROUP_FOO_TYPE_B]
86
+ it "allows nil types" do
87
+ grp = Cauterize.group(:empty) do |g|
88
+ g.field(:a)
89
+ g.field(:b)
90
+ end
91
+
92
+ grp.tag_enum.values.keys.should =~ [:GROUP_EMPTY_TYPE_A, :GROUP_EMPTY_TYPE_B]
93
+ end
89
94
  end
90
- end
91
95
 
92
- describe ".tag_enum" do
93
- it "is the enumeration used for the type tag" do
94
- Group.new(:foo).tag_enum.class.should be Cauterize::Enumeration
96
+ describe ".tag_enum" do
97
+ it "is the enumeration used for the type tag" do
98
+ Group.new(:foo).tag_enum.class.should be Cauterize::Enumeration
99
+ end
95
100
  end
96
- end
97
101
 
98
- describe "enum_sym" do
99
- it "returns the enumeration symbol for a field name" do
100
- group(:foo).enum_sym(:a_field).should == :GROUP_FOO_TYPE_A_FIELD
102
+ describe "enum_sym" do
103
+ it "returns the enumeration symbol for a field name" do
104
+ Cauterize.group(:foo).enum_sym(:a_field).should == :GROUP_FOO_TYPE_A_FIELD
105
+ end
101
106
  end
102
107
  end
103
108
  end
data/spec/scalar_spec.rb CHANGED
@@ -1,36 +1,46 @@
1
- describe Cauterize do
2
- before do
3
- reset_for_test
4
- flush_scalars
5
- end
6
-
1
+ module Cauterize
7
2
  describe Scalar do
8
3
  describe :initialize do
9
4
  it "creates an scalar" do
10
- scalar(:foo).name.should == :foo
5
+ Cauterize.scalar(:foo).name.should == :foo
11
6
  end
12
7
  end
13
8
 
14
9
  describe :id do
15
10
  it { has_a_unique_id_for_each_instance(Scalar) }
16
11
  end
12
+
13
+ describe :type_name do
14
+ it "specifies the builtin type to alias" do
15
+ s = Cauterize.scalar(:foo) do |t|
16
+ t.type_name(:int8)
17
+ end
18
+ end
19
+
20
+ it "raises an exception when a non-builtin is specified" do
21
+ dummy = Cauterize.scalar(:dummy)
22
+ s = Cauterize.scalar(:foo) do |t|
23
+ t.type_name(:int32)
24
+ end
25
+ end
26
+ end
17
27
  end
18
28
 
19
29
  describe :scalar do
20
30
  it { creates_a_named_object(:scalar, Scalar) }
21
31
  it { retrieves_obj_with_identical_name(:scalar) }
22
32
  it { yields_the_object(:scalar) }
23
- it { adds_object_to_hash(:scalar, :scalars) }
33
+ it { adds_object_to_hash(:scalar, Cauterize.scalars) }
24
34
  end
25
35
 
26
36
  describe :scalar! do
27
37
  it { creates_a_named_object(:scalar!, Scalar) }
28
38
  it { raises_exception_with_identical_name(:scalar!) }
29
39
  it { yields_the_object(:scalar!) }
30
- it { adds_object_to_hash(:scalar!, :scalars) }
40
+ it { adds_object_to_hash(:scalar!, Cauterize.scalars) }
31
41
  end
32
42
 
33
43
  describe :scalars do
34
- it { is_hash_of_created_objs(:scalar, :scalars) }
44
+ it { is_hash_of_created_objs(:scalar, Cauterize.scalars) }
35
45
  end
36
46
  end
data/spec/spec_helper.rb CHANGED
@@ -16,100 +16,109 @@ end
16
16
 
17
17
  ###
18
18
 
19
- def reset_for_test
20
- BaseType.class_variable_set(:@@next_id, {})
21
- BaseType.class_variable_set(:@@instances, {})
22
- BaseType.class_variable_set(:@@used_names, Set.new)
23
-
24
- Cauterize.module_exec do
25
- @enumerations = {}
26
- @groups = {}
19
+ module Cauterize
20
+ module CauterizeHelpers
21
+ def reset_for_test
22
+ BaseType.class_variable_set(:@@next_id, {})
23
+ BaseType.class_variable_set(:@@instances, {})
24
+
25
+ Cauterize.module_exec do
26
+ @builtins = {}
27
+ @scalars = {}
28
+ @composites = {}
29
+ @enumerations = {}
30
+ @fixed_ararys = {}
31
+ @variable_arrays = {}
32
+ @groups = {}
33
+ end
34
+
35
+ Cauterize.create_builtins
36
+ end
37
+
38
+ def is_tagged_as(cls, tag)
39
+ cls.new(:foo).tag.should == tag
40
+ end
41
+
42
+ def has_a_unique_id_for_each_instance(cls)
43
+ cls.new(:foo).id.should == 0
44
+ cls.new(:bar).id.should == 1
45
+ cls.new(:baz).id.should == 2
46
+ end
47
+
48
+ def creates_a_named_object(fn_sym, obj)
49
+ fn = Cauterize.method(fn_sym)
50
+ a = fn.call(:foo)
51
+ a.class.should == obj
52
+ a.name.should == :foo
53
+ end
54
+
55
+ def retrieves_obj_with_identical_name(fn_sym)
56
+ fn = Cauterize.method(fn_sym)
57
+ a = fn.call(:foo)
58
+ b = fn.call(:foo)
59
+ a.should be b
60
+ end
61
+
62
+ def raises_exception_with_identical_name(fn_sym)
63
+ fn = Cauterize.method(fn_sym)
64
+ fn.call(:foo)
65
+ lambda { fn.call(:foo) }.should raise_error
66
+ end
67
+
68
+ def yields_the_object(fn_sym)
69
+ fn = Cauterize.method(fn_sym)
70
+ called = false
71
+ yielded = nil
72
+ r = fn.call(:foo) { |a| yielded = a }
73
+ yielded.should be r
74
+ end
75
+
76
+ def adds_object_to_hash(fn_sym, hash_inst)
77
+ fn = Cauterize.method(fn_sym)
78
+
79
+ f = fn.call(:foo)
80
+ b = fn.call(:bar)
81
+
82
+ hash_inst.keys.should == [:foo, :bar]
83
+ hash_inst.values[0].should be f
84
+ hash_inst.values[1].should be b
85
+ end
86
+
87
+ def is_hash_of_created_objs(create_fn_sym, hash_inst)
88
+ create_fn = Cauterize.method(create_fn_sym)
89
+
90
+ f = create_fn.call(:foo)
91
+ b = create_fn.call(:bar)
92
+ z = create_fn.call(:zap)
93
+
94
+ vs = hash_inst.values
95
+ vs[0].should be f
96
+ vs[1].should be b
97
+ vs[2].should be z
98
+ hash_inst.keys.should == [:foo, :bar, :zap]
99
+ end
100
+
101
+
102
+ ###############################################################################
103
+
104
+ def gen_test_main(sym_list)
105
+ sym_voids = sym_list.map {|s| "(void*)#{s}"}.join(", ")
106
+ str = <<-EOF
107
+ #include "testing.h"
108
+
109
+ int main(int argc, char * argv[])
110
+ {
111
+ (void)argc;
112
+ (void)argv;
113
+
114
+ void * ptr[] = {#{sym_voids}};
115
+ (void)ptr;
116
+
117
+ return 0;
118
+ }
119
+ EOF
120
+ end
27
121
  end
28
-
29
- end
30
-
31
- def is_tagged_as(cls, tag)
32
- cls.new(:foo).tag.should == tag
33
- end
34
-
35
- def has_a_unique_id_for_each_instance(cls)
36
- cls.new(:foo).id.should == 0
37
- cls.new(:bar).id.should == 1
38
- cls.new(:baz).id.should == 2
39
- end
40
-
41
- def creates_a_named_object(fn_sym, obj)
42
- fn = method(fn_sym)
43
- a = fn.call(:foo)
44
- a.class.should == obj
45
- a.name.should == :foo
46
122
  end
47
123
 
48
- def retrieves_obj_with_identical_name(fn_sym)
49
- fn = method(fn_sym)
50
- a = fn.call(:foo)
51
- b = fn.call(:foo)
52
- a.should be b
53
- end
54
-
55
- def raises_exception_with_identical_name(fn_sym)
56
- fn = method(fn_sym)
57
- fn.call(:foo)
58
- lambda { fn.call(:foo) }.should raise_error
59
- end
60
-
61
- def yields_the_object(fn_sym)
62
- fn = method(fn_sym)
63
- called = false
64
- yielded = nil
65
- r = fn.call(:foo) { |a| yielded = a }
66
- yielded.should be r
67
- end
68
-
69
- def adds_object_to_hash(fn_sym, hash_fn_sym)
70
- fn = method(fn_sym)
71
- hash_fn = method(hash_fn_sym)
72
-
73
- f = fn.call(:foo)
74
- b = fn.call(:bar)
75
-
76
- hash_fn.call.keys.should == [:foo, :bar]
77
- hash_fn.call.values[0].should be f
78
- hash_fn.call.values[1].should be b
79
- end
80
-
81
- def is_hash_of_created_objs(create_fn_sym, hash_fn_sym)
82
- create_fn = method(create_fn_sym)
83
- hash_fn = method(hash_fn_sym)
84
-
85
- f = create_fn.call(:foo)
86
- b = create_fn.call(:bar)
87
- z = create_fn.call(:zap)
88
-
89
- vs = hash_fn.call.values
90
- vs[0].should be f
91
- vs[1].should be b
92
- vs[2].should be z
93
- hash_fn.call.keys.should == [:foo, :bar, :zap]
94
- end
95
-
96
-
97
- ###############################################################################
98
-
99
- def gen_test_main(sym_list)
100
- sym_voids = sym_list.map {|s| "(void*)#{s}"}.join(", ")
101
- str = <<-EOF
102
- #include "testing.h"
103
-
104
- int main(int argc, char * argv[])
105
- {
106
- (void)argc;
107
- (void)argv;
108
-
109
- void * ptr[] = {#{sym_voids}};
110
- (void)ptr;
111
-
112
- return 0;
113
- }
114
- EOF
115
- end
124
+ include Cauterize::CauterizeHelpers