asciimath2unitsml 0.3.1 → 0.4.1

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/spec/conv_spec.rb CHANGED
@@ -2,1454 +2,1532 @@ require "spec_helper"
2
2
 
3
3
  RSpec.describe Asciimath2UnitsML do
4
4
  it "converts an AsciiMath string to MathML + UnitsML" do
5
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
6
- 1 "unitsml(mm*s^-2)"
5
+ input = <<~INPUT
6
+ 1 "unitsml(mm*s^-2)"
7
7
  INPUT
8
- <?xml version='1.0'?>
9
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
10
- <mn>1</mn>
11
- <mo rspace='thickmathspace'>&#x2062;</mo>
12
- <mrow xref='U_mm.s-2'>
13
- <mi mathvariant='normal'>mm</mi>
14
- <mo>&#xB7;</mo>
15
- <msup>
16
- <mrow>
17
- <mi mathvariant='normal'>s</mi>
18
- </mrow>
19
- <mrow>
20
- <mo>&#x2212;</mo>
21
- <mn>2</mn>
8
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
9
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
10
+ <?xml version='1.0'?>
11
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
12
+ <mn>1</mn>
13
+ <mo rspace='thickmathspace'>&#x2062;</mo>
14
+ <mrow xref='U_mm.s-2'>
15
+ <mi mathvariant='normal'>mm</mi>
16
+ <mo>&#x22C5;</mo>
17
+ <msup>
18
+ <mrow>
19
+ <mi mathvariant='normal'>s</mi>
20
+ </mrow>
21
+ <mrow>
22
+ <mo>&#x2212;</mo>
23
+ <mn>2</mn>
24
+ </mrow>
25
+ </msup>
22
26
  </mrow>
23
- </msup>
24
- </mrow>
25
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mm.s-2' dimensionURL='#NISTd28'>
26
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
27
- <UnitName xml:lang='en'>mm*s^-2</UnitName>
28
- <UnitSymbol type='HTML'>
29
- mm&#xB7;s
30
- <sup>&#x2212;2</sup>
31
- </UnitSymbol>
32
- <UnitSymbol type='MathML'>
33
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
34
- <mrow>
35
- <mi mathvariant='normal'>mm</mi>
36
- <mo>&#xB7;</mo>
37
- <msup>
27
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mm.s-2' dimensionURL='#NISTd28'>
28
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
29
+ <UnitName xml:lang='en'>mm*s^-2</UnitName>
30
+ <UnitSymbol type='HTML'>
31
+ mm&#x22C5;s
32
+ <sup>&#x2212;2</sup>
33
+ </UnitSymbol>
34
+ <UnitSymbol type='MathML'>
35
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
38
36
  <mrow>
39
- <mi mathvariant='normal'>s</mi>
37
+ <mi mathvariant='normal'>mm</mi>
38
+ <mo>&#x22C5;</mo>
39
+ <msup>
40
+ <mrow>
41
+ <mi mathvariant='normal'>s</mi>
42
+ </mrow>
43
+ <mrow>
44
+ <mo>&#x2212;</mo>
45
+ <mn>2</mn>
46
+ </mrow>
47
+ </msup>
40
48
  </mrow>
41
- <mrow>
42
- <mo>&#x2212;</mo>
43
- <mn>2</mn>
44
- </mrow>
45
- </msup>
46
- </mrow>
47
- </math>
48
- </UnitSymbol>
49
- <RootUnits>
50
- <EnumeratedRootUnit unit='meter' prefix='m'/>
51
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
52
- </RootUnits>
53
- </Unit>
54
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
55
- <PrefixName xml:lang='en'>milli</PrefixName>
56
- <PrefixSymbol type='ASCII'>m</PrefixSymbol>
57
- <PrefixSymbol type='unicode'>m</PrefixSymbol>
58
- <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
59
- <PrefixSymbol type='HTML'>m</PrefixSymbol>
60
- </Prefix>
61
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
62
- <Length symbol='L' powerNumerator='1'/>
63
- <Time symbol='T' powerNumerator='-2'/>
64
- </Dimension>
65
- </math>
66
- OUTPUT
49
+ </math>
50
+ </UnitSymbol>
51
+ <RootUnits>
52
+ <EnumeratedRootUnit unit='meter' prefix='m'/>
53
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
54
+ </RootUnits>
55
+ </Unit>
56
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
57
+ <PrefixName xml:lang='en'>milli</PrefixName>
58
+ <PrefixSymbol type='ASCII'>m</PrefixSymbol>
59
+ <PrefixSymbol type='unicode'>m</PrefixSymbol>
60
+ <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
61
+ <PrefixSymbol type='HTML'>m</PrefixSymbol>
62
+ </Prefix>
63
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
64
+ <Length symbol='L' powerNumerator='1'/>
65
+ <Time symbol='T' powerNumerator='-2'/>
66
+ </Dimension>
67
+ </math>
68
+ OUTPUT
67
69
  end
68
70
 
69
71
  it "deals with non-Ascii units and prefixes" do
70
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
71
- 1 "unitsml(um)"
72
+ input = <<~INPUT
73
+ 1 "unitsml(um)"
72
74
  INPUT
73
- <?xml version='1.0'?>
74
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
75
- <mn>1</mn>
76
- <mo rspace='thickmathspace'>&#x2062;</mo>
77
- <mrow xref='U_um'>
78
- <mi mathvariant='normal'>&#xB5;m</mi>
79
- </mrow>
80
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
81
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
82
- <UnitName xml:lang='en'>um</UnitName>
83
- <UnitSymbol type='HTML'>um</UnitSymbol>
84
- <UnitSymbol type='MathML'>
85
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
86
- <mrow>
87
- <mi mathvariant='normal'>&#xB5;m</mi>
88
- </mrow>
89
- </math>
90
- </UnitSymbol>
91
- <RootUnits>
92
- <EnumeratedRootUnit unit='meter' prefix='u'/>
93
- </RootUnits>
94
- </Unit>
95
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
96
- <PrefixName xml:lang='en'>micro</PrefixName>
97
- <PrefixSymbol type='ASCII'>u</PrefixSymbol>
98
- <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
99
- <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
100
- <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
101
- </Prefix>
102
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
103
- <Length symbol='L' powerNumerator='1'/>
104
- </Dimension>
105
- </math>
106
- OUTPUT
107
- end
75
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
76
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
77
+ <?xml version='1.0'?>
78
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
79
+ <mn>1</mn>
80
+ <mo rspace='thickmathspace'>&#x2062;</mo>
81
+ <mrow xref='U_um'>
82
+ <mi mathvariant='normal'>&#xB5;m</mi>
83
+ </mrow>
84
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
85
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
86
+ <UnitName xml:lang='en'>um</UnitName>
87
+ <UnitSymbol type='HTML'>um</UnitSymbol>
88
+ <UnitSymbol type='MathML'>
89
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
90
+ <mrow>
91
+ <mi mathvariant='normal'>&#xB5;m</mi>
92
+ </mrow>
93
+ </math>
94
+ </UnitSymbol>
95
+ <RootUnits>
96
+ <EnumeratedRootUnit unit='meter' prefix='u'/>
97
+ </RootUnits>
98
+ </Unit>
99
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
100
+ <PrefixName xml:lang='en'>micro</PrefixName>
101
+ <PrefixSymbol type='ASCII'>u</PrefixSymbol>
102
+ <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
103
+ <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
104
+ <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
105
+ </Prefix>
106
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
107
+ <Length symbol='L' powerNumerator='1'/>
108
+ </Dimension>
109
+ </math>
110
+ OUTPUT
111
+ end
108
112
 
109
113
  it "does not insert space before non-alphabetic units" do
110
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
111
- 1 "unitsml(degK)" + 1 "unitsml(prime)" + ii(theta) = s//r "unitsml(rad)" + 10^(12) "unitsml(Hz)"
112
- INPUT
113
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
114
- <mn>1</mn>
115
- <mo rspace='thickmathspace'>&#x2062;</mo>
116
- <mrow xref='U_NISTu5'>
117
- <mi mathvariant='normal'>&#xB0;K</mi>
118
- </mrow>
119
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
120
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
121
- <UnitName xml:lang='en'>kelvin</UnitName>
122
- <UnitSymbol type='HTML'>K</UnitSymbol>
123
- <UnitSymbol type='MathML'>
124
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
125
- <mrow>
126
- <mi mathvariant='normal'>K</mi>
127
- </mrow>
128
- </math>
129
- </UnitSymbol>
130
- </Unit>
131
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
132
- <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
133
- </Dimension>
134
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
135
- <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
136
- </Quantity>
137
- <mo>+</mo>
138
- <mn>1</mn>
139
- <mo>&#x2062;</mo>
140
- <mrow xref='U_NISTu147'>
141
- <mi mathvariant='normal'>&#x2032;</mi>
142
- </mrow>
143
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu147'>
144
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
145
- <UnitName xml:lang='en'>minute (minute of arc)</UnitName>
146
- <UnitSymbol type='HTML'>&#x2032;</UnitSymbol>
147
- <UnitSymbol type='MathML'>
148
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
149
- <mrow>
150
- <mi mathvariant='normal'>&#x2032;</mi>
151
- </mrow>
152
- </math>
153
- </UnitSymbol>
154
- </Unit>
155
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd9'>
156
- <PlaneAngle symbol='Phi' powerNumerator='1'/>
157
- </Dimension>
158
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq9' dimensionURL='#NISTd9' quantityType='base'>
159
- <QuantityName xml:lang='en-US'>plane angle</QuantityName>
160
- <QuantityName xml:lang='en-US'>angle</QuantityName>
161
- </Quantity>
162
- <mo>+</mo>
163
- <mstyle mathvariant='italic'>
164
- <mi>&#x3B8;</mi>
165
- </mstyle>
166
- <mo>=</mo>
167
- <mi>s</mi>
168
- <mo>/</mo>
169
- <mi>r</mi>
170
- <mo rspace='thickmathspace'>&#x2062;</mo>
171
- <mrow xref='U_NISTu9'>
172
- <mi mathvariant='normal'>rad</mi>
173
- </mrow>
174
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu9' dimensionURL='#D_L0'>
175
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
176
- <UnitName xml:lang='en'>radian</UnitName>
177
- <UnitSymbol type='HTML'>rad</UnitSymbol>
178
- <UnitSymbol type='MathML'>
179
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
180
- <mrow>
181
- <mi mathvariant='normal'>rad</mi>
182
- </mrow>
183
- </math>
184
- </UnitSymbol>
185
- </Unit>
186
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L0'>
187
- <Length symbol='L' powerNumerator='0'/>
188
- </Dimension>
189
- <mo>+</mo>
190
- <msup>
191
- <mrow>
192
- <mn>10</mn>
193
- </mrow>
194
- <mrow>
195
- <mn>12</mn>
196
- </mrow>
197
- </msup>
198
- <mo rspace='thickmathspace'>&#x2062;</mo>
199
- <mrow xref='U_NISTu31'>
200
- <mi mathvariant='normal'>Hz</mi>
201
- </mrow>
202
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu31' dimensionURL='#NISTd24'>
203
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
204
- <UnitName xml:lang='en'>hertz</UnitName>
205
- <UnitSymbol type='HTML'>Hz</UnitSymbol>
206
- <UnitSymbol type='MathML'>
207
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
208
- <mrow>
209
- <mi mathvariant='normal'>Hz</mi>
210
- </mrow>
211
- </math>
212
- </UnitSymbol>
213
- </Unit>
214
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd24'>
215
- <Time symbol='T' powerNumerator='-1'/>
216
- </Dimension>
217
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq45' dimensionURL='#NISTd24' quantityType='base'>
218
- <QuantityName xml:lang='en-US'>frequency</QuantityName>
219
- </Quantity>
220
- </math>
221
- OUTPUT
222
- end
114
+ input = <<~INPUT
115
+ 1 "unitsml(degK)" + 1 "unitsml(prime)" + ii(theta) = s//r "unitsml(rad)" + 10^(12) "unitsml(Hz)"
116
+ INPUT
117
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
118
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
119
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
120
+ <mn>1</mn>
121
+ <mo rspace='thickmathspace'>&#x2062;</mo>
122
+ <mrow xref='U_NISTu5'>
123
+ <mi mathvariant='normal'>&#xB0;K</mi>
124
+ </mrow>
125
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
126
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
127
+ <UnitName xml:lang='en'>kelvin</UnitName>
128
+ <UnitSymbol type='HTML'>K</UnitSymbol>
129
+ <UnitSymbol type='MathML'>
130
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
131
+ <mrow>
132
+ <mi mathvariant='normal'>K</mi>
133
+ </mrow>
134
+ </math>
135
+ </UnitSymbol>
136
+ </Unit>
137
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
138
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
139
+ </Dimension>
140
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
141
+ <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
142
+ </Quantity>
143
+ <mo>+</mo>
144
+ <mn>1</mn>
145
+ <mo>&#x2062;</mo>
146
+ <mrow xref='U_NISTu147'>
147
+ <mi mathvariant='normal'>&#x2032;</mi>
148
+ </mrow>
149
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu147'>
150
+ <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
151
+ <UnitName xml:lang='en'>minute (minute of arc)</UnitName>
152
+ <UnitSymbol type='HTML'>&#x2032;</UnitSymbol>
153
+ <UnitSymbol type='MathML'>
154
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
155
+ <mrow>
156
+ <mi mathvariant='normal'>&#x2032;</mi>
157
+ </mrow>
158
+ </math>
159
+ </UnitSymbol>
160
+ </Unit>
161
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd9'>
162
+ <PlaneAngle symbol='phi' powerNumerator='1'/>
163
+ </Dimension>
164
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq9' dimensionURL='#NISTd9' quantityType='base'>
165
+ <QuantityName xml:lang='en-US'>plane angle</QuantityName>
166
+ <QuantityName xml:lang='en-US'>angle</QuantityName>
167
+ </Quantity>
168
+ <mo>+</mo>
169
+ <mstyle mathvariant='italic'>
170
+ <mi>&#x3B8;</mi>
171
+ </mstyle>
172
+ <mo>=</mo>
173
+ <mi>s</mi>
174
+ <mo>/</mo>
175
+ <mi>r</mi>
176
+ <mo rspace='thickmathspace'>&#x2062;</mo>
177
+ <mrow xref='U_NISTu9'>
178
+ <mi mathvariant='normal'>rad</mi>
179
+ </mrow>
180
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu9' dimensionURL='#D_L0'>
181
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
182
+ <UnitName xml:lang='en'>radian</UnitName>
183
+ <UnitSymbol type='HTML'>rad</UnitSymbol>
184
+ <UnitSymbol type='MathML'>
185
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
186
+ <mrow>
187
+ <mi mathvariant='normal'>rad</mi>
188
+ </mrow>
189
+ </math>
190
+ </UnitSymbol>
191
+ </Unit>
192
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L0'>
193
+ <Length symbol='L' powerNumerator='0'/>
194
+ </Dimension>
195
+ <mo>+</mo>
196
+ <msup>
197
+ <mrow>
198
+ <mn>10</mn>
199
+ </mrow>
200
+ <mrow>
201
+ <mn>12</mn>
202
+ </mrow>
203
+ </msup>
204
+ <mo rspace='thickmathspace'>&#x2062;</mo>
205
+ <mrow xref='U_NISTu31'>
206
+ <mi mathvariant='normal'>Hz</mi>
207
+ </mrow>
208
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu31' dimensionURL='#NISTd24'>
209
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
210
+ <UnitName xml:lang='en'>hertz</UnitName>
211
+ <UnitSymbol type='HTML'>Hz</UnitSymbol>
212
+ <UnitSymbol type='MathML'>
213
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
214
+ <mrow>
215
+ <mi mathvariant='normal'>Hz</mi>
216
+ </mrow>
217
+ </math>
218
+ </UnitSymbol>
219
+ </Unit>
220
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd24'>
221
+ <Time symbol='T' powerNumerator='-1'/>
222
+ </Dimension>
223
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq45' dimensionURL='#NISTd24' quantityType='base'>
224
+ <QuantityName xml:lang='en-US'>frequency</QuantityName>
225
+ </Quantity>
226
+ </math>
227
+ OUTPUT
228
+ end
223
229
 
224
230
  it "does not insert space before operators" do
225
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
226
- 8 "unitsml(kg)" cdot "unitsml(m)"
227
- INPUT
228
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
229
- <mn>8</mn>
230
- <mo rspace='thickmathspace'>&#x2062;</mo>
231
- <mrow xref='U_NISTu2'>
232
- <mi mathvariant='normal'>kg</mi>
233
- </mrow>
234
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
235
- <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
236
- <UnitName xml:lang='en'>kilogram</UnitName>
237
- <UnitSymbol type='HTML'>kg</UnitSymbol>
238
- <UnitSymbol type='MathML'>
239
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
240
- <mrow>
241
- <mi mathvariant='normal'>kg</mi>
242
- </mrow>
243
- </math>
244
- </UnitSymbol>
245
- <RootUnits>
246
- <EnumeratedRootUnit unit='gram' prefix='k'/>
247
- </RootUnits>
248
- </Unit>
249
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
250
- <PrefixName xml:lang='en'>kilo</PrefixName>
251
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
252
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
253
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
254
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
255
- </Prefix>
256
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
257
- <Mass symbol='M' powerNumerator='1'/>
258
- </Dimension>
259
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
260
- <QuantityName xml:lang='en-US'>mass</QuantityName>
261
- </Quantity>
262
- <mo>&#x22C5;</mo>
263
- <mrow xref='U_NISTu1'>
264
- <mi mathvariant='normal'>m</mi>
265
- </mrow>
266
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
267
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
268
- <UnitName xml:lang='en'>meter</UnitName>
269
- <UnitSymbol type='HTML'>m</UnitSymbol>
270
- <UnitSymbol type='MathML'>
271
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
272
- <mrow>
273
- <mi mathvariant='normal'>m</mi>
274
- </mrow>
275
- </math>
276
- </UnitSymbol>
277
- </Unit>
278
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
279
- <Length symbol='L' powerNumerator='1'/>
280
- </Dimension>
281
- </math>
282
- OUTPUT
231
+ input = <<~INPUT
232
+ 8 "unitsml(kg)" cdot "unitsml(m)"
233
+ INPUT
234
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
235
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
236
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
237
+ <mn>8</mn>
238
+ <mo rspace='thickmathspace'>&#x2062;</mo>
239
+ <mrow xref='U_NISTu2'>
240
+ <mi mathvariant='normal'>kg</mi>
241
+ </mrow>
242
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
243
+ <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
244
+ <UnitName xml:lang='en'>kilogram</UnitName>
245
+ <UnitSymbol type='HTML'>kg</UnitSymbol>
246
+ <UnitSymbol type='MathML'>
247
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
248
+ <mrow>
249
+ <mi mathvariant='normal'>kg</mi>
250
+ </mrow>
251
+ </math>
252
+ </UnitSymbol>
253
+ <RootUnits>
254
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
255
+ </RootUnits>
256
+ </Unit>
257
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
258
+ <PrefixName xml:lang='en'>kilo</PrefixName>
259
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
260
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
261
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
262
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
263
+ </Prefix>
264
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
265
+ <Mass symbol='M' powerNumerator='1'/>
266
+ </Dimension>
267
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
268
+ <QuantityName xml:lang='en-US'>mass</QuantityName>
269
+ </Quantity>
270
+ <mo>&#x22C5;</mo>
271
+ <mrow xref='U_NISTu1'>
272
+ <mi mathvariant='normal'>m</mi>
273
+ </mrow>
274
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
275
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
276
+ <UnitName xml:lang='en'>meter</UnitName>
277
+ <UnitSymbol type='HTML'>m</UnitSymbol>
278
+ <UnitSymbol type='MathML'>
279
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
280
+ <mrow>
281
+ <mi mathvariant='normal'>m</mi>
282
+ </mrow>
283
+ </math>
284
+ </UnitSymbol>
285
+ </Unit>
286
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
287
+ <Length symbol='L' powerNumerator='1'/>
288
+ </Dimension>
289
+ </math>
290
+ OUTPUT
283
291
  end
284
292
 
285
293
  it "deals with sqrt units" do
286
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
287
- 1 "unitsml(sqrt(Hz))"
294
+ input = <<~INPUT
295
+ 1 "unitsml(sqrt(Hz))"
288
296
  INPUT
289
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
290
- <mn>1</mn>
291
- <mo rspace='thickmathspace'>&#x2062;</mo>
292
- <mrow xref='U_sqrtHz'>
293
- <msqrt>
294
- <mi mathvariant='normal'>Hz</mi>
295
- </msqrt>
296
- </mrow>
297
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_Hz0.5' dimensionURL='#D_T-0.5'>
298
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
299
- <UnitName xml:lang='en'>Hz^0.5</UnitName>
300
- <UnitSymbol type='HTML'>&#x221A;Hz</UnitSymbol>
301
- <UnitSymbol type='MathML'>
302
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
303
- <mrow>
304
- <msqrt>
305
- <mi mathvariant='normal'>Hz</mi>
306
- </msqrt>
307
- </mrow>
308
- </math>
309
- </UnitSymbol>
310
- </Unit>
311
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_T-0.5'>
312
- <Time symbol='T' powerNumerator='-0.5'/>
313
- </Dimension>
314
- </math>
315
- OUTPUT
297
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
298
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
299
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
300
+ <mn>1</mn>
301
+ <mo rspace='thickmathspace'>&#x2062;</mo>
302
+ <mrow xref='U_sqrtHz'>
303
+ <msqrt>
304
+ <mi mathvariant='normal'>Hz</mi>
305
+ </msqrt>
306
+ </mrow>
307
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_Hz0.5' dimensionURL='#D_T-0.5'>
308
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
309
+ <UnitName xml:lang='en'>Hz^0.5</UnitName>
310
+ <UnitSymbol type='HTML'>&#x221A;Hz</UnitSymbol>
311
+ <UnitSymbol type='MathML'>
312
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
313
+ <mrow>
314
+ <msqrt>
315
+ <mi mathvariant='normal'>Hz</mi>
316
+ </msqrt>
317
+ </mrow>
318
+ </math>
319
+ </UnitSymbol>
320
+ </Unit>
321
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_T-0.5'>
322
+ <Time symbol='T' powerNumerator='-0.5'/>
323
+ </Dimension>
324
+ </math>
325
+ OUTPUT
316
326
  end
317
327
 
318
328
  it "deals with kg and g" do
319
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
320
- 1 "unitsml(kg)" + 1 "unitsml(g)"
329
+ input = <<~INPUT
330
+ 1 "unitsml(kg)" + 1 "unitsml(g)"
321
331
  INPUT
322
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
323
- <mn>1</mn>
324
- <mo rspace='thickmathspace'>&#x2062;</mo>
325
- <mrow xref='U_NISTu2'>
326
- <mi mathvariant='normal'>kg</mi>
327
- </mrow>
328
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
329
- <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
330
- <UnitName xml:lang='en'>kilogram</UnitName>
331
- <UnitSymbol type='HTML'>kg</UnitSymbol>
332
- <UnitSymbol type='MathML'>
333
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
334
- <mrow>
335
- <mi mathvariant='normal'>kg</mi>
336
- </mrow>
337
- </math>
338
- </UnitSymbol>
339
- <RootUnits>
340
- <EnumeratedRootUnit unit='gram' prefix='k'/>
341
- </RootUnits>
342
- </Unit>
343
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
344
- <PrefixName xml:lang='en'>kilo</PrefixName>
345
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
346
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
347
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
348
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
349
- </Prefix>
350
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
351
- <Mass symbol='M' powerNumerator='1'/>
352
- </Dimension>
353
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
354
- <QuantityName xml:lang='en-US'>mass</QuantityName>
355
- </Quantity>
356
- <mo>+</mo>
357
- <mn>1</mn>
358
- <mo rspace='thickmathspace'>&#x2062;</mo>
359
- <mrow xref='U_NISTu27'>
360
- <mi mathvariant='normal'>g</mi>
361
- </mrow>
362
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu27' dimensionURL='#NISTd2'>
363
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
364
- <UnitName xml:lang='en'>gram</UnitName>
365
- <UnitSymbol type='HTML'>g</UnitSymbol>
366
- <UnitSymbol type='MathML'>
367
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
368
- <mrow>
369
- <mi mathvariant='normal'>g</mi>
370
- </mrow>
371
- </math>
372
- </UnitSymbol>
373
- </Unit>
374
- </math>
375
- OUTPUT
332
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
333
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
334
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
335
+ <mn>1</mn>
336
+ <mo rspace='thickmathspace'>&#x2062;</mo>
337
+ <mrow xref='U_NISTu2'>
338
+ <mi mathvariant='normal'>kg</mi>
339
+ </mrow>
340
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
341
+ <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
342
+ <UnitName xml:lang='en'>kilogram</UnitName>
343
+ <UnitSymbol type='HTML'>kg</UnitSymbol>
344
+ <UnitSymbol type='MathML'>
345
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
346
+ <mrow>
347
+ <mi mathvariant='normal'>kg</mi>
348
+ </mrow>
349
+ </math>
350
+ </UnitSymbol>
351
+ <RootUnits>
352
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
353
+ </RootUnits>
354
+ </Unit>
355
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
356
+ <PrefixName xml:lang='en'>kilo</PrefixName>
357
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
358
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
359
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
360
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
361
+ </Prefix>
362
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
363
+ <Mass symbol='M' powerNumerator='1'/>
364
+ </Dimension>
365
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
366
+ <QuantityName xml:lang='en-US'>mass</QuantityName>
367
+ </Quantity>
368
+ <mo>+</mo>
369
+ <mn>1</mn>
370
+ <mo rspace='thickmathspace'>&#x2062;</mo>
371
+ <mrow xref='U_NISTu27'>
372
+ <mi mathvariant='normal'>g</mi>
373
+ </mrow>
374
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu27' dimensionURL='#NISTd2'>
375
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
376
+ <UnitName xml:lang='en'>gram</UnitName>
377
+ <UnitSymbol type='HTML'>g</UnitSymbol>
378
+ <UnitSymbol type='MathML'>
379
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
380
+ <mrow>
381
+ <mi mathvariant='normal'>g</mi>
382
+ </mrow>
383
+ </math>
384
+ </UnitSymbol>
385
+ </Unit>
386
+ </math>
387
+ OUTPUT
376
388
  end
377
389
 
378
390
  it "deals with non-metric" do
379
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
380
- 1 "unitsml(hp)"
391
+ input = <<~INPUT
392
+ 1 "unitsml(hp)"
381
393
  INPUT
382
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
383
- <mn>1</mn>
384
- <mo rspace='thickmathspace'>&#x2062;</mo>
385
- <mrow xref='U_NISTu284'>
386
- <mi mathvariant='normal'>hp</mi>
387
- </mrow>
388
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu284'>
389
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
390
- <UnitName xml:lang='en'>horsepower</UnitName>
391
- <UnitSymbol type='HTML'>hp</UnitSymbol>
392
- <UnitSymbol type='MathML'>
393
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
394
- <mrow>
395
- <mi mathvariant='normal'>hp</mi>
396
- </mrow>
397
- </math>
398
- </UnitSymbol>
399
- </Unit>
400
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd16'>
401
- <Length symbol='L' powerNumerator='2'/>
402
- <Mass symbol='M' powerNumerator='1'/>
403
- <Time symbol='T' powerNumerator='-3'/>
404
- </Dimension>
405
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq20' dimensionURL='#NISTd16' quantityType='base'>
406
- <QuantityName xml:lang='en-US'>power</QuantityName>
407
- </Quantity>
408
- </math>
409
- OUTPUT
394
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
395
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
396
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
397
+ <mn>1</mn>
398
+ <mo rspace='thickmathspace'>&#x2062;</mo>
399
+ <mrow xref='U_NISTu284'>
400
+ <mi mathvariant='normal'>hp</mi>
401
+ </mrow>
402
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu284'>
403
+ <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
404
+ <UnitName xml:lang='en'>horsepower</UnitName>
405
+ <UnitSymbol type='HTML'>hp</UnitSymbol>
406
+ <UnitSymbol type='MathML'>
407
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
408
+ <mrow>
409
+ <mi mathvariant='normal'>hp</mi>
410
+ </mrow>
411
+ </math>
412
+ </UnitSymbol>
413
+ </Unit>
414
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd16'>
415
+ <Length symbol='L' powerNumerator='2'/>
416
+ <Mass symbol='M' powerNumerator='1'/>
417
+ <Time symbol='T' powerNumerator='-3'/>
418
+ </Dimension>
419
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq20' dimensionURL='#NISTd16' quantityType='base'>
420
+ <QuantityName xml:lang='en-US'>power</QuantityName>
421
+ </Quantity>
422
+ </math>
423
+ OUTPUT
410
424
  end
411
425
 
412
426
  it "deals with duplicate units" do
413
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
414
- 1 "unitsml(kg*s^-2)" xx 9 "unitsml(kg*s^-2)"
427
+ input = <<~INPUT
428
+ 1 "unitsml(kg*s^-2)" xx 9 "unitsml(kg*s^-2)"
415
429
  INPUT
416
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
417
- <mn>1</mn>
418
- <mo rspace='thickmathspace'>&#x2062;</mo>
419
- <mrow xref='U_kg.s-2'>
420
- <mi mathvariant='normal'>kg</mi>
421
- <mo>&#xB7;</mo>
422
- <msup>
423
- <mrow>
424
- <mi mathvariant='normal'>s</mi>
425
- </mrow>
426
- <mrow>
427
- <mo>&#x2212;</mo>
428
- <mn>2</mn>
430
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
431
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
432
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
433
+ <mn>1</mn>
434
+ <mo rspace='thickmathspace'>&#x2062;</mo>
435
+ <mrow xref='U_kg.s-2'>
436
+ <mi mathvariant='normal'>kg</mi>
437
+ <mo>&#x22C5;</mo>
438
+ <msup>
439
+ <mrow>
440
+ <mi mathvariant='normal'>s</mi>
441
+ </mrow>
442
+ <mrow>
443
+ <mo>&#x2212;</mo>
444
+ <mn>2</mn>
445
+ </mrow>
446
+ </msup>
429
447
  </mrow>
430
- </msup>
431
- </mrow>
432
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
433
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
434
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
435
- <UnitSymbol type='HTML'>
436
- kg&#xB7;s
437
- <sup>&#x2212;2</sup>
438
- </UnitSymbol>
439
- <UnitSymbol type='MathML'>
440
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
441
- <mrow>
442
- <mi mathvariant='normal'>kg</mi>
443
- <mo>&#xB7;</mo>
444
- <msup>
448
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
449
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
450
+ <UnitName xml:lang='en'>kg*s^-2</UnitName>
451
+ <UnitSymbol type='HTML'>
452
+ kg&#x22C5;s
453
+ <sup>&#x2212;2</sup>
454
+ </UnitSymbol>
455
+ <UnitSymbol type='MathML'>
456
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
445
457
  <mrow>
446
- <mi mathvariant='normal'>s</mi>
447
- </mrow>
448
- <mrow>
449
- <mo>&#x2212;</mo>
450
- <mn>2</mn>
458
+ <mi mathvariant='normal'>kg</mi>
459
+ <mo>&#x22C5;</mo>
460
+ <msup>
461
+ <mrow>
462
+ <mi mathvariant='normal'>s</mi>
463
+ </mrow>
464
+ <mrow>
465
+ <mo>&#x2212;</mo>
466
+ <mn>2</mn>
467
+ </mrow>
468
+ </msup>
451
469
  </mrow>
452
- </msup>
453
- </mrow>
454
- </math>
455
- </UnitSymbol>
456
- <RootUnits>
457
- <EnumeratedRootUnit unit='gram' prefix='k'/>
458
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
459
- </RootUnits>
460
- </Unit>
461
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
462
- <PrefixName xml:lang='en'>kilo</PrefixName>
463
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
464
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
465
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
466
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
467
- </Prefix>
468
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
469
- <Mass symbol='M' powerNumerator='1'/>
470
- <Time symbol='T' powerNumerator='-2'/>
471
- </Dimension>
472
- <mo>&#xD7;</mo>
473
- <mn>9</mn>
474
- <mo rspace='thickmathspace'>&#x2062;</mo>
475
- <mrow xref='U_kg.s-2'>
476
- <mi mathvariant='normal'>kg</mi>
477
- <mo>&#xB7;</mo>
478
- <msup>
479
- <mrow>
480
- <mi mathvariant='normal'>s</mi>
481
- </mrow>
482
- <mrow>
483
- <mo>&#x2212;</mo>
484
- <mn>2</mn>
470
+ </math>
471
+ </UnitSymbol>
472
+ <RootUnits>
473
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
474
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
475
+ </RootUnits>
476
+ </Unit>
477
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
478
+ <PrefixName xml:lang='en'>kilo</PrefixName>
479
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
480
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
481
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
482
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
483
+ </Prefix>
484
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
485
+ <Mass symbol='M' powerNumerator='1'/>
486
+ <Time symbol='T' powerNumerator='-2'/>
487
+ </Dimension>
488
+ <mo>&#xD7;</mo>
489
+ <mn>9</mn>
490
+ <mo rspace='thickmathspace'>&#x2062;</mo>
491
+ <mrow xref='U_kg.s-2'>
492
+ <mi mathvariant='normal'>kg</mi>
493
+ <mo>&#x22C5;</mo>
494
+ <msup>
495
+ <mrow>
496
+ <mi mathvariant='normal'>s</mi>
497
+ </mrow>
498
+ <mrow>
499
+ <mo>&#x2212;</mo>
500
+ <mn>2</mn>
501
+ </mrow>
502
+ </msup>
485
503
  </mrow>
486
- </msup>
487
- </mrow>
488
- </math>
489
- OUTPUT
504
+ </math>
505
+ OUTPUT
490
506
  end
491
507
 
492
508
  it "deals with parentheses" do
493
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
494
- 10 "unitsml(K/(kg*m))"
509
+ input = <<~INPUT
510
+ 10 "unitsml(K/(kg*m))"
495
511
  INPUT
496
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
497
- <mn>10</mn>
498
- <mo rspace='thickmathspace'>&#x2062;</mo>
499
- <mrow xref='U_K/kg.m'>
500
- <mi mathvariant='normal'>K</mi>
501
- <mo>/</mo>
502
- <mi mathvariant='normal'>kg</mi>
503
- <mo>&#xB7;</mo>
504
- <mi mathvariant='normal'>m</mi>
505
- </mrow>
506
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_K.kg-1.m-1' dimensionURL='#D_L-1M-1Theta'>
507
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
508
- <UnitName xml:lang='en'>K*kg^-1*m^-1</UnitName>
509
- <UnitSymbol type='HTML'>
510
- K&#xB7;kg
511
- <sup>&#x2212;1</sup>
512
- &#xB7;m
513
- <sup>&#x2212;1</sup>
514
- </UnitSymbol>
515
- <UnitSymbol type='MathML'>
516
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
517
- <mrow>
518
- <mi mathvariant='normal'>K</mi>
519
- <mo>&#xB7;</mo>
520
- <msup>
521
- <mrow>
522
- <mi mathvariant='normal'>kg</mi>
523
- </mrow>
524
- <mrow>
525
- <mo>&#x2212;</mo>
526
- <mn>1</mn>
527
- </mrow>
528
- </msup>
529
- <mo>&#xB7;</mo>
530
- <msup>
531
- <mrow>
532
- <mi mathvariant='normal'>m</mi>
533
- </mrow>
534
- <mrow>
535
- <mo>&#x2212;</mo>
536
- <mn>1</mn>
537
- </mrow>
538
- </msup>
539
- </mrow>
540
- </math>
541
- </UnitSymbol>
542
- <RootUnits>
543
- <EnumeratedRootUnit unit='kelvin'/>
544
- <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
545
- <EnumeratedRootUnit unit='meter' powerNumerator='-1'/>
546
- </RootUnits>
547
- </Unit>
548
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
549
- <PrefixName xml:lang='en'>kilo</PrefixName>
550
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
551
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
552
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
553
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
554
- </Prefix>
555
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L-1M-1Theta'>
556
- <Length symbol='L' powerNumerator='-1'/>
557
- <Mass symbol='M' powerNumerator='-1'/>
558
- <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
559
- </Dimension>
560
- </math>
561
- OUTPUT
512
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
513
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
514
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
515
+ <mn>10</mn>
516
+ <mo rspace='thickmathspace'>&#x2062;</mo>
517
+ <mrow xref='U_K/kg.m'>
518
+ <mi mathvariant='normal'>K</mi>
519
+ <mo>/</mo>
520
+ <mi mathvariant='normal'>kg</mi>
521
+ <mo>&#x22C5;</mo>
522
+ <mi mathvariant='normal'>m</mi>
523
+ </mrow>
524
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_K.kg-1.m-1' dimensionURL='#D_L-1M-1Theta'>
525
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
526
+ <UnitName xml:lang='en'>K*kg^-1*m^-1</UnitName>
527
+ <UnitSymbol type='HTML'>
528
+ K&#x22C5;kg
529
+ <sup>&#x2212;1</sup>
530
+ &#x22C5;m
531
+ <sup>&#x2212;1</sup>
532
+ </UnitSymbol>
533
+ <UnitSymbol type='MathML'>
534
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
535
+ <mrow>
536
+ <mi mathvariant='normal'>K</mi>
537
+ <mo>&#x22C5;</mo>
538
+ <msup>
539
+ <mrow>
540
+ <mi mathvariant='normal'>kg</mi>
541
+ </mrow>
542
+ <mrow>
543
+ <mo>&#x2212;</mo>
544
+ <mn>1</mn>
545
+ </mrow>
546
+ </msup>
547
+ <mo>&#x22C5;</mo>
548
+ <msup>
549
+ <mrow>
550
+ <mi mathvariant='normal'>m</mi>
551
+ </mrow>
552
+ <mrow>
553
+ <mo>&#x2212;</mo>
554
+ <mn>1</mn>
555
+ </mrow>
556
+ </msup>
557
+ </mrow>
558
+ </math>
559
+ </UnitSymbol>
560
+ <RootUnits>
561
+ <EnumeratedRootUnit unit='kelvin'/>
562
+ <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
563
+ <EnumeratedRootUnit unit='meter' powerNumerator='-1'/>
564
+ </RootUnits>
565
+ </Unit>
566
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
567
+ <PrefixName xml:lang='en'>kilo</PrefixName>
568
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
569
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
570
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
571
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
572
+ </Prefix>
573
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L-1M-1Theta'>
574
+ <Length symbol='L' powerNumerator='-1'/>
575
+ <Mass symbol='M' powerNumerator='-1'/>
576
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
577
+ </Dimension>
578
+ </math>
579
+ OUTPUT
562
580
  end
563
581
 
564
582
  it "deals with notational variants" do
565
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
566
- 9 "unitsml(degK)" + 10 "unitsml(K)"
567
- INPUT
568
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
569
- <mn>9</mn>
570
- <mo rspace='thickmathspace'>&#x2062;</mo>
571
- <mrow xref='U_NISTu5'>
572
- <mi mathvariant='normal'>&#xB0;K</mi>
573
- </mrow>
574
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
575
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
576
- <UnitName xml:lang='en'>kelvin</UnitName>
577
- <UnitSymbol type='HTML'>K</UnitSymbol>
578
- <UnitSymbol type='MathML'>
579
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
580
- <mrow>
581
- <mi mathvariant='normal'>K</mi>
582
- </mrow>
583
- </math>
584
- </UnitSymbol>
585
- </Unit>
586
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
587
- <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
588
- </Dimension>
589
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
590
- <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
591
- </Quantity>
592
- <mo>+</mo>
593
- <mn>10</mn>
594
- <mo rspace='thickmathspace'>&#x2062;</mo>
595
- <mrow xref='U_NISTu5'>
596
- <mi mathvariant='normal'>K</mi>
597
- </mrow>
598
- </math>
599
- OUTPUT
583
+ input = <<~INPUT
584
+ 9 "unitsml(degK)" + 10 "unitsml(K)"
585
+ INPUT
586
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
587
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
588
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
589
+ <mn>9</mn>
590
+ <mo rspace='thickmathspace'>&#x2062;</mo>
591
+ <mrow xref='U_NISTu5'>
592
+ <mi mathvariant='normal'>&#xB0;K</mi>
593
+ </mrow>
594
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
595
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
596
+ <UnitName xml:lang='en'>kelvin</UnitName>
597
+ <UnitSymbol type='HTML'>K</UnitSymbol>
598
+ <UnitSymbol type='MathML'>
599
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
600
+ <mrow>
601
+ <mi mathvariant='normal'>K</mi>
602
+ </mrow>
603
+ </math>
604
+ </UnitSymbol>
605
+ </Unit>
606
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
607
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
608
+ </Dimension>
609
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
610
+ <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
611
+ </Quantity>
612
+ <mo>+</mo>
613
+ <mn>10</mn>
614
+ <mo rspace='thickmathspace'>&#x2062;</mo>
615
+ <mrow xref='U_NISTu5'>
616
+ <mi mathvariant='normal'>K</mi>
617
+ </mrow>
618
+ </math>
619
+ OUTPUT
600
620
  end
601
621
 
602
622
  it "deals with prefixed units" do
603
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
604
- 9 "unitsml(mbar)"
605
- INPUT
606
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
607
- <mn>9</mn>
608
- <mo rspace='thickmathspace'>&#x2062;</mo>
609
- <mrow xref='U_NISTu362'>
610
- <mi mathvariant='normal'>mbar</mi>
611
- </mrow>
612
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu362'>
613
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
614
- <UnitName xml:lang='en'>millibar</UnitName>
615
- <UnitSymbol type='HTML'>mbar</UnitSymbol>
616
- <UnitSymbol type='MathML'>
617
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
618
- <mrow>
619
- <mi mathvariant='normal'>mbar</mi>
620
- </mrow>
621
- </math>
622
- </UnitSymbol>
623
- <RootUnits>
624
- <EnumeratedRootUnit unit='bar' prefix='m'/>
625
- </RootUnits>
626
- </Unit>
627
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
628
- <PrefixName xml:lang='en'>milli</PrefixName>
629
- <PrefixSymbol type='ASCII'>m</PrefixSymbol>
630
- <PrefixSymbol type='unicode'>m</PrefixSymbol>
631
- <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
632
- <PrefixSymbol type='HTML'>m</PrefixSymbol>
633
- </Prefix>
634
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd14'>
635
- <Length symbol='L' powerNumerator='-1'/>
636
- <Mass symbol='M' powerNumerator='1'/>
637
- <Time symbol='T' powerNumerator='-2'/>
638
- </Dimension>
639
- </math>
640
- OUTPUT
623
+ input = <<~INPUT
624
+ 9 "unitsml(mbar)"
625
+ INPUT
626
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
627
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
628
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
629
+ <mn>9</mn>
630
+ <mo rspace='thickmathspace'>&#x2062;</mo>
631
+ <mrow xref='U_NISTu362'>
632
+ <mi mathvariant='normal'>mbar</mi>
633
+ </mrow>
634
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu362'>
635
+ <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
636
+ <UnitName xml:lang='en'>millibar</UnitName>
637
+ <UnitSymbol type='HTML'>mbar</UnitSymbol>
638
+ <UnitSymbol type='MathML'>
639
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
640
+ <mrow>
641
+ <mi mathvariant='normal'>mbar</mi>
642
+ </mrow>
643
+ </math>
644
+ </UnitSymbol>
645
+ <RootUnits>
646
+ <EnumeratedRootUnit unit='bar' prefix='m'/>
647
+ </RootUnits>
648
+ </Unit>
649
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
650
+ <PrefixName xml:lang='en'>milli</PrefixName>
651
+ <PrefixSymbol type='ASCII'>m</PrefixSymbol>
652
+ <PrefixSymbol type='unicode'>m</PrefixSymbol>
653
+ <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
654
+ <PrefixSymbol type='HTML'>m</PrefixSymbol>
655
+ </Prefix>
656
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd14'>
657
+ <Length symbol='L' powerNumerator='-1'/>
658
+ <Mass symbol='M' powerNumerator='1'/>
659
+ <Time symbol='T' powerNumerator='-2'/>
660
+ </Dimension>
661
+ </math>
662
+ OUTPUT
641
663
  end
642
664
 
643
665
  it "deals with standalone prefixes" do
644
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
645
- "unitsml(p-)" "unitsml(da-)"
666
+ input = <<~INPUT
667
+ "unitsml(p-)" "unitsml(da-)"
646
668
  INPUT
647
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
648
- <mrow xref='NISTp10_-12'>
649
- <mi mathvariant='normal'>p</mi>
650
- </mrow>
651
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-12' xml:id='NISTp10_-12'>
652
- <PrefixName xml:lang='en'>pico</PrefixName>
653
- <PrefixSymbol type='ASCII'>p</PrefixSymbol>
654
- <PrefixSymbol type='unicode'>p</PrefixSymbol>
655
- <PrefixSymbol type='LaTeX'>p</PrefixSymbol>
656
- <PrefixSymbol type='HTML'>p</PrefixSymbol>
657
- </Prefix>
658
- <mo rspace='thickmathspace'>&#x2062;</mo>
659
- <mrow xref='NISTp10_1'>
660
- <mi mathvariant='normal'>da</mi>
661
- </mrow>
662
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='1' xml:id='NISTp10_1'>
663
- <PrefixName xml:lang='en'>deka</PrefixName>
664
- <PrefixSymbol type='ASCII'>da</PrefixSymbol>
665
- <PrefixSymbol type='unicode'>da</PrefixSymbol>
666
- <PrefixSymbol type='LaTeX'>da</PrefixSymbol>
667
- <PrefixSymbol type='HTML'>da</PrefixSymbol>
668
- </Prefix>
669
- </math>
670
- OUTPUT
669
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
670
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
671
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
672
+ <mrow xref='NISTp10_-12'>
673
+ <mi mathvariant='normal'>p</mi>
674
+ </mrow>
675
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-12' xml:id='NISTp10_-12'>
676
+ <PrefixName xml:lang='en'>pico</PrefixName>
677
+ <PrefixSymbol type='ASCII'>p</PrefixSymbol>
678
+ <PrefixSymbol type='unicode'>p</PrefixSymbol>
679
+ <PrefixSymbol type='LaTeX'>p</PrefixSymbol>
680
+ <PrefixSymbol type='HTML'>p</PrefixSymbol>
681
+ </Prefix>
682
+ <mo rspace='thickmathspace'>&#x2062;</mo>
683
+ <mrow xref='NISTp10_1'>
684
+ <mi mathvariant='normal'>da</mi>
685
+ </mrow>
686
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='1' xml:id='NISTp10_1'>
687
+ <PrefixName xml:lang='en'>deka</PrefixName>
688
+ <PrefixSymbol type='ASCII'>da</PrefixSymbol>
689
+ <PrefixSymbol type='unicode'>da</PrefixSymbol>
690
+ <PrefixSymbol type='LaTeX'>da</PrefixSymbol>
691
+ <PrefixSymbol type='HTML'>da</PrefixSymbol>
692
+ </Prefix>
693
+ </math>
694
+ OUTPUT
671
695
  end
672
696
 
673
697
  it "deals with HTML entities in UnitsDB" do
674
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
675
- "unitsml(u-)" + "unitsml(um)"
676
- INPUT
677
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
678
- <mrow xref='NISTp10_-6'>
679
- <mi mathvariant='normal'>&#xB5;</mi>
680
- </mrow>
681
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
682
- <PrefixName xml:lang='en'>micro</PrefixName>
683
- <PrefixSymbol type='ASCII'>u</PrefixSymbol>
684
- <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
685
- <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
686
- <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
687
- </Prefix>
688
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
689
- <Mass symbol='M' powerNumerator='1'/>
690
- </Dimension>
691
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
692
- <QuantityName xml:lang='en-US'>mass</QuantityName>
693
- </Quantity>
694
- <mo>+</mo>
695
- <mrow xref='U_um'>
696
- <mi mathvariant='normal'>&#xB5;m</mi>
697
- </mrow>
698
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
699
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
700
- <UnitName xml:lang='en'>um</UnitName>
701
- <UnitSymbol type='HTML'>um</UnitSymbol>
702
- <UnitSymbol type='MathML'>
703
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
704
- <mrow>
705
- <mi mathvariant='normal'>&#xB5;m</mi>
706
- </mrow>
707
- </math>
708
- </UnitSymbol>
709
- <RootUnits>
710
- <EnumeratedRootUnit unit='meter' prefix='u'/>
711
- </RootUnits>
712
- </Unit>
713
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
714
- <Length symbol='L' powerNumerator='1'/>
715
- </Dimension>
716
- </math>
717
- OUTPUT
698
+ input = <<~INPUT
699
+ "unitsml(u-)" + "unitsml(um)"
700
+ INPUT
701
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
702
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
703
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
704
+ <mrow xref='NISTp10_-6'>
705
+ <mi mathvariant='normal'>&#xB5;</mi>
706
+ </mrow>
707
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
708
+ <PrefixName xml:lang='en'>micro</PrefixName>
709
+ <PrefixSymbol type='ASCII'>u</PrefixSymbol>
710
+ <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
711
+ <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
712
+ <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
713
+ </Prefix>
714
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
715
+ <Mass symbol='M' powerNumerator='1'/>
716
+ </Dimension>
717
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
718
+ <QuantityName xml:lang='en-US'>mass</QuantityName>
719
+ </Quantity>
720
+ <mo>+</mo>
721
+ <mrow xref='U_um'>
722
+ <mi mathvariant='normal'>&#xB5;m</mi>
723
+ </mrow>
724
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
725
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
726
+ <UnitName xml:lang='en'>um</UnitName>
727
+ <UnitSymbol type='HTML'>um</UnitSymbol>
728
+ <UnitSymbol type='MathML'>
729
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
730
+ <mrow>
731
+ <mi mathvariant='normal'>&#xB5;m</mi>
732
+ </mrow>
733
+ </math>
734
+ </UnitSymbol>
735
+ <RootUnits>
736
+ <EnumeratedRootUnit unit='meter' prefix='u'/>
737
+ </RootUnits>
738
+ </Unit>
739
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
740
+ <Length symbol='L' powerNumerator='1'/>
741
+ </Dimension>
742
+ </math>
743
+ OUTPUT
718
744
  end
719
745
 
720
746
  it "deals with units division" do
721
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
722
- 9 "unitsml(A*C^3)" + 13 "unitsml(A/C^-3)" + 2 "unitsml(J/kg*K)"
723
- INPUT
724
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
725
- <mn>9</mn>
726
- <mo rspace='thickmathspace'>&#x2062;</mo>
727
- <mrow xref='U_A.C3'>
728
- <mi mathvariant='normal'>A</mi>
729
- <mo>&#xB7;</mo>
730
- <msup>
731
- <mrow>
732
- <mi mathvariant='normal'>C</mi>
733
- </mrow>
734
- <mrow>
735
- <mn>3</mn>
736
- </mrow>
737
- </msup>
738
- </mrow>
739
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_A.C3' dimensionURL='#D_M3I4'>
740
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
741
- <UnitName xml:lang='en'>A*C^3</UnitName>
742
- <UnitSymbol type='HTML'>
743
- A&#xB7;C
744
- <sup>3</sup>
745
- </UnitSymbol>
746
- <UnitSymbol type='MathML'>
747
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
748
- <mrow>
749
- <mi mathvariant='normal'>A</mi>
750
- <mo>&#xB7;</mo>
747
+ input = <<~INPUT
748
+ 9 "unitsml(A*C^3)" + 13 "unitsml(A/C^-3)" + 2 "unitsml(J/kg*K)"
749
+ INPUT
750
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
751
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
752
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
753
+ <mn>9</mn>
754
+ <mo rspace='thickmathspace'>&#x2062;</mo>
755
+ <mrow xref='U_A.C3'>
756
+ <mi mathvariant='normal'>A</mi>
757
+ <mo>&#x22C5;</mo>
758
+ <msup>
759
+ <mrow>
760
+ <mi mathvariant='normal'>C</mi>
761
+ </mrow>
762
+ <mrow>
763
+ <mn>3</mn>
764
+ </mrow>
765
+ </msup>
766
+ </mrow>
767
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_A.C3' dimensionURL='#D_M3I4'>
768
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
769
+ <UnitName xml:lang='en'>A*C^3</UnitName>
770
+ <UnitSymbol type='HTML'>
771
+ A&#x22C5;C
772
+ <sup>3</sup>
773
+ </UnitSymbol>
774
+ <UnitSymbol type='MathML'>
775
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
776
+ <mrow>
777
+ <mi mathvariant='normal'>A</mi>
778
+ <mo>&#x22C5;</mo>
779
+ <msup>
780
+ <mrow>
781
+ <mi mathvariant='normal'>C</mi>
782
+ </mrow>
783
+ <mrow>
784
+ <mn>3</mn>
785
+ </mrow>
786
+ </msup>
787
+ </mrow>
788
+ </math>
789
+ </UnitSymbol>
790
+ <RootUnits>
791
+ <EnumeratedRootUnit unit='ampere'/>
792
+ <EnumeratedRootUnit unit='coulomb' powerNumerator='3'/>
793
+ </RootUnits>
794
+ </Unit>
795
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M3I4'>
796
+ <Mass symbol='M' powerNumerator='3'/>
797
+ <ElectricCurrent symbol='I' powerNumerator='4'/>
798
+ </Dimension>
799
+ <mo>+</mo>
800
+ <mn>13</mn>
801
+ <mo rspace='thickmathspace'>&#x2062;</mo>
802
+ <mrow xref='U_A/C-3'>
803
+ <mi mathvariant='normal'>A</mi>
804
+ <mo>/</mo>
805
+ <msup>
806
+ <mrow>
807
+ <mi mathvariant='normal'>C</mi>
808
+ </mrow>
809
+ <mrow>
810
+ <mo>&#x2212;</mo>
811
+ <mn>3</mn>
812
+ </mrow>
813
+ </msup>
814
+ </mrow>
815
+ <mo>+</mo>
816
+ <mn>2</mn>
817
+ <mo rspace='thickmathspace'>&#x2062;</mo>
818
+ <mrow xref='U_J/kg.K'>
819
+ <mi mathvariant='normal'>J</mi>
820
+ <mo>/</mo>
821
+ <mi mathvariant='normal'>kg</mi>
822
+ <mo>&#x22C5;</mo>
823
+ <mi mathvariant='normal'>K</mi>
824
+ </mrow>
825
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu13.u27p10_3e-1/1.u5e-1/1' dimensionURL='#D_L2M0T-2Theta-1'>
826
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
827
+ <UnitName xml:lang='en'>joule per kilogram kelvin</UnitName>
828
+ <UnitSymbol type='HTML'>
829
+ J&#x22C5;kg
830
+ <sup>&#x2212;1</sup>
831
+ &#x22C5;K
832
+ <sup>&#x2212;1</sup>
833
+ </UnitSymbol>
834
+ <UnitSymbol type='MathML'>
835
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
836
+ <mrow>
837
+ <mi mathvariant='normal'>J</mi>
838
+ <mo>&#x22C5;</mo>
839
+ <msup>
840
+ <mrow>
841
+ <mi mathvariant='normal'>kg</mi>
842
+ </mrow>
843
+ <mrow>
844
+ <mo>&#x2212;</mo>
845
+ <mn>1</mn>
846
+ </mrow>
847
+ </msup>
848
+ <mo>&#x22C5;</mo>
849
+ <msup>
850
+ <mrow>
851
+ <mi mathvariant='normal'>K</mi>
852
+ </mrow>
853
+ <mrow>
854
+ <mo>&#x2212;</mo>
855
+ <mn>1</mn>
856
+ </mrow>
857
+ </msup>
858
+ </mrow>
859
+ </math>
860
+ </UnitSymbol>
861
+ <RootUnits>
862
+ <EnumeratedRootUnit unit='joule'/>
863
+ <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
864
+ <EnumeratedRootUnit unit='kelvin' powerNumerator='-1'/>
865
+ </RootUnits>
866
+ </Unit>
867
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
868
+ <PrefixName xml:lang='en'>kilo</PrefixName>
869
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
870
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
871
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
872
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
873
+ </Prefix>
874
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd40'>
875
+ <Length symbol='L' powerNumerator='2'/>
876
+ <Time symbol='T' powerNumerator='-2'/>
877
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='-1'/>
878
+ </Dimension>
879
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L2M0T-2Theta-1'>
880
+ <Length symbol='L' powerNumerator='2'/>
881
+ <Mass symbol='M' powerNumerator='0'/>
882
+ <Time symbol='T' powerNumerator='-2'/>
883
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='-1'/>
884
+ </Dimension>
885
+ </math>
886
+ OUTPUT
887
+ end
888
+
889
+ it "converts MathML to MatML + UnitsML" do
890
+ input = <<~INPUT
891
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
892
+ <mn>32</mn>
893
+ <mo>+</mo>
894
+ <mn>5</mn>
895
+ <mo>&#xD7;</mo>
896
+ <mn>7</mn>
897
+ <mtext>unitsml(kg^-2)</mtext>
898
+ </math>
899
+ INPUT
900
+ output = <<~OUTPUT
901
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
902
+ <mn>32</mn>
903
+ <mo>+</mo>
904
+ <mn>5</mn>
905
+ <mo>&#xD7;</mo>
906
+ <mn>7</mn>
907
+ <mo rspace='thickmathspace'>&#x2062;</mo>
908
+ <mrow xref='U_kg-2'>
751
909
  <msup>
752
910
  <mrow>
753
- <mi mathvariant='normal'>C</mi>
911
+ <mi mathvariant='normal'>kg</mi>
754
912
  </mrow>
755
913
  <mrow>
756
- <mn>3</mn>
914
+ <mo>&#x2212;</mo>
915
+ <mn>2</mn>
757
916
  </mrow>
758
917
  </msup>
759
918
  </mrow>
760
- </math>
761
- </UnitSymbol>
762
- <RootUnits>
763
- <EnumeratedRootUnit unit='ampere'/>
764
- <EnumeratedRootUnit unit='coulomb' powerNumerator='3'/>
765
- </RootUnits>
766
- </Unit>
767
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M3I4'>
768
- <Mass symbol='M' powerNumerator='3'/>
769
- <ElectricCurrent symbol='I' powerNumerator='4'/>
770
- </Dimension>
771
- <mo>+</mo>
772
- <mn>13</mn>
773
- <mo rspace='thickmathspace'>&#x2062;</mo>
774
- <mrow xref='U_A/C-3'>
775
- <mi mathvariant='normal'>A</mi>
776
- <mo>/</mo>
777
- <msup>
919
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg-2' dimensionURL='#D_M-2'>
920
+ <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
921
+ <UnitName xml:lang='en'>kg^-2</UnitName>
922
+ <UnitSymbol type='HTML'>
923
+ kg
924
+ <sup>&#x2212;2</sup>
925
+ </UnitSymbol>
926
+ <UnitSymbol type='MathML'>
927
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
778
928
  <mrow>
779
- <mi mathvariant='normal'>C</mi>
929
+ <msup>
930
+ <mrow>
931
+ <mi mathvariant='normal'>kg</mi>
932
+ </mrow>
933
+ <mrow>
934
+ <mo>&#x2212;</mo>
935
+ <mn>2</mn>
936
+ </mrow>
937
+ </msup>
780
938
  </mrow>
781
- <mrow>
782
- <mo>&#x2212;</mo>
783
- <mn>3</mn>
784
- </mrow>
785
- </msup>
786
- </mrow>
787
- <mo>+</mo>
788
- <mn>2</mn>
789
- <mo rspace='thickmathspace'>&#x2062;</mo>
790
- <mrow xref='U_J/kg.K'>
791
- <mi mathvariant='normal'>J</mi>
792
- <mo>/</mo>
793
- <mi mathvariant='normal'>kg</mi>
794
- <mo>&#xB7;</mo>
795
- <mi mathvariant='normal'>K</mi>
796
- </mrow>
797
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu13.u27p10_3e-1/1.u5e-1/1' dimensionURL='#D_L2M0T-2Theta-1'>
798
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
799
- <UnitName xml:lang='en'>joule per kilogram kelvin</UnitName>
800
- <UnitSymbol type='HTML'>
801
- J&#xB7;kg
802
- <sup>&#x2212;1</sup>
803
- &#xB7;K
804
- <sup>&#x2212;1</sup>
805
- </UnitSymbol>
806
- <UnitSymbol type='MathML'>
807
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
808
- <mrow>
809
- <mi mathvariant='normal'>J</mi>
810
- <mo>&#xB7;</mo>
811
- <msup>
812
- <mrow>
813
- <mi mathvariant='normal'>kg</mi>
814
- </mrow>
815
- <mrow>
816
- <mo>&#x2212;</mo>
817
- <mn>1</mn>
818
- </mrow>
819
- </msup>
820
- <mo>&#xB7;</mo>
821
- <msup>
822
- <mrow>
823
- <mi mathvariant='normal'>K</mi>
824
- </mrow>
825
- <mrow>
826
- <mo>&#x2212;</mo>
827
- <mn>1</mn>
828
- </mrow>
829
- </msup>
830
- </mrow>
831
- </math>
832
- </UnitSymbol>
833
- <RootUnits>
834
- <EnumeratedRootUnit unit='joule'/>
835
- <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
836
- <EnumeratedRootUnit unit='kelvin' powerNumerator='-1'/>
837
- </RootUnits>
838
- </Unit>
839
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
840
- <PrefixName xml:lang='en'>kilo</PrefixName>
841
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
842
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
843
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
844
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
845
- </Prefix>
846
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd40'>
847
- <Length symbol='L' powerNumerator='2'/>
848
- <Time symbol='T' powerNumerator='-2'/>
849
- <ThermodynamicTemperature symbol='Theta' powerNumerator='-1'/>
850
- </Dimension>
851
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L2M0T-2Theta-1'>
852
- <Length symbol='L' powerNumerator='2'/>
853
- <Mass symbol='M' powerNumerator='0'/>
854
- <Time symbol='T' powerNumerator='-2'/>
855
- <ThermodynamicTemperature symbol='Theta' powerNumerator='-1'/>
856
- </Dimension>
857
- </math>
858
- OUTPUT
859
- end
860
-
861
- it "converts MathML to MatML + UnitsML" do
862
- input = <<~INPUT
863
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
864
- <mn>32</mn>
865
- <mo>+</mo>
866
- <mn>5</mn>
867
- <mo>&#xD7;</mo>
868
- <mn>7</mn>
869
- <mtext>unitsml(kg^-2)</mtext>
870
- </math>
871
- INPUT
872
- output = <<~OUTPUT
873
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
874
- <mn>32</mn>
875
- <mo>+</mo>
876
- <mn>5</mn>
877
- <mo>&#xD7;</mo>
878
- <mn>7</mn>
879
- <mo rspace='thickmathspace'>&#x2062;</mo>
880
- <mrow xref='U_kg-2'>
881
- <msup>
882
- <mrow>
883
- <mi mathvariant='normal'>kg</mi>
884
- </mrow>
885
- <mrow>
886
- <mo>&#x2212;</mo>
887
- <mn>2</mn>
888
- </mrow>
889
- </msup>
890
- </mrow>
891
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg-2' dimensionURL='#D_M-2'>
892
- <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
893
- <UnitName xml:lang='en'>kg^-2</UnitName>
894
- <UnitSymbol type='HTML'>
895
- kg
896
- <sup>&#x2212;2</sup>
897
- </UnitSymbol>
898
- <UnitSymbol type='MathML'>
899
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
900
- <mrow>
901
- <msup>
902
- <mrow>
903
- <mi mathvariant='normal'>kg</mi>
904
- </mrow>
905
- <mrow>
906
- <mo>&#x2212;</mo>
907
- <mn>2</mn>
908
- </mrow>
909
- </msup>
910
- </mrow>
911
- </math>
912
- </UnitSymbol>
913
- <RootUnits>
914
- <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-2'/>
915
- </RootUnits>
916
- </Unit>
917
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
918
- <PrefixName xml:lang='en'>kilo</PrefixName>
919
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
920
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
921
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
922
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
923
- </Prefix>
924
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M-2'>
925
- <Mass symbol='M' powerNumerator='-2'/>
926
- </Dimension>
927
- </math>
928
- OUTPUT
929
- expect(xmlpp(Asciimath2UnitsML::Conv.new().MathML2UnitsML(input).to_xml)).to be_equivalent_to xmlpp(output)
930
- expect(xmlpp(Asciimath2UnitsML::Conv.new().MathML2UnitsML(Nokogiri::XML(input)).to_xml)).to be_equivalent_to xmlpp(output)
939
+ </math>
940
+ </UnitSymbol>
941
+ <RootUnits>
942
+ <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-2'/>
943
+ </RootUnits>
944
+ </Unit>
945
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
946
+ <PrefixName xml:lang='en'>kilo</PrefixName>
947
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
948
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
949
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
950
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
951
+ </Prefix>
952
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M-2'>
953
+ <Mass symbol='M' powerNumerator='-2'/>
954
+ </Dimension>
955
+ </math>
956
+ OUTPUT
957
+ expect(xmlpp(Asciimath2UnitsML::Conv.new
958
+ .MathML2UnitsML(input).to_xml)).to be_equivalent_to xmlpp(output)
959
+ expect(xmlpp(Asciimath2UnitsML::Conv.new
960
+ .MathML2UnitsML(Nokogiri::XML(input)).to_xml))
961
+ .to be_equivalent_to xmlpp(output)
931
962
  end
932
963
 
933
964
  it "raises error for illegal unit" do
934
- expect{xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))}.to raise_error(Rsec::SyntaxError)
935
- 12 "unitsml(que?)"
965
+ input = <<~INPUT
966
+ 12 "unitsml(que?)"
936
967
  INPUT
968
+ expect { xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)) }
969
+ .to raise_error(Rsec::SyntaxError)
937
970
  end
938
971
 
939
972
  it "initialises multiplier" do
940
- expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: "\u00d7").Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
941
- 1 "unitsml(kg*s^-2)"
973
+ input = <<~INPUT
974
+ 1 "unitsml(kg*s^-2)"
942
975
  INPUT
943
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
944
- <mn>1</mn>
945
- <mo rspace='thickmathspace'>&#x2062;</mo>
946
- <mrow xref='U_kg.s-2'>
947
- <mi mathvariant='normal'>kg</mi>
948
- <mo>&#xD7;</mo>
949
- <msup>
950
- <mrow>
951
- <mi mathvariant='normal'>s</mi>
952
- </mrow>
953
- <mrow>
954
- <mo>&#x2212;</mo>
955
- <mn>2</mn>
956
- </mrow>
957
- </msup>
958
- </mrow>
959
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
960
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
961
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
962
- <UnitSymbol type='HTML'>
963
- kg&#xD7;s
964
- <sup>&#x2212;2</sup>
965
- </UnitSymbol>
966
- <UnitSymbol type='MathML'>
967
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
968
- <mrow>
969
- <mi mathvariant='normal'>kg</mi>
970
- <mo>&#xD7;</mo>
971
- <msup>
972
- <mrow>
973
- <mi mathvariant='normal'>s</mi>
974
- </mrow>
975
- <mrow>
976
- <mo>&#x2212;</mo>
977
- <mn>2</mn>
978
- </mrow>
979
- </msup>
980
- </mrow>
981
- </math>
982
- </UnitSymbol>
983
- <RootUnits>
984
- <EnumeratedRootUnit unit='gram' prefix='k'/>
985
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
986
- </RootUnits>
987
- </Unit>
988
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
989
- <PrefixName xml:lang='en'>kilo</PrefixName>
990
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
991
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
992
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
993
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
994
- </Prefix>
995
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
996
- <Mass symbol='M' powerNumerator='1'/>
997
- <Time symbol='T' powerNumerator='-2'/>
998
- </Dimension>
999
- </math>
1000
- OUTPUT
1001
- expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :space).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1002
- 1 "unitsml(kg*s^-2)"
976
+ expect(xmlpp(Asciimath2UnitsML::Conv
977
+ .new(multiplier: "\u00d7")
978
+ .Asciimath2UnitsML(input))).to be_equivalent_to xmlpp(<<~OUTPUT)
979
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
980
+ <mn>1</mn>
981
+ <mo rspace='thickmathspace'>&#x2062;</mo>
982
+ <mrow xref='U_kg.s-2'>
983
+ <mi mathvariant='normal'>kg</mi>
984
+ <mo>&#xD7;</mo>
985
+ <msup>
986
+ <mrow>
987
+ <mi mathvariant='normal'>s</mi>
988
+ </mrow>
989
+ <mrow>
990
+ <mo>&#x2212;</mo>
991
+ <mn>2</mn>
992
+ </mrow>
993
+ </msup>
994
+ </mrow>
995
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
996
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
997
+ <UnitName xml:lang='en'>kg*s^-2</UnitName>
998
+ <UnitSymbol type='HTML'>
999
+ kg&#xD7;s
1000
+ <sup>&#x2212;2</sup>
1001
+ </UnitSymbol>
1002
+ <UnitSymbol type='MathML'>
1003
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1004
+ <mrow>
1005
+ <mi mathvariant='normal'>kg</mi>
1006
+ <mo>&#xD7;</mo>
1007
+ <msup>
1008
+ <mrow>
1009
+ <mi mathvariant='normal'>s</mi>
1010
+ </mrow>
1011
+ <mrow>
1012
+ <mo>&#x2212;</mo>
1013
+ <mn>2</mn>
1014
+ </mrow>
1015
+ </msup>
1016
+ </mrow>
1017
+ </math>
1018
+ </UnitSymbol>
1019
+ <RootUnits>
1020
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
1021
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1022
+ </RootUnits>
1023
+ </Unit>
1024
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1025
+ <PrefixName xml:lang='en'>kilo</PrefixName>
1026
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1027
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
1028
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1029
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
1030
+ </Prefix>
1031
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1032
+ <Mass symbol='M' powerNumerator='1'/>
1033
+ <Time symbol='T' powerNumerator='-2'/>
1034
+ </Dimension>
1035
+ </math>
1036
+ OUTPUT
1037
+ input = <<~INPUT
1038
+ 1 "unitsml(kg*s^-2)"
1003
1039
  INPUT
1004
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1005
- <mn>1</mn>
1006
- <mo rspace='thickmathspace'>&#x2062;</mo>
1007
- <mrow xref='U_kg.s-2'>
1008
- <mi mathvariant='normal'>kg</mi>
1009
- <mo rspace='thickmathspace'>&#x2062;</mo>
1010
- <msup>
1011
- <mrow>
1012
- <mi mathvariant='normal'>s</mi>
1013
- </mrow>
1014
- <mrow>
1015
- <mo>&#x2212;</mo>
1016
- <mn>2</mn>
1040
+ expect(xmlpp(Asciimath2UnitsML::Conv
1041
+ .new(multiplier: :space)
1042
+ .Asciimath2UnitsML(input))).to be_equivalent_to xmlpp(<<~OUTPUT)
1043
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1044
+ <mn>1</mn>
1045
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1046
+ <mrow xref='U_kg.s-2'>
1047
+ <mi mathvariant='normal'>kg</mi>
1048
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1049
+ <msup>
1050
+ <mrow>
1051
+ <mi mathvariant='normal'>s</mi>
1052
+ </mrow>
1053
+ <mrow>
1054
+ <mo>&#x2212;</mo>
1055
+ <mn>2</mn>
1056
+ </mrow>
1057
+ </msup>
1017
1058
  </mrow>
1018
- </msup>
1019
- </mrow>
1020
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1021
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1022
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
1023
- <UnitSymbol type='HTML'>
1024
- kg&#xA0;s
1025
- <sup>&#x2212;2</sup>
1026
- </UnitSymbol>
1027
- <UnitSymbol type='MathML'>
1028
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1029
- <mrow>
1030
- <mi mathvariant='normal'>kg</mi>
1031
- <mo rspace='thickmathspace'>&#x2062;</mo>
1032
- <msup>
1033
- <mrow>
1034
- <mi mathvariant='normal'>s</mi>
1035
- </mrow>
1059
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1060
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1061
+ <UnitName xml:lang='en'>kg*s^-2</UnitName>
1062
+ <UnitSymbol type='HTML'>
1063
+ kg&#xA0;s
1064
+ <sup>&#x2212;2</sup>
1065
+ </UnitSymbol>
1066
+ <UnitSymbol type='MathML'>
1067
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1036
1068
  <mrow>
1037
- <mo>&#x2212;</mo>
1038
- <mn>2</mn>
1069
+ <mi mathvariant='normal'>kg</mi>
1070
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1071
+ <msup>
1072
+ <mrow>
1073
+ <mi mathvariant='normal'>s</mi>
1074
+ </mrow>
1075
+ <mrow>
1076
+ <mo>&#x2212;</mo>
1077
+ <mn>2</mn>
1078
+ </mrow>
1079
+ </msup>
1039
1080
  </mrow>
1040
- </msup>
1041
- </mrow>
1042
- </math>
1043
- </UnitSymbol>
1044
- <RootUnits>
1045
- <EnumeratedRootUnit unit='gram' prefix='k'/>
1046
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1047
- </RootUnits>
1048
- </Unit>
1049
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1050
- <PrefixName xml:lang='en'>kilo</PrefixName>
1051
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1052
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
1053
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1054
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
1055
- </Prefix>
1056
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1057
- <Mass symbol='M' powerNumerator='1'/>
1058
- <Time symbol='T' powerNumerator='-2'/>
1059
- </Dimension>
1060
- </math>
1061
- OUTPUT
1062
- expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :nospace).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1063
- 1 "unitsml(kg*s^-2)"
1081
+ </math>
1082
+ </UnitSymbol>
1083
+ <RootUnits>
1084
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
1085
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1086
+ </RootUnits>
1087
+ </Unit>
1088
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1089
+ <PrefixName xml:lang='en'>kilo</PrefixName>
1090
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1091
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
1092
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1093
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
1094
+ </Prefix>
1095
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1096
+ <Mass symbol='M' powerNumerator='1'/>
1097
+ <Time symbol='T' powerNumerator='-2'/>
1098
+ </Dimension>
1099
+ </math>
1100
+ OUTPUT
1101
+ input = <<~INPUT
1102
+ 1 "unitsml(kg*s^-2)"
1064
1103
  INPUT
1065
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1066
- <mn>1</mn>
1067
- <mo rspace='thickmathspace'>&#x2062;</mo>
1068
- <mrow xref='U_kg.s-2'>
1069
- <mi mathvariant='normal'>kg</mi>
1070
- <mo>&#x2062;</mo>
1071
- <msup>
1072
- <mrow>
1073
- <mi mathvariant='normal'>s</mi>
1074
- </mrow>
1075
- <mrow>
1076
- <mo>&#x2212;</mo>
1077
- <mn>2</mn>
1078
- </mrow>
1079
- </msup>
1080
- </mrow>
1081
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1082
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1083
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
1084
- <UnitSymbol type='HTML'>
1085
- kgs
1086
- <sup>&#x2212;2</sup>
1087
- </UnitSymbol>
1088
- <UnitSymbol type='MathML'>
1089
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1090
- <mrow>
1091
- <mi mathvariant='normal'>kg</mi>
1092
- <mo>&#x2062;</mo>
1093
- <msup>
1094
- <mrow>
1095
- <mi mathvariant='normal'>s</mi>
1096
- </mrow>
1097
- <mrow>
1098
- <mo>&#x2212;</mo>
1099
- <mn>2</mn>
1100
- </mrow>
1101
- </msup>
1102
- </mrow>
1103
- </math>
1104
- </UnitSymbol>
1105
- <RootUnits>
1106
- <EnumeratedRootUnit unit='gram' prefix='k'/>
1107
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1108
- </RootUnits>
1109
- </Unit>
1110
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1111
- <PrefixName xml:lang='en'>kilo</PrefixName>
1112
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1113
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
1114
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1115
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
1116
- </Prefix>
1117
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1118
- <Mass symbol='M' powerNumerator='1'/>
1119
- <Time symbol='T' powerNumerator='-2'/>
1120
- </Dimension>
1121
- </math>
1122
- OUTPUT
1104
+ expect(xmlpp(Asciimath2UnitsML::Conv
1105
+ .new(multiplier: :nospace)
1106
+ .Asciimath2UnitsML(input))).to be_equivalent_to xmlpp(<<~OUTPUT)
1107
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1108
+ <mn>1</mn>
1109
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1110
+ <mrow xref='U_kg.s-2'>
1111
+ <mi mathvariant='normal'>kg</mi>
1112
+ <mo>&#x2062;</mo>
1113
+ <msup>
1114
+ <mrow>
1115
+ <mi mathvariant='normal'>s</mi>
1116
+ </mrow>
1117
+ <mrow>
1118
+ <mo>&#x2212;</mo>
1119
+ <mn>2</mn>
1120
+ </mrow>
1121
+ </msup>
1122
+ </mrow>
1123
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1124
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1125
+ <UnitName xml:lang='en'>kg*s^-2</UnitName>
1126
+ <UnitSymbol type='HTML'>
1127
+ kgs
1128
+ <sup>&#x2212;2</sup>
1129
+ </UnitSymbol>
1130
+ <UnitSymbol type='MathML'>
1131
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1132
+ <mrow>
1133
+ <mi mathvariant='normal'>kg</mi>
1134
+ <mo>&#x2062;</mo>
1135
+ <msup>
1136
+ <mrow>
1137
+ <mi mathvariant='normal'>s</mi>
1138
+ </mrow>
1139
+ <mrow>
1140
+ <mo>&#x2212;</mo>
1141
+ <mn>2</mn>
1142
+ </mrow>
1143
+ </msup>
1144
+ </mrow>
1145
+ </math>
1146
+ </UnitSymbol>
1147
+ <RootUnits>
1148
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
1149
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1150
+ </RootUnits>
1151
+ </Unit>
1152
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1153
+ <PrefixName xml:lang='en'>kilo</PrefixName>
1154
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1155
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
1156
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1157
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
1158
+ </Prefix>
1159
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1160
+ <Mass symbol='M' powerNumerator='1'/>
1161
+ <Time symbol='T' powerNumerator='-2'/>
1162
+ </Dimension>
1163
+ </math>
1164
+ OUTPUT
1123
1165
  end
1124
1166
 
1125
1167
  it "deals with dimension decomposition with like units" do
1126
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1127
- 9 "unitsml(mW*cm^(-2))"
1128
- INPUT
1129
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1130
- <mn>9</mn>
1131
- <mo rspace='thickmathspace'>&#x2062;</mo>
1132
- <mrow xref='U_mW.cm-2'>
1133
- <mi mathvariant='normal'>mW</mi>
1134
- <mo>&#xB7;</mo>
1135
- <msup>
1136
- <mrow>
1137
- <mi mathvariant='normal'>cm</mi>
1138
- </mrow>
1139
- <mrow>
1140
- <mo>&#x2212;</mo>
1141
- <mn>2</mn>
1142
- </mrow>
1143
- </msup>
1144
- </mrow>
1145
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mW.cm-2'>
1146
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1147
- <UnitName xml:lang='en'>mW*cm^-2</UnitName>
1148
- <UnitSymbol type='HTML'>
1149
- mW&#xB7;cm
1150
- <sup>&#x2212;2</sup>
1151
- </UnitSymbol>
1152
- <UnitSymbol type='MathML'>
1153
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1154
- <mrow>
1155
- <mi mathvariant='normal'>mW</mi>
1156
- <mo>&#xB7;</mo>
1157
- <msup>
1158
- <mrow>
1159
- <mi mathvariant='normal'>cm</mi>
1160
- </mrow>
1161
- <mrow>
1162
- <mo>&#x2212;</mo>
1163
- <mn>2</mn>
1164
- </mrow>
1165
- </msup>
1166
- </mrow>
1167
- </math>
1168
- </UnitSymbol>
1169
- <RootUnits>
1170
- <EnumeratedRootUnit unit='watt' prefix='m'/>
1171
- <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1172
- </RootUnits>
1173
- </Unit>
1174
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
1175
- <PrefixName xml:lang='en'>milli</PrefixName>
1176
- <PrefixSymbol type='ASCII'>m</PrefixSymbol>
1177
- <PrefixSymbol type='unicode'>m</PrefixSymbol>
1178
- <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
1179
- <PrefixSymbol type='HTML'>m</PrefixSymbol>
1180
- </Prefix>
1181
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1182
- <PrefixName xml:lang='en'>centi</PrefixName>
1183
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1184
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1185
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1186
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1187
- </Prefix>
1188
- </math>
1189
- OUTPUT
1168
+ input = <<~INPUT
1169
+ 9 "unitsml(mW*cm^(-2))"
1170
+ INPUT
1171
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
1172
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
1173
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1174
+ <mn>9</mn>
1175
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1176
+ <mrow xref='U_mW.cm-2'>
1177
+ <mi mathvariant='normal'>mW</mi>
1178
+ <mo>&#x22C5;</mo>
1179
+ <msup>
1180
+ <mrow>
1181
+ <mi mathvariant='normal'>cm</mi>
1182
+ </mrow>
1183
+ <mrow>
1184
+ <mo>&#x2212;</mo>
1185
+ <mn>2</mn>
1186
+ </mrow>
1187
+ </msup>
1188
+ </mrow>
1189
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mW.cm-2'>
1190
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1191
+ <UnitName xml:lang='en'>mW*cm^-2</UnitName>
1192
+ <UnitSymbol type='HTML'>
1193
+ mW&#x22C5;cm
1194
+ <sup>&#x2212;2</sup>
1195
+ </UnitSymbol>
1196
+ <UnitSymbol type='MathML'>
1197
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1198
+ <mrow>
1199
+ <mi mathvariant='normal'>mW</mi>
1200
+ <mo>&#x22C5;</mo>
1201
+ <msup>
1202
+ <mrow>
1203
+ <mi mathvariant='normal'>cm</mi>
1204
+ </mrow>
1205
+ <mrow>
1206
+ <mo>&#x2212;</mo>
1207
+ <mn>2</mn>
1208
+ </mrow>
1209
+ </msup>
1210
+ </mrow>
1211
+ </math>
1212
+ </UnitSymbol>
1213
+ <RootUnits>
1214
+ <EnumeratedRootUnit unit='watt' prefix='m'/>
1215
+ <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1216
+ </RootUnits>
1217
+ </Unit>
1218
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
1219
+ <PrefixName xml:lang='en'>milli</PrefixName>
1220
+ <PrefixSymbol type='ASCII'>m</PrefixSymbol>
1221
+ <PrefixSymbol type='unicode'>m</PrefixSymbol>
1222
+ <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
1223
+ <PrefixSymbol type='HTML'>m</PrefixSymbol>
1224
+ </Prefix>
1225
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1226
+ <PrefixName xml:lang='en'>centi</PrefixName>
1227
+ <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1228
+ <PrefixSymbol type='unicode'>c</PrefixSymbol>
1229
+ <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1230
+ <PrefixSymbol type='HTML'>c</PrefixSymbol>
1231
+ </Prefix>
1232
+ </math>
1233
+ OUTPUT
1190
1234
  end
1191
1235
 
1192
1236
  it "deals with quantity input" do
1193
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1194
- 9 "unitsml(m, quantity: NISTq103)"
1195
- INPUT
1196
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1197
- <mn>9</mn>
1198
- <mo rspace='thickmathspace'>&#x2062;</mo>
1199
- <mrow xref='U_NISTu1'>
1200
- <mi mathvariant='normal'>m</mi>
1201
- </mrow>
1202
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1203
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1204
- <UnitName xml:lang='en'>meter</UnitName>
1205
- <UnitSymbol type='HTML'>m</UnitSymbol>
1206
- <UnitSymbol type='MathML'>
1207
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1208
- <mrow>
1209
- <mi mathvariant='normal'>m</mi>
1210
- </mrow>
1211
- </math>
1212
- </UnitSymbol>
1213
- </Unit>
1214
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1215
- <Length symbol='L' powerNumerator='1'/>
1216
- </Dimension>
1217
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq103' dimensionURL='#NISTd1' quantityType='base'>
1218
- <QuantityName xml:lang='en-US'>position vector</QuantityName>
1219
- </Quantity>
1220
- </math>
1221
- OUTPUT
1222
- end
1237
+ input = <<~INPUT
1238
+ 9 "unitsml(m, quantity: NISTq103)"
1239
+ INPUT
1240
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
1241
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
1242
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1243
+ <mn>9</mn>
1244
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1245
+ <mrow xref='U_NISTu1'>
1246
+ <mi mathvariant='normal'>m</mi>
1247
+ </mrow>
1248
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1249
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1250
+ <UnitName xml:lang='en'>meter</UnitName>
1251
+ <UnitSymbol type='HTML'>m</UnitSymbol>
1252
+ <UnitSymbol type='MathML'>
1253
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1254
+ <mrow>
1255
+ <mi mathvariant='normal'>m</mi>
1256
+ </mrow>
1257
+ </math>
1258
+ </UnitSymbol>
1259
+ </Unit>
1260
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1261
+ <Length symbol='L' powerNumerator='1'/>
1262
+ </Dimension>
1263
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq103' dimensionURL='#NISTd1' quantityType='base'>
1264
+ <QuantityName xml:lang='en-US'>position vector</QuantityName>
1265
+ </Quantity>
1266
+ </math>
1267
+ OUTPUT
1268
+ end
1223
1269
 
1224
1270
  it "deals with name input" do
1225
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1226
- 9 "unitsml(cal_th/cm^2, name: langley)"
1227
- INPUT
1228
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1229
- <mn>9</mn>
1230
- <mo rspace='thickmathspace'>&#x2062;</mo>
1231
- <mrow xref='U_cal_th/cm2'>
1232
- <msub>
1233
- <mrow>
1234
- <mi mathvariant='normal'>cal</mi>
1235
- </mrow>
1236
- <mrow>
1237
- <mi mathvariant='normal'>th</mi>
1238
- </mrow>
1239
- </msub>
1240
- <mo>/</mo>
1241
- <msup>
1242
- <mrow>
1243
- <mi mathvariant='normal'>cm</mi>
1244
- </mrow>
1245
- <mrow>
1246
- <mn>2</mn>
1247
- </mrow>
1248
- </msup>
1249
- </mrow>
1250
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cal_th.cm-2'>
1251
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
1252
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1253
- <UnitName xml:lang='en'>langley</UnitName>
1254
- <UnitSymbol type='HTML'>
1255
- cal
1256
- <sub>th</sub>
1257
- &#xB7;cm
1258
- <sup>&#x2212;2</sup>
1259
- </UnitSymbol>
1260
- <UnitSymbol type='MathML'>
1261
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1262
- <mrow>
1263
- <msub>
1264
- <mrow>
1265
- <mi mathvariant='normal'>cal</mi>
1266
- </mrow>
1267
- <mrow>
1268
- <mi mathvariant='normal'>th</mi>
1269
- </mrow>
1270
- </msub>
1271
- <mo>&#xB7;</mo>
1272
- <msup>
1273
- <mrow>
1274
- <mi mathvariant='normal'>cm</mi>
1275
- </mrow>
1276
- <mrow>
1277
- <mo>&#x2212;</mo>
1278
- <mn>2</mn>
1279
- </mrow>
1280
- </msup>
1281
- </mrow>
1282
- </math>
1283
- </UnitSymbol>
1284
- <RootUnits>
1285
- <EnumeratedRootUnit unit='thermochemical calorie'/>
1286
- <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1287
- </RootUnits>
1288
- </Unit>
1289
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1290
- <PrefixName xml:lang='en'>centi</PrefixName>
1291
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1292
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1293
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1294
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1295
- </Prefix>
1296
- </math>
1297
- OUTPUT
1298
- end
1299
-
1300
- it "deals with symbol input" do
1301
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1302
- 9 "unitsml(m, symbol: La)" + 10 "unitsml(cm*s^-2, symbol: cm cdot s^-2)"
1303
- INPUT
1304
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1305
- <mn>9</mn>
1306
- <mo rspace='thickmathspace'>&#x2062;</mo>
1307
- <mrow xref='U_NISTu1'>
1308
- <math>
1309
- <mi mathvariant='normal'>L</mi>
1310
- <mi mathvariant='normal'>a</mi>
1311
- </math>
1312
- </mrow>
1313
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1314
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1315
- <UnitName xml:lang='en'>meter</UnitName>
1316
- <UnitSymbol type='HTML'>m</UnitSymbol>
1317
- <UnitSymbol type='MathML'>
1318
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1319
- <mrow>
1320
- <mi mathvariant='normal'>m</mi>
1321
- </mrow>
1322
- </math>
1323
- </UnitSymbol>
1324
- </Unit>
1325
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1326
- <Length symbol='L' powerNumerator='1'/>
1327
- </Dimension>
1328
- <mo>+</mo>
1329
- <mn>10</mn>
1330
- <mo rspace='thickmathspace'>&#x2062;</mo>
1331
- <mrow xref='U_cm.s-2'>
1332
- <math>
1333
- <mi mathvariant='normal'>c</mi>
1334
- <mi mathvariant='normal'>m</mi>
1335
- <mo>&#x22C5;</mo>
1336
- <msup>
1337
- <mrow>
1338
- <mi mathvariant='normal'>s</mi>
1339
- </mrow>
1340
- <mrow>
1341
- <mo>&#x2212;</mo>
1342
- </mrow>
1343
- </msup>
1344
- <mn>2</mn>
1345
- </math>
1346
- </mrow>
1347
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1348
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1349
- <UnitName xml:lang='en'>cm*s^-2</UnitName>
1350
- <UnitSymbol type='HTML'>
1351
- cm&#xB7;s
1352
- <sup>&#x2212;2</sup>
1353
- </UnitSymbol>
1354
- <UnitSymbol type='MathML'>
1355
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1356
- <mrow>
1357
- <mi mathvariant='normal'>cm</mi>
1358
- <mo>&#xB7;</mo>
1359
- <msup>
1360
- <mrow>
1361
- <mi mathvariant='normal'>s</mi>
1362
- </mrow>
1363
- <mrow>
1364
- <mo>&#x2212;</mo>
1365
- <mn>2</mn>
1366
- </mrow>
1367
- </msup>
1368
- </mrow>
1369
- </math>
1370
- </UnitSymbol>
1371
- <RootUnits>
1372
- <EnumeratedRootUnit unit='meter' prefix='c'/>
1373
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1374
- </RootUnits>
1375
- </Unit>
1376
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1377
- <PrefixName xml:lang='en'>centi</PrefixName>
1378
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1379
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1380
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1381
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1382
- </Prefix>
1383
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1384
- <Length symbol='L' powerNumerator='1'/>
1385
- <Time symbol='T' powerNumerator='-2'/>
1386
- </Dimension>
1387
- </math>
1388
- OUTPUT
1389
- end
1271
+ input = <<~INPUT
1272
+ 9 "unitsml(cal_th/cm^2, name: langley)"
1273
+ INPUT
1274
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
1275
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
1276
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1277
+ <mn>9</mn>
1278
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1279
+ <mrow xref='U_cal_th/cm2'>
1280
+ <msub>
1281
+ <mrow>
1282
+ <mi mathvariant='normal'>cal</mi>
1283
+ </mrow>
1284
+ <mrow>
1285
+ <mi mathvariant='normal'>th</mi>
1286
+ </mrow>
1287
+ </msub>
1288
+ <mo>/</mo>
1289
+ <msup>
1290
+ <mrow>
1291
+ <mi mathvariant='normal'>cm</mi>
1292
+ </mrow>
1293
+ <mrow>
1294
+ <mn>2</mn>
1295
+ </mrow>
1296
+ </msup>
1297
+ </mrow>
1298
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cal_th.cm-2'>
1299
+ <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
1300
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1301
+ <UnitName xml:lang='en'>langley</UnitName>
1302
+ <UnitSymbol type='HTML'>
1303
+ cal
1304
+ <sub>th</sub>
1305
+ &#x22C5;cm
1306
+ <sup>&#x2212;2</sup>
1307
+ </UnitSymbol>
1308
+ <UnitSymbol type='MathML'>
1309
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1310
+ <mrow>
1311
+ <msub>
1312
+ <mrow>
1313
+ <mi mathvariant='normal'>cal</mi>
1314
+ </mrow>
1315
+ <mrow>
1316
+ <mi mathvariant='normal'>th</mi>
1317
+ </mrow>
1318
+ </msub>
1319
+ <mo>&#x22C5;</mo>
1320
+ <msup>
1321
+ <mrow>
1322
+ <mi mathvariant='normal'>cm</mi>
1323
+ </mrow>
1324
+ <mrow>
1325
+ <mo>&#x2212;</mo>
1326
+ <mn>2</mn>
1327
+ </mrow>
1328
+ </msup>
1329
+ </mrow>
1330
+ </math>
1331
+ </UnitSymbol>
1332
+ <RootUnits>
1333
+ <EnumeratedRootUnit unit='thermochemical calorie'/>
1334
+ <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1335
+ </RootUnits>
1336
+ </Unit>
1337
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1338
+ <PrefixName xml:lang='en'>centi</PrefixName>
1339
+ <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1340
+ <PrefixSymbol type='unicode'>c</PrefixSymbol>
1341
+ <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1342
+ <PrefixSymbol type='HTML'>c</PrefixSymbol>
1343
+ </Prefix>
1344
+ </math>
1345
+ OUTPUT
1346
+ end
1390
1347
 
1391
- it "deals with multiplier input" do
1392
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1393
- 10 "unitsml(cm*s^-2, multiplier: xx)"
1394
- INPUT
1395
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1396
- <mn>10</mn>
1397
- <mo rspace='thickmathspace'>&#x2062;</mo>
1398
- <mrow xref='U_cm.s-2'>
1399
- <mi mathvariant='normal'>cm</mi>
1400
- <mo>xx</mo>
1401
- <msup>
1402
- <mrow>
1403
- <mi mathvariant='normal'>s</mi>
1404
- </mrow>
1405
- <mrow>
1406
- <mo>&#x2212;</mo>
1407
- <mn>2</mn>
1408
- </mrow>
1409
- </msup>
1410
- </mrow>
1411
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1412
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1413
- <UnitName xml:lang='en'>cm*s^-2</UnitName>
1414
- <UnitSymbol type='HTML'>
1415
- cm&#xB7;s
1416
- <sup>&#x2212;2</sup>
1417
- </UnitSymbol>
1418
- <UnitSymbol type='MathML'>
1419
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1420
- <mrow>
1421
- <mi mathvariant='normal'>cm</mi>
1422
- <mo>&#xB7;</mo>
1423
- <msup>
1424
- <mrow>
1425
- <mi mathvariant='normal'>s</mi>
1426
- </mrow>
1427
- <mrow>
1428
- <mo>&#x2212;</mo>
1348
+ it "deals with symbol input" do
1349
+ input = <<~INPUT
1350
+ 9 "unitsml(m, symbol: La)" + 10 "unitsml(cm*s^-2, symbol: cm cdot s^-2)"
1351
+ INPUT
1352
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
1353
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
1354
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1355
+ <mn>9</mn>
1356
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1357
+ <mrow xref='U_NISTu1'>
1358
+ <math>
1359
+ <mi mathvariant='normal'>L</mi>
1360
+ <mi mathvariant='normal'>a</mi>
1361
+ </math>
1362
+ </mrow>
1363
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1364
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1365
+ <UnitName xml:lang='en'>meter</UnitName>
1366
+ <UnitSymbol type='HTML'>m</UnitSymbol>
1367
+ <UnitSymbol type='MathML'>
1368
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1369
+ <mrow>
1370
+ <mi mathvariant='normal'>m</mi>
1371
+ </mrow>
1372
+ </math>
1373
+ </UnitSymbol>
1374
+ </Unit>
1375
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1376
+ <Length symbol='L' powerNumerator='1'/>
1377
+ </Dimension>
1378
+ <mo>+</mo>
1379
+ <mn>10</mn>
1380
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1381
+ <mrow xref='U_cm.s-2'>
1382
+ <math>
1383
+ <mi mathvariant='normal'>c</mi>
1384
+ <mi mathvariant='normal'>m</mi>
1385
+ <mo>&#x22C5;</mo>
1386
+ <msup>
1387
+ <mrow>
1388
+ <mi mathvariant='normal'>s</mi>
1389
+ </mrow>
1390
+ <mrow>
1391
+ <mo>&#x2212;</mo>
1392
+ </mrow>
1393
+ </msup>
1429
1394
  <mn>2</mn>
1430
- </mrow>
1431
- </msup>
1432
- </mrow>
1433
- </math>
1434
- </UnitSymbol>
1435
- <RootUnits>
1436
- <EnumeratedRootUnit unit='meter' prefix='c'/>
1437
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1438
- </RootUnits>
1439
- </Unit>
1440
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1441
- <PrefixName xml:lang='en'>centi</PrefixName>
1442
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1443
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1444
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1445
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1446
- </Prefix>
1447
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1448
- <Length symbol='L' powerNumerator='1'/>
1449
- <Time symbol='T' powerNumerator='-2'/>
1450
- </Dimension>
1451
- </math>
1452
- OUTPUT
1453
- end
1395
+ </math>
1396
+ </mrow>
1397
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1398
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1399
+ <UnitName xml:lang='en'>cm*s^-2</UnitName>
1400
+ <UnitSymbol type='HTML'>
1401
+ cm&#x22C5;s
1402
+ <sup>&#x2212;2</sup>
1403
+ </UnitSymbol>
1404
+ <UnitSymbol type='MathML'>
1405
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1406
+ <mrow>
1407
+ <mi mathvariant='normal'>cm</mi>
1408
+ <mo>&#x22C5;</mo>
1409
+ <msup>
1410
+ <mrow>
1411
+ <mi mathvariant='normal'>s</mi>
1412
+ </mrow>
1413
+ <mrow>
1414
+ <mo>&#x2212;</mo>
1415
+ <mn>2</mn>
1416
+ </mrow>
1417
+ </msup>
1418
+ </mrow>
1419
+ </math>
1420
+ </UnitSymbol>
1421
+ <RootUnits>
1422
+ <EnumeratedRootUnit unit='meter' prefix='c'/>
1423
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1424
+ </RootUnits>
1425
+ </Unit>
1426
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1427
+ <PrefixName xml:lang='en'>centi</PrefixName>
1428
+ <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1429
+ <PrefixSymbol type='unicode'>c</PrefixSymbol>
1430
+ <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1431
+ <PrefixSymbol type='HTML'>c</PrefixSymbol>
1432
+ </Prefix>
1433
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1434
+ <Length symbol='L' powerNumerator='1'/>
1435
+ <Time symbol='T' powerNumerator='-2'/>
1436
+ </Dimension>
1437
+ </math>
1438
+ OUTPUT
1439
+ end
1440
+
1441
+ it "deals with multiplier input" do
1442
+ input = <<~INPUT
1443
+ 10 "unitsml(cm*s^-2, multiplier: xx)"
1444
+ INPUT
1445
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
1446
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
1447
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1448
+ <mn>10</mn>
1449
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1450
+ <mrow xref='U_cm.s-2'>
1451
+ <mi mathvariant='normal'>cm</mi>
1452
+ <mo>xx</mo>
1453
+ <msup>
1454
+ <mrow>
1455
+ <mi mathvariant='normal'>s</mi>
1456
+ </mrow>
1457
+ <mrow>
1458
+ <mo>&#x2212;</mo>
1459
+ <mn>2</mn>
1460
+ </mrow>
1461
+ </msup>
1462
+ </mrow>
1463
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1464
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1465
+ <UnitName xml:lang='en'>cm*s^-2</UnitName>
1466
+ <UnitSymbol type='HTML'>
1467
+ cm&#x22C5;s
1468
+ <sup>&#x2212;2</sup>
1469
+ </UnitSymbol>
1470
+ <UnitSymbol type='MathML'>
1471
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1472
+ <mrow>
1473
+ <mi mathvariant='normal'>cm</mi>
1474
+ <mo>&#x22C5;</mo>
1475
+ <msup>
1476
+ <mrow>
1477
+ <mi mathvariant='normal'>s</mi>
1478
+ </mrow>
1479
+ <mrow>
1480
+ <mo>&#x2212;</mo>
1481
+ <mn>2</mn>
1482
+ </mrow>
1483
+ </msup>
1484
+ </mrow>
1485
+ </math>
1486
+ </UnitSymbol>
1487
+ <RootUnits>
1488
+ <EnumeratedRootUnit unit='meter' prefix='c'/>
1489
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1490
+ </RootUnits>
1491
+ </Unit>
1492
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1493
+ <PrefixName xml:lang='en'>centi</PrefixName>
1494
+ <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1495
+ <PrefixSymbol type='unicode'>c</PrefixSymbol>
1496
+ <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1497
+ <PrefixSymbol type='HTML'>c</PrefixSymbol>
1498
+ </Prefix>
1499
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1500
+ <Length symbol='L' powerNumerator='1'/>
1501
+ <Time symbol='T' powerNumerator='-2'/>
1502
+ </Dimension>
1503
+ </math>
1504
+ OUTPUT
1505
+ end
1454
1506
 
1507
+ it "deals with dimensions" do
1508
+ input = <<~INPUT
1509
+ "unitsml(dim_Theta*dim_L^2)"
1510
+ INPUT
1511
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
1512
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
1513
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1514
+ <mrow xref='U_dim_Theta.dim_L2'>
1515
+ <mi mathvariant='sans-serif'>&#x398;</mi>
1516
+ <mo>&#x22C5;</mo>
1517
+ <msup>
1518
+ <mrow>
1519
+ <mi mathvariant='sans-serif'>L</mi>
1520
+ </mrow>
1521
+ <mrow>
1522
+ <mn>2</mn>
1523
+ </mrow>
1524
+ </msup>
1525
+ </mrow>
1526
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L2Theta'>
1527
+ <Length symbol='L' powerNumerator='2'/>
1528
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
1529
+ </Dimension>
1530
+ </math>
1531
+ OUTPUT
1532
+ end
1455
1533
  end