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.
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
@@ -0,0 +1,40 @@
1
+ using System;
2
+ using System.IO;
3
+ using System.Text;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using NUnit.Framework;
7
+ using Cauterize;
8
+ using Moq;
9
+
10
+ namespace Cauterize.Test
11
+ {
12
+ [TestFixture]
13
+ public class CauterizeFormatterTest
14
+ {
15
+ [Test]
16
+ public void TestDeserialize()
17
+ {
18
+ var subFormatter = new Mock<ICauterizeTypeFormatter>();
19
+ var serializationStream = new MemoryStream();
20
+ subFormatter.Setup(sf => sf.Deserialize(serializationStream, typeof (string))).Returns("hello world");
21
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
22
+ factory.Setup(f => f.GetFormatter(typeof (string))).Returns(subFormatter.Object);
23
+ var formatter = new CauterizeFormatter(factory.Object);
24
+ Assert.AreEqual("hello world", formatter.Deserialize<string>(serializationStream));
25
+ }
26
+
27
+ [Test]
28
+ public void TestSerialize()
29
+ {
30
+ var subFormatter = new Mock<ICauterizeTypeFormatter>();
31
+ var serializationStream = new MemoryStream();
32
+ subFormatter.Setup(sf => sf.Serialize(serializationStream, "hello world"));
33
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
34
+ factory.Setup(f => f.GetFormatter(typeof (string))).Returns(subFormatter.Object);
35
+ var formatter = new CauterizeFormatter(factory.Object);
36
+ formatter.Serialize(serializationStream, "hello world");
37
+ subFormatter.VerifyAll();
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,147 @@
1
+ using System;
2
+ using System.IO;
3
+ using System.Text;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using Moq;
7
+ using NUnit.Framework;
8
+ using Cauterize;
9
+
10
+ namespace Cauterize.Test
11
+ {
12
+ enum TestGroupType
13
+ {
14
+ TestGroupTypeFoo = 0,
15
+ TestGroupTypeBar,
16
+ TestGroupTypeBaz
17
+ }
18
+ class TestGroup : CauterizeGroup
19
+ {
20
+ [Order(0)]
21
+ public TestGroupType Type { get; set; }
22
+
23
+ [Order(1)]
24
+ public int Foo { get; set; }
25
+ /* unused for 2/Bar */
26
+ [Order(3)]
27
+ public byte Baz { get; set; }
28
+ }
29
+
30
+ [TestFixture]
31
+ public class CauterizeGroupFormatterTest
32
+ {
33
+ [Test]
34
+ public void TestDeserialize()
35
+ {
36
+ var stream = new MemoryStream();
37
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
38
+ var enumFormatter = new Mock<ICauterizeTypeFormatter>();
39
+ var intFormatter = new Mock<ICauterizeTypeFormatter>();
40
+ factory.Setup(f => f.GetFormatter(It.IsAny<Type>())).Returns((Type t) =>
41
+ {
42
+ if (t == typeof (TestGroupType))
43
+ {
44
+ return enumFormatter.Object;
45
+ }
46
+ else if (t == typeof (int))
47
+ {
48
+ return intFormatter.Object;
49
+ }
50
+ else
51
+ {
52
+ return null;
53
+ }
54
+ });
55
+ enumFormatter.Setup(f => f.Deserialize(stream, typeof (TestGroupType)))
56
+ .Returns(TestGroupType.TestGroupTypeFoo);
57
+ intFormatter.Setup(f => f.Deserialize(stream, typeof (int)))
58
+ .Returns(1024);
59
+ var formatter = new CauterizeGroupFormatter(factory.Object);
60
+ var result = (TestGroup) formatter.Deserialize(stream, typeof (TestGroup));
61
+ Assert.AreEqual(TestGroupType.TestGroupTypeFoo, result.Type);
62
+ Assert.AreEqual(1024, result.Foo);
63
+ }
64
+
65
+ [Test]
66
+ public void TestSerialize()
67
+ {
68
+ var stream = new MemoryStream();
69
+ var group = new TestGroup();
70
+ group.Type = TestGroupType.TestGroupTypeBaz;
71
+ group.Baz = 4;
72
+ var enumFormatter = new Mock<ICauterizeTypeFormatter>();
73
+ var byteFormatter = new Mock<ICauterizeTypeFormatter>();
74
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
75
+ factory.Setup(f => f.GetFormatter(It.IsAny<Type>())).Returns((Type t) =>
76
+ {
77
+ if (t == typeof (TestGroupType))
78
+ {
79
+ return enumFormatter.Object;
80
+ }
81
+ else if (t == typeof (Byte))
82
+ {
83
+ return byteFormatter.Object;
84
+ }
85
+ else
86
+ {
87
+ return null;
88
+ }
89
+ });
90
+ enumFormatter.Setup(f => f.Serialize(stream, TestGroupType.TestGroupTypeBaz));
91
+ byteFormatter.Setup(f => f.Serialize(stream, (Byte)4));
92
+ var formatter = new CauterizeGroupFormatter(factory.Object);
93
+ formatter.Serialize(stream, group);
94
+ enumFormatter.VerifyAll();
95
+ byteFormatter.VerifyAll();
96
+ }
97
+
98
+ [Test]
99
+ public void TestDeserialized_UnusedGroupData()
100
+ {
101
+ var stream = new MemoryStream();
102
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
103
+ var enumFormatter = new Mock<ICauterizeTypeFormatter>();
104
+ factory.Setup(f => f.GetFormatter(It.IsAny<Type>())).Returns((Type t) =>
105
+ {
106
+ if (t == typeof (TestGroupType))
107
+ {
108
+ return enumFormatter.Object;
109
+ }
110
+ else
111
+ {
112
+ return null;
113
+ }
114
+ });
115
+ enumFormatter.Setup(f => f.Deserialize(stream, typeof (TestGroupType)))
116
+ .Returns(TestGroupType.TestGroupTypeBar);
117
+ var formatter = new CauterizeGroupFormatter(factory.Object);
118
+ var result = (TestGroup) formatter.Deserialize(stream, typeof (TestGroup));
119
+ Assert.AreEqual(TestGroupType.TestGroupTypeBar, result.Type);
120
+ }
121
+
122
+ [Test]
123
+ public void TestSerialized_UnusedGroupData()
124
+ {
125
+ var stream = new MemoryStream();
126
+ var group = new TestGroup();
127
+ group.Type = TestGroupType.TestGroupTypeBar;
128
+ var enumFormatter = new Mock<ICauterizeTypeFormatter>();
129
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
130
+ factory.Setup(f => f.GetFormatter(It.IsAny<Type>())).Returns((Type t) =>
131
+ {
132
+ if (t == typeof (TestGroupType))
133
+ {
134
+ return enumFormatter.Object;
135
+ }
136
+ else
137
+ {
138
+ return null;
139
+ }
140
+ });
141
+ enumFormatter.Setup(f => f.Serialize(stream, TestGroupType.TestGroupTypeBar));
142
+ var formatter = new CauterizeGroupFormatter(factory.Object);
143
+ formatter.Serialize(stream, group);
144
+ enumFormatter.VerifyAll();
145
+ }
146
+ }
147
+ }
@@ -0,0 +1,129 @@
1
+ using System;
2
+ using System.IO;
3
+ using System.Text;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using NUnit.Framework;
7
+ using Cauterize;
8
+
9
+ namespace Cauterize.Test
10
+ {
11
+ class TestTopLevel : CauterizeComposite
12
+ {
13
+ [Order(0)]
14
+ public TestSubComp SubComp { get; set; }
15
+
16
+ [Order(1)]
17
+ public TestSubFixed SubFixed { get; set; }
18
+
19
+ [Order(2)]
20
+ public TestSubGroup SubGroup { get; set; }
21
+
22
+ [Order(3)]
23
+ public Int32 SubInt { get; set; }
24
+ }
25
+
26
+ class TestSubComp : CauterizeComposite
27
+ {
28
+ [Order(0)]
29
+ public Byte Byte1 { get; set; }
30
+
31
+ [Order(1)]
32
+ public Byte Byte2 { get; set; }
33
+ }
34
+
35
+ class TestSubFixed : CauterizeFixedArrayTyped<Int64>
36
+ {
37
+ public TestSubFixed()
38
+ {
39
+ Allocate(4);
40
+ }
41
+
42
+ public TestSubFixed(Int64[] data)
43
+ {
44
+ Allocate(data);
45
+ }
46
+
47
+ protected override int Size
48
+ {
49
+ get { return 4; }
50
+ }
51
+ }
52
+
53
+ [SerializedRepresentation(typeof(Byte))]
54
+ public enum TestSubGroupType
55
+ {
56
+ TestSubGroupTypeVariable,
57
+ TestSUbGroupTypeNothing,
58
+ TestSubGroupTypeShort
59
+ }
60
+
61
+ class TestSubGroup : CauterizeGroup
62
+ {
63
+ [Order(0)]
64
+ public TestSubGroupType Type { get; set; }
65
+
66
+ [Order(1)]
67
+ public TestSubVariable SubVar { get; set; }
68
+
69
+ /* no data for nothing */
70
+ [Order(3)]
71
+ public Int16 SubShort { get; set; }
72
+ }
73
+
74
+ class TestSubVariable : CauterizeVariableArrayTyped<Byte>
75
+ {
76
+ public static Type SizeType = typeof (Byte);
77
+
78
+ public TestSubVariable(int size)
79
+ {
80
+ Allocate(size);
81
+ }
82
+
83
+ public TestSubVariable(Byte[] data)
84
+ {
85
+ Allocate(data);
86
+ }
87
+
88
+ protected override int MaxSize
89
+ {
90
+ get { return Byte.MaxValue; }
91
+ }
92
+
93
+ }
94
+
95
+ [TestFixture]
96
+ public class CauterizeIntegrationTest
97
+ {
98
+ [Test]
99
+ public void TestThereAndBackAgain()
100
+ {
101
+ var inputTopLevel = new TestTopLevel();
102
+ inputTopLevel.SubComp = new TestSubComp();
103
+ inputTopLevel.SubComp.Byte1 = 101;
104
+ inputTopLevel.SubComp.Byte2 = 202;
105
+ inputTopLevel.SubFixed = new TestSubFixed();
106
+ inputTopLevel.SubFixed[2] = 1234123412341234;
107
+ inputTopLevel.SubGroup = new TestSubGroup();
108
+ inputTopLevel.SubGroup.Type = TestSubGroupType.TestSubGroupTypeVariable;
109
+ inputTopLevel.SubGroup.SubVar = new TestSubVariable(3);
110
+ inputTopLevel.SubGroup.SubVar[1] = 55;
111
+ inputTopLevel.SubInt = 1000000;
112
+
113
+ var formatter = new CauterizeFormatter();
114
+ var stream = new MemoryStream(2048);
115
+ formatter.Serialize(stream, inputTopLevel);
116
+
117
+ stream.Position = 0;
118
+ var outputTopLevel = formatter.Deserialize<TestTopLevel>(stream);
119
+ Assert.AreEqual(inputTopLevel.SubComp.Byte1, outputTopLevel.SubComp.Byte1);
120
+ Assert.AreEqual(inputTopLevel.SubComp.Byte2, outputTopLevel.SubComp.Byte2);
121
+ Assert.AreEqual(inputTopLevel.SubFixed[0], outputTopLevel.SubFixed[0]);
122
+ Assert.AreEqual(inputTopLevel.SubFixed[2], outputTopLevel.SubFixed[2]);
123
+ Assert.AreEqual(inputTopLevel.SubGroup.Type, outputTopLevel.SubGroup.Type);
124
+ Assert.AreEqual(inputTopLevel.SubGroup.SubVar[0], outputTopLevel.SubGroup.SubVar[0]);
125
+ Assert.AreEqual(inputTopLevel.SubGroup.SubVar[1], outputTopLevel.SubGroup.SubVar[1]);
126
+ Assert.AreEqual(inputTopLevel.SubInt, outputTopLevel.SubInt);
127
+ }
128
+ }
129
+ }
@@ -0,0 +1,98 @@
1
+ using System;
2
+ using System.IO;
3
+ using System.Text;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using NUnit.Framework;
7
+
8
+ namespace Cauterize.Test
9
+ {
10
+ [TestFixture]
11
+ public class CauterizePrimitiveFormatterTest
12
+ {
13
+ [Test]
14
+ public void TestDeserialize()
15
+ {
16
+ var formatter = new CauterizePrimitiveFormatter();
17
+ var bytes = new byte[8];
18
+ bytes[0] = 2;
19
+ bytes[1] = 128;
20
+ bytes[2] = 1;
21
+ bytes[3] = 0;
22
+ bytes[4] = 1;
23
+ var stream = new MemoryStream(bytes);
24
+ object value = formatter.Deserialize(stream, typeof(Byte));
25
+ Assert.AreEqual(2,value);
26
+ stream = new MemoryStream(bytes);
27
+ value = formatter.Deserialize(stream, typeof(Int16));
28
+ Assert.AreEqual(Int16.MinValue + 2, value);
29
+ stream = new MemoryStream(bytes);
30
+ value = formatter.Deserialize(stream, typeof(UInt16));
31
+ Assert.AreEqual(32770, value);
32
+ stream = new MemoryStream(bytes);
33
+ value = formatter.Deserialize(stream, typeof(Int32));
34
+ Assert.AreEqual(98306, value);
35
+ stream = new MemoryStream(bytes);
36
+ value = formatter.Deserialize(stream, typeof(Int64));
37
+ Assert.AreEqual(4295065602, value);
38
+ }
39
+
40
+ [Test]
41
+ public void TestDeserializeTwoBytesInARow()
42
+ {
43
+ var formatter = new CauterizePrimitiveFormatter();
44
+ var bytes = new byte[2];
45
+ bytes[0] = 2;
46
+ bytes[1] = 128;
47
+ var stream = new MemoryStream(bytes);
48
+ object value = formatter.Deserialize(stream, typeof(Byte));
49
+ Assert.AreEqual(2,value);
50
+ value = formatter.Deserialize(stream, typeof(Byte));
51
+ Assert.AreEqual(128,value);
52
+ }
53
+
54
+ [Test]
55
+ public void TestSerialize()
56
+ {
57
+ var formatter = new CauterizePrimitiveFormatter();
58
+ var bytes = new byte[8];
59
+ var stream = new MemoryStream(bytes);
60
+ formatter.Serialize(stream, (Byte)2);
61
+ Assert.AreEqual(2, bytes[0]);
62
+ Assert.AreEqual(0, bytes[1]);
63
+
64
+ bytes = new byte[8];
65
+ stream = new MemoryStream(bytes);
66
+ formatter.Serialize(stream, (Int16)(Int16.MinValue + 2));
67
+ Assert.AreEqual(2, bytes[0]);
68
+ Assert.AreEqual(128, bytes[1]);
69
+ Assert.AreEqual(0, bytes[2]);
70
+
71
+ bytes = new byte[8];
72
+ stream = new MemoryStream(bytes);
73
+ formatter.Serialize(stream, (UInt16)(32770));
74
+ Assert.AreEqual(2, bytes[0]);
75
+ Assert.AreEqual(128, bytes[1]);
76
+ Assert.AreEqual(0, bytes[2]);
77
+
78
+ bytes = new byte[8];
79
+ stream = new MemoryStream(bytes);
80
+ formatter.Serialize(stream, 98306);
81
+ Assert.AreEqual(2, bytes[0]);
82
+ Assert.AreEqual(128, bytes[1]);
83
+ Assert.AreEqual(1, bytes[2]);
84
+ Assert.AreEqual(0, bytes[3]);
85
+ Assert.AreEqual(0, bytes[4]);
86
+
87
+ bytes = new byte[8];
88
+ stream = new MemoryStream(bytes);
89
+ formatter.Serialize(stream, 4295065602);
90
+ Assert.AreEqual(2, bytes[0]);
91
+ Assert.AreEqual(128, bytes[1]);
92
+ Assert.AreEqual(1, bytes[2]);
93
+ Assert.AreEqual(0, bytes[3]);
94
+ Assert.AreEqual(1, bytes[4]);
95
+ Assert.AreEqual(0, bytes[5]);
96
+ }
97
+ }
98
+ }
@@ -0,0 +1,73 @@
1
+ using System;
2
+ using System.Text;
3
+ using System.Collections.Generic;
4
+ using System.Linq;
5
+ using NUnit.Framework;
6
+ using Cauterize;
7
+
8
+ namespace Cauterize.Test
9
+ {
10
+ class MyComposite : CauterizeComposite
11
+ {
12
+ public int MyInt1 { get; set; }
13
+ public int MyInt2 { get; set; }
14
+ }
15
+
16
+ enum GroupType
17
+ {
18
+ GroupTypeInt32,
19
+ GroupTypeInt16
20
+ }
21
+ class MyGroup : CauterizeGroup
22
+ {
23
+ public GroupType Type { get; set; }
24
+
25
+ public Int32 NormalInt { get; set; }
26
+ public Int16 SmallInt { get; set; }
27
+ }
28
+
29
+ class MyFixedArray : CauterizeFixedArray
30
+ {
31
+ private int[] _data;
32
+ MyFixedArray()
33
+ {
34
+ _data = new int[4];
35
+ }
36
+ int this[int i]
37
+ {
38
+ get { return _data[i]; }
39
+ set { _data[i] = value; }
40
+ }
41
+ }
42
+
43
+ class MyVariableArray : CauterizeVariableArray
44
+ {
45
+ private int[] _data;
46
+ MyVariableArray(int size)
47
+ {
48
+ _data = new int[size];
49
+ }
50
+ int this[int i]
51
+ {
52
+ get { return _data[i]; }
53
+ set { _data[i] = value; }
54
+ }
55
+ }
56
+
57
+ [TestFixture]
58
+ public class CauterizeTypeFormatterFactoryTest
59
+ {
60
+ [Test]
61
+ public void TestGetFormatter()
62
+ {
63
+ var factory = new CauterizeTypeFormatterFactory();
64
+ Assert.AreEqual(typeof(CauterizeCompositeFormatter), factory.GetFormatter(typeof(MyComposite)).GetType());
65
+ Assert.AreEqual(typeof(CauterizeGroupFormatter), factory.GetFormatter(typeof(MyGroup)).GetType());
66
+ Assert.AreEqual(typeof(CauterizeFixedArrayFormatter), factory.GetFormatter(typeof(MyFixedArray)).GetType());
67
+ Assert.AreEqual(typeof(CauterizeVariableArrayFormatter), factory.GetFormatter(typeof(MyVariableArray)).GetType());
68
+ Assert.AreEqual(typeof(CauterizePrimitiveFormatter), factory.GetFormatter(typeof(int)).GetType());
69
+ Assert.AreEqual(typeof(CauterizePrimitiveFormatter), factory.GetFormatter(typeof(double)).GetType());
70
+ Assert.AreEqual(typeof(CauterizeEnumFormatter), factory.GetFormatter(typeof(GroupType)).GetType());
71
+ }
72
+ }
73
+ }