aixm 0.3.8 → 0.3.10

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 (115) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +33 -3
  5. data/README.md +166 -56
  6. data/exe/ckmid +14 -0
  7. data/exe/mkmid +14 -0
  8. data/lib/aixm.rb +16 -6
  9. data/lib/aixm/association.rb +369 -0
  10. data/lib/aixm/classes.rb +43 -0
  11. data/lib/aixm/component/fato.rb +45 -53
  12. data/lib/aixm/component/frequency.rb +11 -12
  13. data/lib/aixm/component/geometry.rb +36 -38
  14. data/lib/aixm/component/geometry/arc.rb +2 -2
  15. data/lib/aixm/component/geometry/border.rb +6 -3
  16. data/lib/aixm/component/geometry/circle.rb +8 -2
  17. data/lib/aixm/component/geometry/point.rb +8 -2
  18. data/lib/aixm/component/helipad.rb +30 -38
  19. data/lib/aixm/component/layer.rb +28 -19
  20. data/lib/aixm/component/lighting.rb +12 -13
  21. data/lib/aixm/component/runway.rb +44 -48
  22. data/lib/aixm/{feature → component}/service.rb +37 -36
  23. data/lib/aixm/component/surface.rb +3 -3
  24. data/lib/aixm/component/timetable.rb +2 -2
  25. data/lib/aixm/component/{vertical_limits.rb → vertical_limit.rb} +12 -6
  26. data/lib/aixm/config.rb +2 -1
  27. data/lib/aixm/document.rb +27 -50
  28. data/lib/aixm/executables.rb +85 -0
  29. data/lib/aixm/feature.rb +13 -3
  30. data/lib/aixm/feature/address.rb +12 -13
  31. data/lib/aixm/feature/airport.rb +103 -128
  32. data/lib/aixm/feature/airspace.rb +44 -17
  33. data/lib/aixm/feature/navigational_aid.rb +7 -9
  34. data/lib/aixm/feature/navigational_aid/designated_point.rb +13 -15
  35. data/lib/aixm/feature/navigational_aid/dme.rb +11 -12
  36. data/lib/aixm/feature/navigational_aid/marker.rb +7 -3
  37. data/lib/aixm/feature/navigational_aid/ndb.rb +7 -3
  38. data/lib/aixm/feature/navigational_aid/tacan.rb +7 -3
  39. data/lib/aixm/feature/navigational_aid/vor.rb +23 -15
  40. data/lib/aixm/feature/obstacle.rb +29 -43
  41. data/lib/aixm/feature/obstacle_group.rb +37 -34
  42. data/lib/aixm/feature/organisation.rb +21 -5
  43. data/lib/aixm/feature/unit.rb +36 -46
  44. data/lib/aixm/memoize.rb +89 -0
  45. data/lib/aixm/object.rb +9 -0
  46. data/lib/aixm/payload_hash.rb +114 -0
  47. data/lib/aixm/refinements.rb +29 -76
  48. data/lib/aixm/shortcuts.rb +5 -42
  49. data/lib/aixm/version.rb +1 -1
  50. data/lib/aixm/xy.rb +1 -1
  51. data/schemas/ofmx/0/OFMX-Features.xsd +152 -20
  52. data/schemas/ofmx/0/OFMX-Snapshot.xsd +0 -5
  53. metadata +107 -156
  54. metadata.gz.sig +2 -0
  55. data/.github/workflows/test.yml +0 -26
  56. data/.gitignore +0 -6
  57. data/.ruby-version +0 -1
  58. data/.yardopts +0 -3
  59. data/Guardfile +0 -8
  60. data/aixm.gemspec +0 -35
  61. data/gems.rb +0 -3
  62. data/lib/aixm/component.rb +0 -6
  63. data/rakefile.rb +0 -36
  64. data/spec/factory.rb +0 -559
  65. data/spec/lib/aixm/a_spec.rb +0 -203
  66. data/spec/lib/aixm/component/fato_spec.rb +0 -267
  67. data/spec/lib/aixm/component/frequency_spec.rb +0 -74
  68. data/spec/lib/aixm/component/geometry/arc_spec.rb +0 -73
  69. data/spec/lib/aixm/component/geometry/border_spec.rb +0 -38
  70. data/spec/lib/aixm/component/geometry/circle_spec.rb +0 -68
  71. data/spec/lib/aixm/component/geometry/point_spec.rb +0 -37
  72. data/spec/lib/aixm/component/geometry_spec.rb +0 -316
  73. data/spec/lib/aixm/component/helipad_spec.rb +0 -193
  74. data/spec/lib/aixm/component/layer_spec.rb +0 -135
  75. data/spec/lib/aixm/component/lighting_spec.rb +0 -94
  76. data/spec/lib/aixm/component/runway_spec.rb +0 -479
  77. data/spec/lib/aixm/component/surface_spec.rb +0 -124
  78. data/spec/lib/aixm/component/timetable_spec.rb +0 -47
  79. data/spec/lib/aixm/component/vertical_limits_spec.rb +0 -94
  80. data/spec/lib/aixm/config_spec.rb +0 -41
  81. data/spec/lib/aixm/d_spec.rb +0 -150
  82. data/spec/lib/aixm/document_spec.rb +0 -1884
  83. data/spec/lib/aixm/errors_spec.rb +0 -14
  84. data/spec/lib/aixm/f_spec.rb +0 -85
  85. data/spec/lib/aixm/feature/address_spec.rb +0 -60
  86. data/spec/lib/aixm/feature/airport_spec.rb +0 -776
  87. data/spec/lib/aixm/feature/airspace_spec.rb +0 -394
  88. data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +0 -103
  89. data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +0 -98
  90. data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +0 -85
  91. data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +0 -95
  92. data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +0 -94
  93. data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +0 -251
  94. data/spec/lib/aixm/feature/navigational_aid_spec.rb +0 -52
  95. data/spec/lib/aixm/feature/obstacle_group_spec.rb +0 -330
  96. data/spec/lib/aixm/feature/obstacle_spec.rb +0 -284
  97. data/spec/lib/aixm/feature/organisation_spec.rb +0 -83
  98. data/spec/lib/aixm/feature/service_spec.rb +0 -59
  99. data/spec/lib/aixm/feature/unit_spec.rb +0 -238
  100. data/spec/lib/aixm/feature_spec.rb +0 -38
  101. data/spec/lib/aixm/p_spec.rb +0 -189
  102. data/spec/lib/aixm/refinements_spec.rb +0 -430
  103. data/spec/lib/aixm/version_spec.rb +0 -7
  104. data/spec/lib/aixm/w_spec.rb +0 -150
  105. data/spec/lib/aixm/xy_spec.rb +0 -180
  106. data/spec/lib/aixm/z_spec.rb +0 -94
  107. data/spec/macros/marking.rb +0 -12
  108. data/spec/macros/organisation.rb +0 -11
  109. data/spec/macros/remarks.rb +0 -12
  110. data/spec/macros/timetable.rb +0 -11
  111. data/spec/macros/xy.rb +0 -11
  112. data/spec/macros/z_qnh.rb +0 -11
  113. data/spec/sounds/failure.mp3 +0 -0
  114. data/spec/sounds/success.mp3 +0 -0
  115. data/spec/spec_helper.rb +0 -62
@@ -1,83 +0,0 @@
1
- require_relative '../../../spec_helper'
2
-
3
- describe AIXM::Feature::Organisation do
4
- subject do
5
- AIXM::Factory.organisation
6
- end
7
-
8
- describe :name= do
9
- it "fails on invalid values" do
10
- _([nil, :foobar, 123]).wont_be_written_to subject, :name
11
- end
12
-
13
- it "upcases and transcodes valid values" do
14
- _(subject.tap { |s| s.name = 'Nîmes-Alès' }.name).must_equal 'NIMES-ALES'
15
- end
16
- end
17
-
18
- describe :type= do
19
- it "fails on invalid values" do
20
- _([nil, :foobar, 123]).wont_be_written_to subject, :type
21
- end
22
-
23
- it "looks up valid values" do
24
- _(subject.tap { |s| s.type = :state }.type).must_equal :state
25
- _(subject.tap { |s| s.type = :IO }.type).must_equal :international_organisation
26
- end
27
- end
28
-
29
- describe :id= do
30
- it "fails on invalid values" do
31
- _([:foobar, 123]).wont_be_written_to subject, :id
32
- end
33
-
34
- it "accepts nil value" do
35
- _([nil]).must_be_written_to subject, :id
36
- end
37
-
38
- it "upcases valid values" do
39
- _(subject.tap { |s| s.id = 'lf' }.id).must_equal 'LF'
40
- end
41
- end
42
-
43
- describe :remarks= do
44
- macro :remarks
45
- end
46
-
47
- describe :to_xml do
48
- it "builds correct complete OFMX" do
49
- AIXM.ofmx!
50
- _(subject.to_xml).must_equal <<~END
51
- <!-- Organisation: FRANCE -->
52
- <Org source="LF|GEN|0.0 FACTORY|0|0">
53
- <OrgUid>
54
- <txtName>FRANCE</txtName>
55
- </OrgUid>
56
- <codeId>LF</codeId>
57
- <codeType>S</codeType>
58
- <txtRmk>Oversea departments not included</txtRmk>
59
- </Org>
60
- END
61
- end
62
-
63
- it "builds correct minimal OFMX" do
64
- AIXM.ofmx!
65
- subject.id = subject.remarks = nil
66
- _(subject.to_xml).must_equal <<~END
67
- <!-- Organisation: FRANCE -->
68
- <Org source="LF|GEN|0.0 FACTORY|0|0">
69
- <OrgUid>
70
- <txtName>FRANCE</txtName>
71
- </OrgUid>
72
- <codeType>S</codeType>
73
- </Org>
74
- END
75
- end
76
-
77
- it "builds OFMX with mid" do
78
- AIXM.ofmx!
79
- AIXM.config.mid_region = 'LF'
80
- _(subject.to_xml).must_match /<OrgUid mid="b5fef8e2-ea45-7326-6b2f-38cb45cd21a8">/
81
- end
82
- end
83
- end
@@ -1,59 +0,0 @@
1
- require_relative '../../../spec_helper'
2
-
3
- describe AIXM::Feature::Service do
4
- subject do
5
- AIXM::Factory.service
6
- end
7
-
8
- describe :initialize do
9
- it "sets defaults" do
10
- subject = AIXM::Feature::Service.new(
11
- type: :approach_control_service
12
- )
13
- _(subject.frequencies).must_equal []
14
- end
15
- end
16
-
17
- describe :type= do
18
- it "fails on invalid values" do
19
- _{ subject.type = :foobar }.must_raise ArgumentError
20
- _{ subject.type = nil }.must_raise ArgumentError
21
- end
22
-
23
- it "looks up valid values" do
24
- _(subject.tap { |s| s.type = :area_control_service }.type).must_equal :area_control_service
25
- _(subject.tap { |s| s.type = :ATIS }.type).must_equal :automated_terminal_information_service
26
- end
27
- end
28
-
29
- describe :timetable= do
30
- macro :timetable
31
- end
32
-
33
- describe :remarks= do
34
- macro :remarks
35
- end
36
-
37
- describe :add_frequency do
38
- it "fails on invalid arguments" do
39
- _{ subject.add_frequency nil }.must_raise ArgumentError
40
- end
41
-
42
- it "adds frequency to the array" do
43
- count = subject.frequencies.count
44
- subject.add_frequency(AIXM::Factory.frequency)
45
- _(subject.frequencies.count).must_equal count + 1
46
- end
47
- end
48
-
49
- describe :guess_unit_type do
50
- it "finds the probably unit type for a matchable service" do
51
- _(subject.tap { |s| s.type = :flight_information_service }.guessed_unit_type).must_equal :flight_information_centre
52
- end
53
-
54
- it "returns nil for an unmatchable service" do
55
- _(subject.tap { |s| s.type = :aeronautical_mobile_satellite_service }.guessed_unit_type).must_be_nil
56
- end
57
- end
58
-
59
- end
@@ -1,238 +0,0 @@
1
- require_relative '../../../spec_helper'
2
-
3
- describe AIXM::Feature::Unit do
4
- subject do
5
- AIXM::Factory.unit
6
- end
7
-
8
- describe :organisation= do
9
- macro :organisation
10
-
11
- it "fails on nil value" do
12
- _([nil]).wont_be_written_to subject, :organisation
13
- end
14
- end
15
-
16
- describe :name= do
17
- it "fails on invalid values" do
18
- _([nil, :foobar, 123]).wont_be_written_to subject, :name
19
- end
20
-
21
- it "upcases and transcodes valid values" do
22
- _(subject.tap { |s| s.name = 'Nîmes-Alès APP' }.name).must_equal 'NIMES-ALES APP'
23
- end
24
- end
25
-
26
- describe :type= do
27
- it "fails on invalid values" do
28
- _([nil, :foobar, 123]).wont_be_written_to subject, :type
29
- end
30
-
31
- it "looks up valid values" do
32
- _(subject.tap { |s| s.type = :flight_information_centre }.type).must_equal :flight_information_centre
33
- _(subject.tap { |s| s.type = :MET }.type).must_equal :meteorological_office
34
- end
35
- end
36
-
37
- describe :class= do
38
- it "fails on invalid values" do
39
- _([nil, :foobar, 123]).wont_be_written_to subject, :class
40
- end
41
-
42
- it "looks up valid values" do
43
- _(subject.tap { |s| s.class = :icao }.class).must_equal :icao
44
- _(subject.tap { |s| s.class = :OTHER }.class).must_equal :other
45
- end
46
- end
47
-
48
- describe :airport= do
49
- it "fails on invalid values" do
50
- _([:foobar, 123]).wont_be_written_to subject, :airport
51
- end
52
-
53
- it "accepts valid values" do
54
- _([nil, AIXM::Factory.airport]).must_be_written_to subject, :airport
55
- end
56
- end
57
-
58
- describe :remarks= do
59
- macro :remarks
60
- end
61
-
62
- describe :to_xml do
63
- let :service do
64
- AIXM::Factory.service.tap do |service|
65
- service.type = :AFIS
66
- end
67
- end
68
-
69
- it "builds correct complete OFMX" do
70
- 2.times { subject.add_service(service) }
71
- AIXM.ofmx!
72
- _(subject.to_xml).must_equal <<~END
73
- <!-- Unit: PUJAUT TWR -->
74
- <Uni source="LF|GEN|0.0 FACTORY|0|0">
75
- <UniUid>
76
- <txtName>PUJAUT TWR</txtName>
77
- </UniUid>
78
- <OrgUid>
79
- <txtName>FRANCE</txtName>
80
- </OrgUid>
81
- <AhpUid>
82
- <codeId>LFNT</codeId>
83
- </AhpUid>
84
- <codeType>TWR</codeType>
85
- <codeClass>ICAO</codeClass>
86
- <txtRmk>FR only</txtRmk>
87
- </Uni>
88
- <!-- Service: AFIS by PUJAUT TWR -->
89
- <Ser source="LF|GEN|0.0 FACTORY|0|0">
90
- <SerUid>
91
- <UniUid>
92
- <txtName>PUJAUT TWR</txtName>
93
- </UniUid>
94
- <codeType>AFIS</codeType>
95
- <noSeq>1</noSeq>
96
- </SerUid>
97
- <Stt>
98
- <codeWorkHr>H24</codeWorkHr>
99
- </Stt>
100
- <txtRmk>service remarks</txtRmk>
101
- </Ser>
102
- <Fqy>
103
- <FqyUid>
104
- <SerUid>
105
- <UniUid>
106
- <txtName>PUJAUT TWR</txtName>
107
- </UniUid>
108
- <codeType>AFIS</codeType>
109
- <noSeq>1</noSeq>
110
- </SerUid>
111
- <valFreqTrans>123.35</valFreqTrans>
112
- </FqyUid>
113
- <valFreqRec>124.1</valFreqRec>
114
- <uomFreq>MHZ</uomFreq>
115
- <Ftt>
116
- <codeWorkHr>H24</codeWorkHr>
117
- </Ftt>
118
- <txtRmk>frequency remarks</txtRmk>
119
- <Cdl>
120
- <txtCallSign>PUJAUT CONTROL</txtCallSign>
121
- <codeLang>EN</codeLang>
122
- </Cdl>
123
- <Cdl>
124
- <txtCallSign>PUJAUT CONTROLE</txtCallSign>
125
- <codeLang>FR</codeLang>
126
- </Cdl>
127
- </Fqy>
128
- <!-- Service: AFIS by PUJAUT TWR -->
129
- <Ser source="LF|GEN|0.0 FACTORY|0|0">
130
- <SerUid>
131
- <UniUid>
132
- <txtName>PUJAUT TWR</txtName>
133
- </UniUid>
134
- <codeType>AFIS</codeType>
135
- <noSeq>2</noSeq>
136
- </SerUid>
137
- <Stt>
138
- <codeWorkHr>H24</codeWorkHr>
139
- </Stt>
140
- <txtRmk>service remarks</txtRmk>
141
- </Ser>
142
- <Fqy>
143
- <FqyUid>
144
- <SerUid>
145
- <UniUid>
146
- <txtName>PUJAUT TWR</txtName>
147
- </UniUid>
148
- <codeType>AFIS</codeType>
149
- <noSeq>2</noSeq>
150
- </SerUid>
151
- <valFreqTrans>123.35</valFreqTrans>
152
- </FqyUid>
153
- <valFreqRec>124.1</valFreqRec>
154
- <uomFreq>MHZ</uomFreq>
155
- <Ftt>
156
- <codeWorkHr>H24</codeWorkHr>
157
- </Ftt>
158
- <txtRmk>frequency remarks</txtRmk>
159
- <Cdl>
160
- <txtCallSign>PUJAUT CONTROL</txtCallSign>
161
- <codeLang>EN</codeLang>
162
- </Cdl>
163
- <Cdl>
164
- <txtCallSign>PUJAUT CONTROLE</txtCallSign>
165
- <codeLang>FR</codeLang>
166
- </Cdl>
167
- </Fqy>
168
- <!-- Service: APP by PUJAUT TWR -->
169
- <Ser source="LF|GEN|0.0 FACTORY|0|0">
170
- <SerUid>
171
- <UniUid>
172
- <txtName>PUJAUT TWR</txtName>
173
- </UniUid>
174
- <codeType>APP</codeType>
175
- <noSeq>1</noSeq>
176
- </SerUid>
177
- <Stt>
178
- <codeWorkHr>H24</codeWorkHr>
179
- </Stt>
180
- <txtRmk>service remarks</txtRmk>
181
- </Ser>
182
- <Fqy>
183
- <FqyUid>
184
- <SerUid>
185
- <UniUid>
186
- <txtName>PUJAUT TWR</txtName>
187
- </UniUid>
188
- <codeType>APP</codeType>
189
- <noSeq>1</noSeq>
190
- </SerUid>
191
- <valFreqTrans>123.35</valFreqTrans>
192
- </FqyUid>
193
- <valFreqRec>124.1</valFreqRec>
194
- <uomFreq>MHZ</uomFreq>
195
- <Ftt>
196
- <codeWorkHr>H24</codeWorkHr>
197
- </Ftt>
198
- <txtRmk>frequency remarks</txtRmk>
199
- <Cdl>
200
- <txtCallSign>PUJAUT CONTROL</txtCallSign>
201
- <codeLang>EN</codeLang>
202
- </Cdl>
203
- <Cdl>
204
- <txtCallSign>PUJAUT CONTROLE</txtCallSign>
205
- <codeLang>FR</codeLang>
206
- </Cdl>
207
- </Fqy>
208
- END
209
- end
210
-
211
- it "builds correct minimal OFMX" do
212
- AIXM.ofmx!
213
- subject.airport = subject.remarks = nil
214
- subject.instance_variable_set(:'@services', [])
215
- _(subject.to_xml).must_equal <<~END
216
- <!-- Unit: PUJAUT TWR -->
217
- <Uni source="LF|GEN|0.0 FACTORY|0|0">
218
- <UniUid>
219
- <txtName>PUJAUT TWR</txtName>
220
- </UniUid>
221
- <OrgUid>
222
- <txtName>FRANCE</txtName>
223
- </OrgUid>
224
- <codeType>TWR</codeType>
225
- <codeClass>ICAO</codeClass>
226
- </Uni>
227
- END
228
- end
229
-
230
- it "builds OFMX with mid" do
231
- AIXM.ofmx!
232
- AIXM.config.mid_region = 'LF'
233
- _(subject.to_xml).must_match /<UniUid mid="92534b75-1c12-edc5-351b-740cb82e87dd">/
234
- _(subject.to_xml).must_match /<SerUid mid="9240cf80-9cba-7ea5-ae39-6b682305db78">/
235
- _(subject.to_xml).must_match /<FqyUid mid="48d8e7db-88b1-8e2f-2f27-2c2521e7ac27">/
236
- end
237
- end
238
- end
@@ -1,38 +0,0 @@
1
- require_relative '../../spec_helper'
2
-
3
- describe AIXM::Feature do
4
- subject do
5
- AIXM::Feature.send(:new)
6
- end
7
-
8
- describe :source= do
9
- it "fails on invalid values" do
10
- _([:foobar, 123]).wont_be_written_to subject, :source
11
- end
12
-
13
- it "accepts nil value" do
14
- _([nil]).must_be_written_to subject, :source
15
- end
16
- end
17
-
18
- describe :== do
19
- it "recognizes features with identical UID as equal" do
20
- a = AIXM::Factory.organisation
21
- b = AIXM::Factory.organisation
22
- _(a).must_equal b
23
- end
24
-
25
- it "recognizes features with different UID as unequal" do
26
- a = AIXM::Factory.polygon_airspace
27
- b = AIXM::Factory.circle_airspace
28
- _(a).wont_equal b
29
- end
30
-
31
- it "recognizes objects of different class as unequal" do
32
- a = AIXM::Factory.organisation
33
- b = :oggy
34
- _(a).wont_equal b
35
- end
36
- end
37
-
38
- end
@@ -1,189 +0,0 @@
1
- require_relative '../../spec_helper'
2
-
3
- describe AIXM::P do
4
- subject do
5
- AIXM::Factory.p
6
- end
7
-
8
- describe :pres= do
9
- it "fails on invalid values" do
10
- _([:foobar, -1]).wont_be_written_to subject, :pres
11
- end
12
-
13
- it "converts Numeric to Float" do
14
- _(subject.tap { |s| s.pres = 5 }.pres).must_equal 5.0
15
- end
16
- end
17
-
18
- describe :unit= do
19
- it "fails on invalid values" do
20
- _([:foobar, 123]).wont_be_written_to subject, :unit
21
- end
22
-
23
- it "symbolizes and downcases values" do
24
- _(subject.tap { |s| s.unit = "P" }.unit).must_equal :p
25
- end
26
- end
27
-
28
- describe :to_p do
29
- it "leaves pascal untouched" do
30
- subject = AIXM.p(2, :p)
31
- _(subject.to_p).must_be_same_as subject
32
- end
33
-
34
- it "converts megapascal to pascal" do
35
- _(AIXM.p(0.01, :mpa).to_p).must_equal AIXM.p(10_000, :p)
36
- end
37
-
38
- it "converts psi to pascal" do
39
- _(AIXM.p(0.03, :psi).to_p).must_equal AIXM.p(206.8427187, :p)
40
- end
41
-
42
- it "converts bar to pascal" do
43
- _(AIXM.p(0.02, :bar).to_p).must_equal AIXM.p(2000, :p)
44
- end
45
-
46
- it "converts mmhg to pascal" do
47
- _(AIXM.p(0.02, :torr).to_p).must_equal AIXM.p(2.66644, :p)
48
- end
49
- end
50
-
51
- describe :to_mpa do
52
- it "leaves megapascal untouched" do
53
- subject = AIXM.p(2, :mpa)
54
- _(subject.to_mpa).must_be_same_as subject
55
- end
56
-
57
- it "converts pascal to megapascal" do
58
- _(AIXM.p(10_000, :p).to_mpa).must_equal AIXM.p(0.01, :mpa)
59
- end
60
-
61
- it "converts psi to megapascal" do
62
- _(AIXM.p(300, :psi).to_mpa).must_equal AIXM.p(2.06842719, :mpa)
63
- end
64
-
65
- it "converts bar to megapascal" do
66
- _(AIXM.p(22, :bar).to_mpa).must_equal AIXM.p(2.2, :mpa)
67
- end
68
-
69
- it "converts mmhg to megapascal" do
70
- _(AIXM.p(205, :torr).to_mpa).must_equal AIXM.p(0.02733101, :mpa)
71
- end
72
- end
73
-
74
- describe :to_psi do
75
- it "leaves psi untouched" do
76
- subject = AIXM.p(2, :psi)
77
- _(subject.to_psi).must_be_same_as subject
78
- end
79
-
80
- it "converts pascal to psi" do
81
- _(AIXM.p(500, :p).to_psi).must_equal AIXM.p(0.07251887, :psi)
82
- end
83
-
84
- it "converts megapascal to psi" do
85
- _(AIXM.p(0.1, :mpa).to_psi).must_equal AIXM.p(14.5037738, :psi)
86
- end
87
-
88
- it "converts bar to psi" do
89
- _(AIXM.p(30, :bar).to_psi).must_equal AIXM.p(435.113214, :psi)
90
- end
91
-
92
- it "converts mmhg to psi" do
93
- _(AIXM.p(20, :torr).to_psi).must_equal AIXM.p(0.38673443, :psi)
94
- end
95
- end
96
-
97
- describe :to_bar do
98
- it "leaves bars untouched" do
99
- subject = AIXM.p(2, :bar)
100
- _(subject.to_bar).must_be_same_as subject
101
- end
102
-
103
- it "converts pascal to bars" do
104
- _(AIXM.p(10_000, :p).to_bar).must_equal AIXM.p(0.1, :bar)
105
- end
106
-
107
- it "converts megapascal to bars" do
108
- _(AIXM.p(0.1, :mpa).to_bar).must_equal AIXM.p(1, :bar)
109
- end
110
-
111
- it "converts psi to bars" do
112
- _(AIXM.p(90, :psi).to_bar).must_equal AIXM.p(6.20528156, :bar)
113
- end
114
-
115
- it "converts mmhg to bars" do
116
- _(AIXM.p(7000, :torr).to_bar).must_equal AIXM.p(9.33254, :bar)
117
- end
118
- end
119
-
120
- describe :to_torr do
121
- it "leaves mmhg untouched" do
122
- subject = AIXM.p(2, :torr)
123
- _(subject.to_torr).must_be_same_as subject
124
- end
125
-
126
- it "converts pascal to mmhg" do
127
- _(AIXM.p(12_000, :p).to_torr).must_equal AIXM.p(90.0072, :torr)
128
- end
129
-
130
- it "converts megapascal to mmhg" do
131
- _(AIXM.p(0.1, :mpa).to_torr).must_equal AIXM.p(750.06, :torr)
132
- end
133
-
134
- it "converts psi to mmhg" do
135
- _(AIXM.p(2, :psi).to_torr).must_equal AIXM.p(103.42963306, :torr)
136
- end
137
-
138
- it "converts bar to mmhg" do
139
- _(AIXM.p(0.35, :bar).to_torr).must_equal AIXM.p(262.521, :torr)
140
- end
141
- end
142
-
143
- describe :<=> do
144
- it "recognizes objects with identical unit and pressure as equal" do
145
- a = AIXM.p(12, :bar)
146
- b = AIXM.p(12.0, 'BAR')
147
- _(a).must_equal b
148
- end
149
-
150
- it "recognizes objects with different units and converted pressure as equal" do
151
- a = AIXM.p(12, :bar)
152
- b = AIXM.p(174.0452856, 'PSI')
153
- _(a).must_equal b
154
- end
155
-
156
- it "recognizes objects with different units and identical pressure as unequal" do
157
- a = AIXM.p(12, :bar)
158
- b = AIXM.p(12, :p)
159
- _(a).wont_equal b
160
- end
161
-
162
- it "recognizes objects of different class as unequal" do
163
- a = AIXM.p(12, :bar)
164
- b = :oggy
165
- _(a).wont_equal b
166
- end
167
- end
168
-
169
- describe :hash do
170
- it "returns an integer" do
171
- _(subject.hash).must_be_instance_of Integer
172
- end
173
-
174
- it "allows for the use of instances as hash keys" do
175
- dupe = subject.dup
176
- _({ subject => true }[dupe]).must_equal true
177
- end
178
- end
179
-
180
- describe :zero? do
181
- it "returns true for zero pressure" do
182
- _(subject.tap { |s| s.pres = 0 }).must_be :zero?
183
- end
184
-
185
- it "returns false for non-zero pressure" do
186
- _(subject.tap { |s| s.pres = 1 }).wont_be :zero?
187
- end
188
- end
189
- end