asciimath2unitsml 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/spec/conv_spec.rb CHANGED
@@ -2,889 +2,917 @@ 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)
5
+ input = <<~INPUT
6
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>&#x22C5;</mo>
15
- <msup>
16
- <mrow>
17
- <mi mathvariant='normal'>s</mi>
18
- </mrow>
19
- <mrow>
20
- <mo>&#x2212;</mo>
21
- <mn>2</mn>
22
- </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&#x22C5;s
30
- <sup>&#x2212;2</sup>
31
- </UnitSymbol>
32
- <UnitSymbol type='MathML'>
33
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
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>
34
18
  <mrow>
35
- <mi mathvariant='normal'>mm</mi>
36
- <mo>&#x22C5;</mo>
37
- <msup>
38
- <mrow>
39
- <mi mathvariant='normal'>s</mi>
40
- </mrow>
41
- <mrow>
42
- <mo>&#x2212;</mo>
43
- <mn>2</mn>
44
- </mrow>
45
- </msup>
19
+ <mi mathvariant='normal'>s</mi>
46
20
  </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
21
+ <mrow>
22
+ <mo>&#x2212;</mo>
23
+ <mn>2</mn>
24
+ </mrow>
25
+ </msup>
26
+ </mrow>
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'>
36
+ <mrow>
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>
48
+ </mrow>
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)
72
+ input = <<~INPUT
71
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'>
75
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
76
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
77
+ <?xml version='1.0'?>
85
78
  <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
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
107
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)
114
+ input = <<~INPUT
111
115
  1 "unitsml(degK)" + 1 "unitsml(prime)" + ii(theta) = s//r "unitsml(rad)" + 10^(12) "unitsml(Hz)"
112
116
  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>
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>
193
124
  </mrow>
194
- <mrow>
195
- <mn>12</mn>
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>
196
148
  </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
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
222
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)
231
+ input = <<~INPUT
226
232
  8 "unitsml(kg)" cdot "unitsml(m)"
227
233
  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
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)
294
+ input = <<~INPUT
287
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'>
297
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)))
298
+ .to be_equivalent_to xmlpp(<<~OUTPUT)
302
299
  <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
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)
329
+ input = <<~INPUT
320
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)
391
+ input = <<~INPUT
380
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)
427
+ input = <<~INPUT
414
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>&#x22C5;</mo>
422
- <msup>
423
- <mrow>
424
- <mi mathvariant='normal'>s</mi>
425
- </mrow>
426
- <mrow>
427
- <mo>&#x2212;</mo>
428
- <mn>2</mn>
429
- </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&#x22C5;s
437
- <sup>&#x2212;2</sup>
438
- </UnitSymbol>
439
- <UnitSymbol type='MathML'>
440
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
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>
441
439
  <mrow>
442
- <mi mathvariant='normal'>kg</mi>
443
- <mo>&#x22C5;</mo>
444
- <msup>
445
- <mrow>
446
- <mi mathvariant='normal'>s</mi>
447
- </mrow>
448
- <mrow>
449
- <mo>&#x2212;</mo>
450
- <mn>2</mn>
451
- </mrow>
452
- </msup>
440
+ <mi mathvariant='normal'>s</mi>
453
441
  </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>&#x22C5;</mo>
478
- <msup>
479
- <mrow>
480
- <mi mathvariant='normal'>s</mi>
481
- </mrow>
482
- <mrow>
483
- <mo>&#x2212;</mo>
484
- <mn>2</mn>
485
- </mrow>
486
- </msup>
487
- </mrow>
488
- </math>
489
- OUTPUT
442
+ <mrow>
443
+ <mo>&#x2212;</mo>
444
+ <mn>2</mn>
445
+ </mrow>
446
+ </msup>
447
+ </mrow>
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'>
457
+ <mrow>
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>
469
+ </mrow>
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>
503
+ </mrow>
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)
509
+ input = <<~INPUT
494
510
  10 "unitsml(K/(kg*m))"
495
511
  INPUT
496
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
497
- <mn>10</mn>
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
580
+ end
581
+
582
+ it "deals with notational variants" do
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>
498
590
  <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>&#x22C5;</mo>
504
- <mi mathvariant='normal'>m</mi>
591
+ <mrow xref='U_NISTu5'>
592
+ <mi mathvariant='normal'>&#xB0;K</mi>
505
593
  </mrow>
506
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_K.kg-1.m-1' dimensionURL='#D_L-1M-1Theta'>
594
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
507
595
  <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&#x22C5;kg
511
- <sup>&#x2212;1</sup>
512
- &#x22C5;m
513
- <sup>&#x2212;1</sup>
514
- </UnitSymbol>
596
+ <UnitName xml:lang='en'>kelvin</UnitName>
597
+ <UnitSymbol type='HTML'>K</UnitSymbol>
515
598
  <UnitSymbol type='MathML'>
516
599
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
517
600
  <mrow>
518
601
  <mi mathvariant='normal'>K</mi>
519
- <mo>&#x22C5;</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>&#x22C5;</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
602
  </mrow>
540
603
  </math>
541
604
  </UnitSymbol>
542
- <RootUnits>
543
- <EnumeratedRootUnit unit='kelvin'/>
544
- <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
545
- <EnumeratedRootUnit unit='meter' powerNumerator='-1'/>
546
- </RootUnits>
547
605
  </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'/>
606
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
558
607
  <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
559
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>
560
618
  </math>
561
- OUTPUT
562
- end
563
-
564
- 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
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)
623
+ input = <<~INPUT
604
624
  9 "unitsml(mbar)"
605
625
  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
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)
666
+ input = <<~INPUT
645
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)
698
+ input = <<~INPUT
675
699
  "unitsml(u-)" + "unitsml(um)"
676
700
  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>
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
744
+ end
745
+
746
+ it "deals with units division" do
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>
697
824
  </mrow>
698
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
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'>
699
826
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
700
- <UnitName xml:lang='en'>um</UnitName>
701
- <UnitSymbol type='HTML'>um</UnitSymbol>
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>
702
834
  <UnitSymbol type='MathML'>
703
835
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
704
836
  <mrow>
705
- <mi mathvariant='normal'>&#xB5;m</mi>
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>
706
858
  </mrow>
707
859
  </math>
708
860
  </UnitSymbol>
709
861
  <RootUnits>
710
- <EnumeratedRootUnit unit='meter' prefix='u'/>
862
+ <EnumeratedRootUnit unit='joule'/>
863
+ <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
864
+ <EnumeratedRootUnit unit='kelvin' powerNumerator='-1'/>
711
865
  </RootUnits>
712
866
  </Unit>
713
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
714
- <Length symbol='L' powerNumerator='1'/>
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'/>
715
878
  </Dimension>
716
- </math>
717
- OUTPUT
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
718
887
  end
719
888
 
720
- 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)"
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>
723
899
  INPUT
724
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
725
- <mn>9</mn>
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>
726
907
  <mo rspace='thickmathspace'>&#x2062;</mo>
727
- <mrow xref='U_A.C3'>
728
- <mi mathvariant='normal'>A</mi>
729
- <mo>&#x22C5;</mo>
908
+ <mrow xref='U_kg-2'>
730
909
  <msup>
731
910
  <mrow>
732
- <mi mathvariant='normal'>C</mi>
911
+ <mi mathvariant='normal'>kg</mi>
733
912
  </mrow>
734
913
  <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&#x22C5;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>&#x22C5;</mo>
751
- <msup>
752
- <mrow>
753
- <mi mathvariant='normal'>C</mi>
754
- </mrow>
755
- <mrow>
756
- <mn>3</mn>
757
- </mrow>
758
- </msup>
759
- </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>
778
- <mrow>
779
- <mi mathvariant='normal'>C</mi>
780
- </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>&#x22C5;</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&#x22C5;kg
802
- <sup>&#x2212;1</sup>
803
- &#x22C5;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>&#x22C5;</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>&#x22C5;</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>
914
+ <mo>&#x2212;</mo>
915
+ <mn>2</mn>
888
916
  </mrow>
889
917
  </msup>
890
918
  </mrow>
@@ -934,524 +962,572 @@ RSpec.describe Asciimath2UnitsML do
934
962
  end
935
963
 
936
964
  it "raises error for illegal unit" do
937
- expect { xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT)) }.to raise_error(Rsec::SyntaxError)
938
- 12 "unitsml(que?)"
965
+ input = <<~INPUT
966
+ 12 "unitsml(que?)"
939
967
  INPUT
968
+ expect { xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(input)) }
969
+ .to raise_error(Rsec::SyntaxError)
940
970
  end
941
971
 
942
972
  it "initialises multiplier" do
943
- expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: "\u00d7").Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
973
+ input = <<~INPUT
944
974
  1 "unitsml(kg*s^-2)"
945
975
  INPUT
946
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
947
- <mn>1</mn>
948
- <mo rspace='thickmathspace'>&#x2062;</mo>
949
- <mrow xref='U_kg.s-2'>
950
- <mi mathvariant='normal'>kg</mi>
951
- <mo>&#xD7;</mo>
952
- <msup>
953
- <mrow>
954
- <mi mathvariant='normal'>s</mi>
955
- </mrow>
956
- <mrow>
957
- <mo>&#x2212;</mo>
958
- <mn>2</mn>
959
- </mrow>
960
- </msup>
961
- </mrow>
962
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
963
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
964
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
965
- <UnitSymbol type='HTML'>
966
- kg&#xD7;s
967
- <sup>&#x2212;2</sup>
968
- </UnitSymbol>
969
- <UnitSymbol type='MathML'>
976
+ expect(xmlpp(Asciimath2UnitsML::Conv
977
+ .new(multiplier: "\u00d7")
978
+ .Asciimath2UnitsML(input))).to be_equivalent_to xmlpp(<<~OUTPUT)
970
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>
971
986
  <mrow>
972
- <mi mathvariant='normal'>kg</mi>
973
- <mo>&#xD7;</mo>
974
- <msup>
975
- <mrow>
976
- <mi mathvariant='normal'>s</mi>
977
- </mrow>
978
- <mrow>
979
- <mo>&#x2212;</mo>
980
- <mn>2</mn>
981
- </mrow>
982
- </msup>
987
+ <mi mathvariant='normal'>s</mi>
983
988
  </mrow>
984
- </math>
985
- </UnitSymbol>
986
- <RootUnits>
987
- <EnumeratedRootUnit unit='gram' prefix='k'/>
988
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
989
- </RootUnits>
990
- </Unit>
991
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
992
- <PrefixName xml:lang='en'>kilo</PrefixName>
993
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
994
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
995
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
996
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
997
- </Prefix>
998
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
999
- <Mass symbol='M' powerNumerator='1'/>
1000
- <Time symbol='T' powerNumerator='-2'/>
1001
- </Dimension>
1002
- </math>
1003
- OUTPUT
1004
- expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :space).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
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
1005
1038
  1 "unitsml(kg*s^-2)"
1006
1039
  INPUT
1007
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1008
- <mn>1</mn>
1009
- <mo rspace='thickmathspace'>&#x2062;</mo>
1010
- <mrow xref='U_kg.s-2'>
1011
- <mi mathvariant='normal'>kg</mi>
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>
1012
1045
  <mo rspace='thickmathspace'>&#x2062;</mo>
1013
- <msup>
1014
- <mrow>
1015
- <mi mathvariant='normal'>s</mi>
1016
- </mrow>
1017
- <mrow>
1018
- <mo>&#x2212;</mo>
1019
- <mn>2</mn>
1020
- </mrow>
1021
- </msup>
1022
- </mrow>
1023
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1024
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1025
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
1026
- <UnitSymbol type='HTML'>
1027
- kg&#xA0;s
1028
- <sup>&#x2212;2</sup>
1029
- </UnitSymbol>
1030
- <UnitSymbol type='MathML'>
1031
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1046
+ <mrow xref='U_kg.s-2'>
1047
+ <mi mathvariant='normal'>kg</mi>
1048
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1049
+ <msup>
1032
1050
  <mrow>
1033
- <mi mathvariant='normal'>kg</mi>
1034
- <mo rspace='thickmathspace'>&#x2062;</mo>
1035
- <msup>
1036
- <mrow>
1037
- <mi mathvariant='normal'>s</mi>
1038
- </mrow>
1039
- <mrow>
1040
- <mo>&#x2212;</mo>
1041
- <mn>2</mn>
1042
- </mrow>
1043
- </msup>
1051
+ <mi mathvariant='normal'>s</mi>
1044
1052
  </mrow>
1045
- </math>
1046
- </UnitSymbol>
1047
- <RootUnits>
1048
- <EnumeratedRootUnit unit='gram' prefix='k'/>
1049
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1050
- </RootUnits>
1051
- </Unit>
1052
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1053
- <PrefixName xml:lang='en'>kilo</PrefixName>
1054
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1055
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
1056
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1057
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
1058
- </Prefix>
1059
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1060
- <Mass symbol='M' powerNumerator='1'/>
1061
- <Time symbol='T' powerNumerator='-2'/>
1062
- </Dimension>
1063
- </math>
1064
- OUTPUT
1065
- expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :nospace).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1053
+ <mrow>
1054
+ <mo>&#x2212;</mo>
1055
+ <mn>2</mn>
1056
+ </mrow>
1057
+ </msup>
1058
+ </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'>
1068
+ <mrow>
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>
1080
+ </mrow>
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
1066
1102
  1 "unitsml(kg*s^-2)"
1067
1103
  INPUT
1068
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1069
- <mn>1</mn>
1070
- <mo rspace='thickmathspace'>&#x2062;</mo>
1071
- <mrow xref='U_kg.s-2'>
1072
- <mi mathvariant='normal'>kg</mi>
1073
- <mo>&#x2062;</mo>
1074
- <msup>
1075
- <mrow>
1076
- <mi mathvariant='normal'>s</mi>
1077
- </mrow>
1078
- <mrow>
1079
- <mo>&#x2212;</mo>
1080
- <mn>2</mn>
1081
- </mrow>
1082
- </msup>
1083
- </mrow>
1084
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1085
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1086
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
1087
- <UnitSymbol type='HTML'>
1088
- kgs
1089
- <sup>&#x2212;2</sup>
1090
- </UnitSymbol>
1091
- <UnitSymbol type='MathML'>
1104
+ expect(xmlpp(Asciimath2UnitsML::Conv
1105
+ .new(multiplier: :nospace)
1106
+ .Asciimath2UnitsML(input))).to be_equivalent_to xmlpp(<<~OUTPUT)
1092
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>
1093
1114
  <mrow>
1094
- <mi mathvariant='normal'>kg</mi>
1095
- <mo>&#x2062;</mo>
1096
- <msup>
1097
- <mrow>
1098
- <mi mathvariant='normal'>s</mi>
1099
- </mrow>
1100
- <mrow>
1101
- <mo>&#x2212;</mo>
1102
- <mn>2</mn>
1103
- </mrow>
1104
- </msup>
1115
+ <mi mathvariant='normal'>s</mi>
1105
1116
  </mrow>
1106
- </math>
1107
- </UnitSymbol>
1108
- <RootUnits>
1109
- <EnumeratedRootUnit unit='gram' prefix='k'/>
1110
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1111
- </RootUnits>
1112
- </Unit>
1113
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1114
- <PrefixName xml:lang='en'>kilo</PrefixName>
1115
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1116
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
1117
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1118
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
1119
- </Prefix>
1120
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1121
- <Mass symbol='M' powerNumerator='1'/>
1122
- <Time symbol='T' powerNumerator='-2'/>
1123
- </Dimension>
1124
- </math>
1125
- OUTPUT
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
1126
1165
  end
1127
1166
 
1128
1167
  it "deals with dimension decomposition with like units" do
1129
- expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1168
+ input = <<~INPUT
1130
1169
  9 "unitsml(mW*cm^(-2))"
1131
1170
  INPUT
1132
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1133
- <mn>9</mn>
1134
- <mo rspace='thickmathspace'>&#x2062;</mo>
1135
- <mrow xref='U_mW.cm-2'>
1136
- <mi mathvariant='normal'>mW</mi>
1137
- <mo>&#x22C5;</mo>
1138
- <msup>
1139
- <mrow>
1140
- <mi mathvariant='normal'>cm</mi>
1141
- </mrow>
1142
- <mrow>
1143
- <mo>&#x2212;</mo>
1144
- <mn>2</mn>
1145
- </mrow>
1146
- </msup>
1147
- </mrow>
1148
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mW.cm-2'>
1149
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1150
- <UnitName xml:lang='en'>mW*cm^-2</UnitName>
1151
- <UnitSymbol type='HTML'>
1152
- mW&#x22C5;cm
1153
- <sup>&#x2212;2</sup>
1154
- </UnitSymbol>
1155
- <UnitSymbol type='MathML'>
1156
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
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>
1157
1183
  <mrow>
1158
- <mi mathvariant='normal'>mW</mi>
1159
- <mo>&#x22C5;</mo>
1160
- <msup>
1161
- <mrow>
1162
- <mi mathvariant='normal'>cm</mi>
1163
- </mrow>
1164
- <mrow>
1165
- <mo>&#x2212;</mo>
1166
- <mn>2</mn>
1167
- </mrow>
1168
- </msup>
1184
+ <mo>&#x2212;</mo>
1185
+ <mn>2</mn>
1169
1186
  </mrow>
1170
- </math>
1171
- </UnitSymbol>
1172
- <RootUnits>
1173
- <EnumeratedRootUnit unit='watt' prefix='m'/>
1174
- <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1175
- </RootUnits>
1176
- </Unit>
1177
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
1178
- <PrefixName xml:lang='en'>milli</PrefixName>
1179
- <PrefixSymbol type='ASCII'>m</PrefixSymbol>
1180
- <PrefixSymbol type='unicode'>m</PrefixSymbol>
1181
- <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
1182
- <PrefixSymbol type='HTML'>m</PrefixSymbol>
1183
- </Prefix>
1184
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1185
- <PrefixName xml:lang='en'>centi</PrefixName>
1186
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1187
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1188
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1189
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1190
- </Prefix>
1191
- </math>
1192
- OUTPUT
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
1193
1234
  end
1194
1235
 
1195
1236
  it "deals with quantity input" do
1196
- expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1237
+ input = <<~INPUT
1197
1238
  9 "unitsml(m, quantity: NISTq103)"
1198
1239
  INPUT
1199
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1200
- <mn>9</mn>
1201
- <mo rspace='thickmathspace'>&#x2062;</mo>
1202
- <mrow xref='U_NISTu1'>
1203
- <mi mathvariant='normal'>m</mi>
1204
- </mrow>
1205
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1206
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1207
- <UnitName xml:lang='en'>meter</UnitName>
1208
- <UnitSymbol type='HTML'>m</UnitSymbol>
1209
- <UnitSymbol type='MathML'>
1210
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1211
- <mrow>
1212
- <mi mathvariant='normal'>m</mi>
1213
- </mrow>
1214
- </math>
1215
- </UnitSymbol>
1216
- </Unit>
1217
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1218
- <Length symbol='L' powerNumerator='1'/>
1219
- </Dimension>
1220
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq103' dimensionURL='#NISTd1' quantityType='base'>
1221
- <QuantityName xml:lang='en-US'>position vector</QuantityName>
1222
- </Quantity>
1223
- </math>
1224
- OUTPUT
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
1225
1268
  end
1226
1269
 
1227
1270
  it "deals with name input" do
1228
- expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1271
+ input = <<~INPUT
1229
1272
  9 "unitsml(cal_th/cm^2, name: langley)"
1230
1273
  INPUT
1231
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1232
- <mn>9</mn>
1233
- <mo rspace='thickmathspace'>&#x2062;</mo>
1234
- <mrow xref='U_cal_th/cm2'>
1235
- <msub>
1236
- <mrow>
1237
- <mi mathvariant='normal'>cal</mi>
1238
- </mrow>
1239
- <mrow>
1240
- <mi mathvariant='normal'>th</mi>
1241
- </mrow>
1242
- </msub>
1243
- <mo>/</mo>
1244
- <msup>
1245
- <mrow>
1246
- <mi mathvariant='normal'>cm</mi>
1247
- </mrow>
1248
- <mrow>
1249
- <mn>2</mn>
1250
- </mrow>
1251
- </msup>
1252
- </mrow>
1253
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cal_th.cm-2'>
1254
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
1255
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1256
- <UnitName xml:lang='en'>langley</UnitName>
1257
- <UnitSymbol type='HTML'>
1258
- cal
1259
- <sub>th</sub>
1260
- &#x22C5;cm
1261
- <sup>&#x2212;2</sup>
1262
- </UnitSymbol>
1263
- <UnitSymbol type='MathML'>
1264
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
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>
1265
1281
  <mrow>
1266
- <msub>
1267
- <mrow>
1268
- <mi mathvariant='normal'>cal</mi>
1269
- </mrow>
1270
- <mrow>
1271
- <mi mathvariant='normal'>th</mi>
1272
- </mrow>
1273
- </msub>
1274
- <mo>&#x22C5;</mo>
1275
- <msup>
1276
- <mrow>
1277
- <mi mathvariant='normal'>cm</mi>
1278
- </mrow>
1279
- <mrow>
1280
- <mo>&#x2212;</mo>
1281
- <mn>2</mn>
1282
- </mrow>
1283
- </msup>
1282
+ <mi mathvariant='normal'>cal</mi>
1284
1283
  </mrow>
1285
- </math>
1286
- </UnitSymbol>
1287
- <RootUnits>
1288
- <EnumeratedRootUnit unit='thermochemical calorie'/>
1289
- <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1290
- </RootUnits>
1291
- </Unit>
1292
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1293
- <PrefixName xml:lang='en'>centi</PrefixName>
1294
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1295
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1296
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1297
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1298
- </Prefix>
1299
- </math>
1300
- OUTPUT
1301
- end
1302
-
1303
- it "deals with symbol input" do
1304
- expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1305
- 9 "unitsml(m, symbol: La)" + 10 "unitsml(cm*s^-2, symbol: cm cdot s^-2)"
1306
- INPUT
1307
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1308
- <mn>9</mn>
1309
- <mo rspace='thickmathspace'>&#x2062;</mo>
1310
- <mrow xref='U_NISTu1'>
1311
- <math>
1312
- <mi mathvariant='normal'>L</mi>
1313
- <mi mathvariant='normal'>a</mi>
1314
- </math>
1315
- </mrow>
1316
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1317
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1318
- <UnitName xml:lang='en'>meter</UnitName>
1319
- <UnitSymbol type='HTML'>m</UnitSymbol>
1320
- <UnitSymbol type='MathML'>
1321
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1322
1284
  <mrow>
1323
- <mi mathvariant='normal'>m</mi>
1285
+ <mi mathvariant='normal'>th</mi>
1324
1286
  </mrow>
1325
- </math>
1326
- </UnitSymbol>
1327
- </Unit>
1328
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1329
- <Length symbol='L' powerNumerator='1'/>
1330
- </Dimension>
1331
- <mo>+</mo>
1332
- <mn>10</mn>
1333
- <mo rspace='thickmathspace'>&#x2062;</mo>
1334
- <mrow xref='U_cm.s-2'>
1335
- <math>
1336
- <mi mathvariant='normal'>c</mi>
1337
- <mi mathvariant='normal'>m</mi>
1338
- <mo>&#x22C5;</mo>
1287
+ </msub>
1288
+ <mo>/</mo>
1339
1289
  <msup>
1340
1290
  <mrow>
1341
- <mi mathvariant='normal'>s</mi>
1291
+ <mi mathvariant='normal'>cm</mi>
1342
1292
  </mrow>
1343
1293
  <mrow>
1344
- <mo>&#x2212;</mo>
1294
+ <mn>2</mn>
1345
1295
  </mrow>
1346
1296
  </msup>
1347
- <mn>2</mn>
1348
- </math>
1349
- </mrow>
1350
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1351
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1352
- <UnitName xml:lang='en'>cm*s^-2</UnitName>
1353
- <UnitSymbol type='HTML'>
1354
- cm&#x22C5;s
1355
- <sup>&#x2212;2</sup>
1356
- </UnitSymbol>
1357
- <UnitSymbol type='MathML'>
1358
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1359
- <mrow>
1360
- <mi mathvariant='normal'>cm</mi>
1361
- <mo>&#x22C5;</mo>
1362
- <msup>
1363
- <mrow>
1364
- <mi mathvariant='normal'>s</mi>
1365
- </mrow>
1366
- <mrow>
1367
- <mo>&#x2212;</mo>
1368
- <mn>2</mn>
1369
- </mrow>
1370
- </msup>
1371
- </mrow>
1372
- </math>
1373
- </UnitSymbol>
1374
- <RootUnits>
1375
- <EnumeratedRootUnit unit='meter' prefix='c'/>
1376
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1377
- </RootUnits>
1378
- </Unit>
1379
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1380
- <PrefixName xml:lang='en'>centi</PrefixName>
1381
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1382
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1383
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1384
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1385
- </Prefix>
1386
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1387
- <Length symbol='L' powerNumerator='1'/>
1388
- <Time symbol='T' powerNumerator='-2'/>
1389
- </Dimension>
1390
- </math>
1391
- OUTPUT
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
1347
+
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>
1394
+ <mn>2</mn>
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
1392
1439
  end
1393
1440
 
1394
1441
  it "deals with multiplier input" do
1395
- expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1442
+ input = <<~INPUT
1396
1443
  10 "unitsml(cm*s^-2, multiplier: xx)"
1397
1444
  INPUT
1398
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1399
- <mn>10</mn>
1400
- <mo rspace='thickmathspace'>&#x2062;</mo>
1401
- <mrow xref='U_cm.s-2'>
1402
- <mi mathvariant='normal'>cm</mi>
1403
- <mo>xx</mo>
1404
- <msup>
1405
- <mrow>
1406
- <mi mathvariant='normal'>s</mi>
1407
- </mrow>
1408
- <mrow>
1409
- <mo>&#x2212;</mo>
1410
- <mn>2</mn>
1411
- </mrow>
1412
- </msup>
1413
- </mrow>
1414
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1415
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1416
- <UnitName xml:lang='en'>cm*s^-2</UnitName>
1417
- <UnitSymbol type='HTML'>
1418
- cm&#x22C5;s
1419
- <sup>&#x2212;2</sup>
1420
- </UnitSymbol>
1421
- <UnitSymbol type='MathML'>
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
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)
1422
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>
1423
1518
  <mrow>
1424
- <mi mathvariant='normal'>cm</mi>
1425
- <mo>&#x22C5;</mo>
1426
- <msup>
1427
- <mrow>
1428
- <mi mathvariant='normal'>s</mi>
1429
- </mrow>
1430
- <mrow>
1431
- <mo>&#x2212;</mo>
1432
- <mn>2</mn>
1433
- </mrow>
1434
- </msup>
1519
+ <mi mathvariant='sans-serif'>L</mi>
1435
1520
  </mrow>
1436
- </math>
1437
- </UnitSymbol>
1438
- <RootUnits>
1439
- <EnumeratedRootUnit unit='meter' prefix='c'/>
1440
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1441
- </RootUnits>
1442
- </Unit>
1443
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1444
- <PrefixName xml:lang='en'>centi</PrefixName>
1445
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1446
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1447
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1448
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1449
- </Prefix>
1450
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1451
- <Length symbol='L' powerNumerator='1'/>
1452
- <Time symbol='T' powerNumerator='-2'/>
1453
- </Dimension>
1454
- </math>
1455
- OUTPUT
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
1456
1532
  end
1457
1533
  end