cauterize 0.0.1.pre1 → 0.0.1.pre5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +5 -0
- data/.rspec +1 -1
- data/Gemfile +1 -1
- data/README.md +0 -2
- data/Rakefile +19 -3
- data/bin/cauterize +14 -6
- data/example/Cauterize +22 -10
- data/example/build.sh +15 -2
- data/lib/cauterize/base_type.rb +2 -5
- data/lib/cauterize/builders.rb +1 -3
- data/lib/cauterize/builders/c/buildable.rb +3 -2
- data/lib/cauterize/builders/c/builtin.rb +46 -0
- data/lib/cauterize/builders/c/enumeration.rb +23 -2
- data/lib/cauterize/builders/c/fixed_array.rb +16 -7
- data/lib/cauterize/builders/c/group.rb +32 -3
- data/lib/cauterize/builders/c/scalar.rb +5 -0
- data/lib/cauterize/builders/c/variable_array.rb +1 -1
- data/lib/cauterize/builders/cs/buildable.rb +59 -0
- data/lib/cauterize/builders/cs/builtin.rb +23 -0
- data/lib/cauterize/builders/cs/composite.rb +21 -0
- data/lib/cauterize/builders/cs/csarray.rb +32 -0
- data/lib/cauterize/builders/cs/enumeration.rb +21 -0
- data/lib/cauterize/builders/cs/fixed_array.rb +25 -0
- data/lib/cauterize/builders/cs/group.rb +33 -0
- data/lib/cauterize/builders/cs/scalar.rb +10 -0
- data/lib/cauterize/builders/cs/variable_array.rb +34 -0
- data/lib/cauterize/builtin.rb +52 -0
- data/lib/cauterize/c_builder.rb +15 -1
- data/lib/cauterize/cauterize.rb +44 -13
- data/lib/cauterize/composite.rb +3 -3
- data/lib/cauterize/cs_builder.rb +53 -0
- data/lib/cauterize/enumeration.rb +20 -3
- data/lib/cauterize/fixed_array.rb +3 -3
- data/lib/cauterize/formatter.rb +7 -3
- data/lib/cauterize/group.rb +5 -8
- data/lib/cauterize/scalar.rb +16 -7
- data/lib/cauterize/variable_array.rb +6 -6
- data/lib/cauterize/version.rb +1 -1
- data/spec/base_type_spec.rb +133 -125
- data/spec/builders/c/buildable_spec.rb +18 -18
- data/spec/builders/c/builtin_spec.rb +22 -0
- data/spec/builders/c/composite_spec.rb +37 -33
- data/spec/builders/c/enumeration_spec.rb +84 -21
- data/spec/builders/c/fixed_array_spec.rb +6 -6
- data/spec/builders/c/group_spec.rb +97 -90
- data/spec/builders/c/scalar_spec.rb +24 -6
- data/spec/builders/c/variable_array_spec.rb +37 -37
- data/spec/builders/cs/buildable_spec.rb +8 -0
- data/spec/builders/cs/composite_spec.rb +32 -0
- data/spec/builders/cs/enumeration_spec.rb +33 -0
- data/spec/builders/cs/fixed_array_spec.rb +40 -0
- data/spec/builders/cs/group_spec.rb +56 -0
- data/spec/builders/cs/scalar_spec.rb +7 -0
- data/spec/builders/cs/variable_array_spec.rb +46 -0
- data/spec/builders_spec.rb +38 -38
- data/spec/builtin_spec.rb +46 -0
- data/spec/c_builder_spec.rb +116 -102
- data/spec/cauterize_spec.rb +8 -1
- data/spec/composite_spec.rb +52 -48
- data/spec/cs_builder_spec.rb +113 -0
- data/spec/enumeration_spec.rb +55 -16
- data/spec/fixed_array_spec.rb +7 -9
- data/spec/group_spec.rb +81 -76
- data/spec/scalar_spec.rb +20 -10
- data/spec/spec_helper.rb +103 -94
- data/spec/support/shared_examples_for_c_buildables.rb +68 -64
- data/spec/variable_array_spec.rb +12 -17
- data/{c → support/c}/src/cauterize.c +8 -7
- data/support/c/src/cauterize.h +59 -0
- data/{c → support/c}/src/cauterize_debug.h +0 -0
- data/support/c/src/cauterize_util.h +49 -0
- data/{c → support/c}/test/greatest.h +0 -0
- data/{c → support/c}/test/test.c +0 -0
- data/support/cs/src/CauterizeCompositeFormatter.cs +34 -0
- data/support/cs/src/CauterizeContainerFormatter.cs +18 -0
- data/support/cs/src/CauterizeEnumFormatter.cs +67 -0
- data/support/cs/src/CauterizeException.cs +15 -0
- data/support/cs/src/CauterizeFixedArrayFormatter.cs +39 -0
- data/support/cs/src/CauterizeFormatter.cs +40 -0
- data/support/cs/src/CauterizeGroupFormatter.cs +46 -0
- data/support/cs/src/CauterizePrimitiveFormatter.cs +33 -0
- data/support/cs/src/CauterizeTypeFormatterFactory.cs +39 -0
- data/support/cs/src/CauterizeTypes.cs +107 -0
- data/support/cs/src/CauterizeVariableArrayFormatter.cs +49 -0
- data/support/cs/src/ICauterizeTypeFormatter.cs +12 -0
- data/support/cs/src/OrderAttribute.cs +50 -0
- data/support/cs/src/PrimitiveSupport.cs +134 -0
- data/support/cs/src/SerializedRepresentationAttribute.cs +24 -0
- data/support/cs/test/CauterizeCompositeFormatterTest.cs +59 -0
- data/support/cs/test/CauterizeEnumFormatterTest.cs +110 -0
- data/support/cs/test/CauterizeFixedArrayFormatterTest.cs +91 -0
- data/support/cs/test/CauterizeFormatterTest.cs +40 -0
- data/support/cs/test/CauterizeGroupFormatterTest.cs +147 -0
- data/support/cs/test/CauterizeIntegrationTest.cs +129 -0
- data/support/cs/test/CauterizePrimitiveFormatterTest.cs +98 -0
- data/support/cs/test/CauterizeTypeFormatterFactoryTest.cs +73 -0
- data/support/cs/test/CauterizeVariableArrayFormatterTest.cs +130 -0
- data/support/cs/test/OrderAttributeTest.cs +39 -0
- data/support/cs/test/SerializedRepresentationAttributeTest.cs +39 -0
- metadata +68 -10
- data/c/src/cauterize.h +0 -46
- data/c/src/cauterize_util.h +0 -7
data/lib/cauterize/composite.rb
CHANGED
@@ -6,16 +6,16 @@ module Cauterize
|
|
6
6
|
module_function
|
7
7
|
|
8
8
|
def composite(name)
|
9
|
-
c = composites[name] || composites[name] = Composite.new(name)
|
9
|
+
c = Cauterize.composites[name] || Cauterize.composites[name] = Composite.new(name)
|
10
10
|
yield c if block_given?
|
11
11
|
return c
|
12
12
|
end
|
13
13
|
|
14
14
|
def composite!(name, &blk)
|
15
|
-
if composites[name]
|
15
|
+
if Cauterize.composites[name]
|
16
16
|
raise Exception.new("Composite with name #{name} already exists.")
|
17
17
|
else
|
18
|
-
composite(name, &blk)
|
18
|
+
Cauterize.composite(name, &blk)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
module Cauterize
|
4
|
+
class CSBuilder
|
5
|
+
attr_reader :cs
|
6
|
+
|
7
|
+
def initialize(cs_file, name="cauterize")
|
8
|
+
@cs = cs_file
|
9
|
+
@name = name.camel
|
10
|
+
end
|
11
|
+
|
12
|
+
def build
|
13
|
+
build_cs
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def build_cs
|
19
|
+
f = four_space_formatter
|
20
|
+
|
21
|
+
f << "using System;"
|
22
|
+
f << "using Cauterize;"
|
23
|
+
f.blank_line
|
24
|
+
f << "namespace #{@name}"
|
25
|
+
f.braces do
|
26
|
+
f << "public class #{@name}CauterizeInfo : CauterizeInfo"
|
27
|
+
f.braces do
|
28
|
+
f << "static #{@name}CauterizeInfo()"
|
29
|
+
f.braces do
|
30
|
+
f << "Name = \"#{@name}\";"
|
31
|
+
f << "GeneratedVersion = \"#{Cauterize.get_version}\";"
|
32
|
+
f << "GeneratedDate = \"#{Cauterize.get_version}\";"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
f.blank_line
|
36
|
+
|
37
|
+
instances = BaseType.all_instances
|
38
|
+
builders = instances.map {|i| Builders.get(:cs, i)}
|
39
|
+
|
40
|
+
builders.each { |b| b.enum_defn(f) }
|
41
|
+
builders.each { |b| b.class_defn(f) }
|
42
|
+
# # should we really do these, or is it annotations and a custom
|
43
|
+
# # formatter in support???
|
44
|
+
# builders.each { |b| b.packer_defn(f) }
|
45
|
+
# builders.each { |b| b.unpacker_defn(f) }
|
46
|
+
end
|
47
|
+
|
48
|
+
File.open(@cs, "wb") do |fh|
|
49
|
+
fh.write(f.to_s)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -7,16 +7,16 @@ require 'set'
|
|
7
7
|
module Cauterize
|
8
8
|
module_function
|
9
9
|
def enumeration(name)
|
10
|
-
e = enumerations[name] || enumerations[name] = Enumeration.new(name)
|
10
|
+
e = Cauterize.enumerations[name] || Cauterize.enumerations[name] = Enumeration.new(name)
|
11
11
|
yield e if block_given?
|
12
12
|
return e
|
13
13
|
end
|
14
14
|
|
15
15
|
def enumeration!(name, &blk)
|
16
|
-
if enumerations[name]
|
16
|
+
if Cauterize.enumerations[name]
|
17
17
|
raise Exception.new("Enumeration with name #{name} already exists.")
|
18
18
|
else
|
19
|
-
enumeration(name, &blk)
|
19
|
+
Cauterize.enumeration(name, &blk)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -53,6 +53,23 @@ module Cauterize
|
|
53
53
|
@values[name] = EnumerationValue.new(name, next_id)
|
54
54
|
end
|
55
55
|
|
56
|
+
def representation
|
57
|
+
max_val = @values.values.map(&:value).max
|
58
|
+
min_val = @values.values.map(&:value).min
|
59
|
+
|
60
|
+
if -128 <= min_val and max_val <= 127
|
61
|
+
BaseType.find_type!(:int8)
|
62
|
+
elsif (-32768 <= min_val and max_val <= 32767)
|
63
|
+
BaseType.find_type!(:int16)
|
64
|
+
elsif (-2147483648 <= min_val and max_val <= 2147483647)
|
65
|
+
BaseType.find_type!(:int32)
|
66
|
+
elsif (-9223372036854775808 <= min_val and max_val <= 9223372036854775807)
|
67
|
+
BaseType.find_type!(:int64)
|
68
|
+
else
|
69
|
+
raise Exception.new("Unable to represent enumeration (#{min_val} -> #{max_val})")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
56
73
|
private
|
57
74
|
|
58
75
|
def value_id(next_id=nil)
|
@@ -2,16 +2,16 @@ module Cauterize
|
|
2
2
|
module_function
|
3
3
|
|
4
4
|
def fixed_array(name)
|
5
|
-
a = fixed_arrays[name] || fixed_arrays[name] = FixedArray.new(name)
|
5
|
+
a = Cauterize.fixed_arrays[name] || Cauterize.fixed_arrays[name] = FixedArray.new(name)
|
6
6
|
yield a if block_given?
|
7
7
|
return a
|
8
8
|
end
|
9
9
|
|
10
10
|
def fixed_array!(name, &blk)
|
11
|
-
if fixed_arrays[name]
|
11
|
+
if Cauterize.fixed_arrays[name]
|
12
12
|
raise Exception.new("FixedArray with name #{name} already exists.")
|
13
13
|
else
|
14
|
-
fixed_array(name, &blk)
|
14
|
+
Cauterize.fixed_array(name, &blk)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
data/lib/cauterize/formatter.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
def default_formatter
|
2
|
-
Formatter.new
|
2
|
+
Formatter.new(" ")
|
3
|
+
end
|
4
|
+
|
5
|
+
def four_space_formatter
|
6
|
+
Formatter.new(" ")
|
3
7
|
end
|
4
8
|
|
5
9
|
class Formatter
|
6
|
-
def initialize
|
10
|
+
def initialize(indent_str)
|
7
11
|
@indent_level = 0
|
8
|
-
@indent_str =
|
12
|
+
@indent_str = indent_str
|
9
13
|
@lines = []
|
10
14
|
end
|
11
15
|
|
data/lib/cauterize/group.rb
CHANGED
@@ -2,16 +2,16 @@ module Cauterize
|
|
2
2
|
module_function
|
3
3
|
|
4
4
|
def group(name)
|
5
|
-
a = groups[name] || groups[name] = Group.new(name)
|
5
|
+
a = Cauterize.groups[name] || Cauterize.groups[name] = Group.new(name)
|
6
6
|
yield a if block_given?
|
7
7
|
return a
|
8
8
|
end
|
9
9
|
|
10
10
|
def group!(name, &blk)
|
11
|
-
if groups[name]
|
11
|
+
if Cauterize.groups[name]
|
12
12
|
raise Exception.new("Group with name #{name} already exists.")
|
13
13
|
else
|
14
|
-
group(name, &blk)
|
14
|
+
Cauterize.group(name, &blk)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -24,10 +24,7 @@ module Cauterize
|
|
24
24
|
|
25
25
|
def initialize(name, type)
|
26
26
|
@name = name
|
27
|
-
@type = BaseType.find_type!(type)
|
28
|
-
end
|
29
|
-
|
30
|
-
def enum_sym
|
27
|
+
@type = BaseType.find_type!(type) if type
|
31
28
|
end
|
32
29
|
end
|
33
30
|
|
@@ -40,7 +37,7 @@ module Cauterize
|
|
40
37
|
@tag_enum = Cauterize.enumeration!("group_#{name}_type".to_sym)
|
41
38
|
end
|
42
39
|
|
43
|
-
def field(name, type)
|
40
|
+
def field(name, type=nil)
|
44
41
|
if @fields[name]
|
45
42
|
raise Exception.new("Field name #{name} already used.")
|
46
43
|
else
|
data/lib/cauterize/scalar.rb
CHANGED
@@ -9,16 +9,16 @@ module Cauterize
|
|
9
9
|
module_function
|
10
10
|
|
11
11
|
def scalar(name)
|
12
|
-
a = scalars[name] || scalars[name] = Scalar.new(name)
|
12
|
+
a = Cauterize.scalars[name] || Cauterize.scalars[name] = Scalar.new(name)
|
13
13
|
yield a if block_given?
|
14
14
|
return a
|
15
15
|
end
|
16
16
|
|
17
17
|
def scalar!(name, &blk)
|
18
|
-
if scalars[name]
|
18
|
+
if Cauterize.scalars[name]
|
19
19
|
raise Exception.new("Scalar with name #{name} already exists.")
|
20
20
|
else
|
21
|
-
scalar(name, &blk)
|
21
|
+
Cauterize.scalar(name, &blk)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -26,13 +26,22 @@ module Cauterize
|
|
26
26
|
@scalars ||= {}
|
27
27
|
end
|
28
28
|
|
29
|
-
def flush_scalars
|
30
|
-
@scalars = {}
|
31
|
-
end
|
32
|
-
|
33
29
|
class Scalar < BaseType
|
34
30
|
def initialize(name)
|
35
31
|
super
|
36
32
|
end
|
33
|
+
|
34
|
+
def type_name(type_name = nil)
|
35
|
+
if type_name
|
36
|
+
t = BaseType.find_type!(type_name)
|
37
|
+
if t.class != BuiltIn
|
38
|
+
raise Exception.new("Must specify a BuiltIn type for scalars.")
|
39
|
+
end
|
40
|
+
|
41
|
+
@type_name = t
|
42
|
+
else
|
43
|
+
@type_name
|
44
|
+
end
|
45
|
+
end
|
37
46
|
end
|
38
47
|
end
|
@@ -2,21 +2,21 @@ module Cauterize
|
|
2
2
|
module_function
|
3
3
|
|
4
4
|
def variable_array(name)
|
5
|
-
a = variable_arrays[name] || variable_arrays[name] = VariableArray.new(name)
|
5
|
+
a = Cauterize.variable_arrays[name] || Cauterize.variable_arrays[name] = VariableArray.new(name)
|
6
6
|
yield a if block_given?
|
7
7
|
return a
|
8
8
|
end
|
9
9
|
|
10
10
|
def variable_array!(name, &blk)
|
11
|
-
if variable_arrays[name]
|
11
|
+
if Cauterize.variable_arrays[name]
|
12
12
|
raise Exception.new("VariableArray with name #{name} already exists.")
|
13
13
|
else
|
14
|
-
variable_array(name, &blk)
|
14
|
+
Cauterize.variable_array(name, &blk)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
def variable_arrays
|
19
|
-
@
|
19
|
+
@variable_arrays ||= {}
|
20
20
|
end
|
21
21
|
|
22
22
|
class VariableArray < BaseType
|
@@ -43,10 +43,10 @@ module Cauterize
|
|
43
43
|
def size_type(t = nil)
|
44
44
|
if t
|
45
45
|
_t = BaseType.find_type!(t)
|
46
|
-
if _t.is_scalar?
|
46
|
+
if _t.is_built_in? or _t.is_scalar?
|
47
47
|
@size_type = _t
|
48
48
|
else
|
49
|
-
raise Exception.new("The type #{t} is not
|
49
|
+
raise Exception.new("The type #{t} is not a built-in or scalar type")
|
50
50
|
end
|
51
51
|
else
|
52
52
|
@size_type
|
data/lib/cauterize/version.rb
CHANGED
data/spec/base_type_spec.rb
CHANGED
@@ -1,166 +1,174 @@
|
|
1
|
-
|
1
|
+
module Cauterize
|
2
2
|
|
3
|
-
describe Cauterize do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
describe Cauterize do
|
4
|
+
describe BaseType do
|
5
|
+
describe :id do
|
6
|
+
it { has_a_unique_id_for_each_instance(BaseType) }
|
7
|
+
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
describe :type_str do
|
10
|
+
it "is the hexadecimal representation of type" do
|
11
|
+
f = Cauterize.enumeration(:foo) do |e|
|
12
|
+
e.value :a, 1
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
e.value :a, 1
|
18
|
-
end
|
19
|
-
b = enumeration(:bar) do |e|
|
20
|
-
e.value :a, 1
|
21
|
-
end
|
15
|
+
b = Cauterize.enumeration(:bar) do |e|
|
16
|
+
e.value :a, 1
|
17
|
+
end
|
22
18
|
|
23
|
-
|
19
|
+
b.type_str.should == "0x2001"
|
20
|
+
end
|
24
21
|
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe :tag do
|
28
|
-
it { is_tagged_as(Scalar, 0) }
|
29
|
-
it { is_tagged_as(Enumeration, 1) }
|
30
|
-
it { is_tagged_as(Composite, 2) }
|
31
|
-
it { is_tagged_as(FixedArray, 3) }
|
32
|
-
it { is_tagged_as(VariableArray, 4) }
|
33
|
-
it { is_tagged_as(Group, 5) }
|
34
|
-
end
|
35
22
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
23
|
+
describe :tag do
|
24
|
+
it { is_tagged_as(Scalar, 0) }
|
25
|
+
it { is_tagged_as(Enumeration, 1) }
|
26
|
+
it { is_tagged_as(Composite, 2) }
|
27
|
+
it { is_tagged_as(FixedArray, 3) }
|
28
|
+
it { is_tagged_as(VariableArray, 4) }
|
29
|
+
it { is_tagged_as(Group, 5) }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe :next_id do
|
33
|
+
it "is an incrementing value starting at 0" do
|
34
|
+
# the .new consumes the 0.
|
35
|
+
BaseType.new(:foo).instance_exec do
|
36
|
+
next_id.should == 1
|
37
|
+
next_id.should == 2
|
38
|
+
next_id.should == 3
|
39
|
+
next_id.should == 4
|
40
|
+
end
|
44
41
|
end
|
45
|
-
end
|
46
42
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
43
|
+
it "should not allow derived class ids to interact" do
|
44
|
+
a1 = Scalar.new(:uint8_t)
|
45
|
+
a2 = Scalar.new(:uint64_t)
|
46
|
+
e1 = Enumeration.new(:zoop)
|
47
|
+
e2 = Enumeration.new(:nih)
|
52
48
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
49
|
+
a1.id.should == 0
|
50
|
+
a2.id.should == 1
|
51
|
+
e1.id.should == 0
|
52
|
+
e2.id.should == 1
|
53
|
+
end
|
57
54
|
end
|
58
|
-
end
|
59
55
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
56
|
+
describe "bit stuff" do
|
57
|
+
it "is consistent" do
|
58
|
+
BaseType.class_exec do
|
59
|
+
(tag_bit_width + id_bit_width).should == type_bit_width
|
60
|
+
(tag_bit_mask >> id_bit_width).should == 0x7
|
61
|
+
end
|
65
62
|
end
|
66
63
|
end
|
67
|
-
end
|
68
64
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
def initialize(name); end
|
73
|
-
end
|
74
|
-
x = X.new(:foo)
|
65
|
+
describe :register_instance do
|
66
|
+
it "adds an instance to the instance list" do
|
67
|
+
orig_len = BaseType.all_instances.length
|
75
68
|
|
76
|
-
|
77
|
-
|
78
|
-
|
69
|
+
class X < BaseType
|
70
|
+
def initialize(name); end
|
71
|
+
end
|
72
|
+
x = X.new(:foo)
|
73
|
+
|
74
|
+
x.instance_exec do
|
75
|
+
register_instance(x)
|
76
|
+
end
|
79
77
|
|
80
|
-
|
81
|
-
|
78
|
+
BaseType.all_instances.last.should be x
|
79
|
+
BaseType.all_instances.length.should == orig_len + 1
|
80
|
+
end
|
82
81
|
end
|
83
|
-
end
|
84
82
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
83
|
+
describe :instances do
|
84
|
+
# Two things are being tested here.
|
85
|
+
# 1. That instances works.
|
86
|
+
# 2. That super() is called in each .new
|
87
|
+
it "is every instance of a BaseType-derived class" do
|
88
|
+
BaseType.class_variable_set(:@@instances, {})
|
89
|
+
|
90
|
+
b = BuiltIn.new(:uint32)
|
91
|
+
s = Scalar.new(:eek)
|
92
|
+
e = Enumeration.new(:emoo)
|
93
|
+
c = Composite.new(:cooo)
|
94
|
+
f = FixedArray.new(:moo)
|
95
|
+
v = VariableArray.new(:quack)
|
96
|
+
g = Group.new(:goo)
|
91
97
|
|
92
|
-
|
93
|
-
e = Enumeration.new(:emoo)
|
94
|
-
c = Composite.new(:cooo)
|
95
|
-
f = FixedArray.new(:moo)
|
96
|
-
v = VariableArray.new(:quack)
|
97
|
-
g = Group.new(:goo)
|
98
|
+
lst = [b, s, e, c, f, v, g]
|
98
99
|
|
99
|
-
|
100
|
+
instances = BaseType.all_instances
|
100
101
|
|
101
|
-
|
102
|
-
|
102
|
+
# There will be some extras due to automatic creation of enums and
|
103
|
+
# scalars in Enumeration and Group.
|
104
|
+
instances.should include(*lst)
|
103
105
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
106
|
+
# Check that each of our instances shows up in the list returned from
|
107
|
+
# all_instances. Do it this way in case there are other types created
|
108
|
+
# (like the enumeration for Group).
|
109
|
+
lst.all? do |l|
|
110
|
+
instances.any? {|i| i.equal? l}
|
111
|
+
end
|
109
112
|
end
|
110
113
|
end
|
111
|
-
end
|
112
114
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
115
|
+
describe :find_type do
|
116
|
+
it "returns the instance with the provided name" do
|
117
|
+
f = Cauterize.scalar(:foo)
|
118
|
+
b = Cauterize.scalar(:bar)
|
117
119
|
|
118
|
-
|
119
|
-
|
120
|
-
|
120
|
+
BaseType.find_type(:bar).should be b
|
121
|
+
BaseType.find_type(:foo).should be f
|
122
|
+
end
|
121
123
|
|
122
|
-
|
123
|
-
|
124
|
+
it "is nil on an unknown name" do
|
125
|
+
BaseType.find_type(:xxxxxxxxxxxxxxxxxx).should be_nil
|
126
|
+
end
|
124
127
|
end
|
125
|
-
end
|
126
128
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
129
|
+
describe :find_type! do
|
130
|
+
it "returns the instance with the provided name" do
|
131
|
+
f = Cauterize.scalar(:foo)
|
132
|
+
b = Cauterize.scalar(:bar)
|
131
133
|
|
132
|
-
|
133
|
-
|
134
|
-
|
134
|
+
BaseType.find_type!(:bar).should be b
|
135
|
+
BaseType.find_type!(:foo).should be f
|
136
|
+
end
|
135
137
|
|
136
|
-
|
137
|
-
|
138
|
+
it "errors on an unknown name" do
|
139
|
+
lambda { BaseType.find_type!(:foo) }.should raise_error /name foo does not/
|
140
|
+
end
|
138
141
|
end
|
139
|
-
end
|
140
142
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
143
|
+
describe "is_[type]?" do
|
144
|
+
it "supports scalar" do
|
145
|
+
Cauterize.scalar(:foo).is_scalar?.should be_true
|
146
|
+
end
|
145
147
|
|
146
|
-
|
147
|
-
|
148
|
-
|
148
|
+
it "supports enumeration" do
|
149
|
+
Cauterize.enumeration(:foo).is_enumeration?.should be_true
|
150
|
+
end
|
149
151
|
|
150
|
-
|
151
|
-
|
152
|
-
|
152
|
+
it "supports composite" do
|
153
|
+
Cauterize.composite(:foo).is_composite?.should be_true
|
154
|
+
end
|
153
155
|
|
154
|
-
|
155
|
-
|
156
|
-
|
156
|
+
it "supports fixed_array" do
|
157
|
+
Cauterize.fixed_array(:foo).is_fixed_array?.should be_true
|
158
|
+
end
|
157
159
|
|
158
|
-
|
159
|
-
|
160
|
-
|
160
|
+
it "supports variable_array" do
|
161
|
+
Cauterize.variable_array(:foo).is_variable_array?.should be_true
|
162
|
+
end
|
161
163
|
|
162
|
-
|
163
|
-
|
164
|
+
it "supports group" do
|
165
|
+
Cauterize.group(:foo).is_group?.should be_true
|
166
|
+
end
|
167
|
+
|
168
|
+
it "supports builtin" do
|
169
|
+
# This one is special because of how buitins are declared
|
170
|
+
Cauterize.builtins[:int32].is_built_in?.should be_true
|
171
|
+
end
|
164
172
|
end
|
165
173
|
end
|
166
174
|
end
|