asciimath2unitsml 0.3.1 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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