asciimath2unitsml 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,14 +12,14 @@ module Asciimath2UnitsML
12
12
  hash
13
13
  end
14
14
 
15
- def validate_unit(v)
16
- if v[:quantity_reference]
17
- v[:quantity_reference].is_a?(Array) or
18
- raise StandardError.new "No quantity_reference array provided for unit: #{v}"
15
+ def validate_unit(unit)
16
+ if unit[:quantity_reference]
17
+ unit[:quantity_reference].is_a?(Array) or
18
+ raise StandardError.new "No quantity_reference array provided for unit: #{unit}"
19
19
  end
20
- if v[:unit_name]
21
- v[:unit_name].is_a?(Array) or
22
- raise StandardError.new "No unit_name array provided for unit: #{v}"
20
+ if unit[:unit_name]
21
+ unit[:unit_name].is_a?(Array) or
22
+ raise StandardError.new "No unit_name array provided for unit: #{unit}"
23
23
  end
24
24
  end
25
25
 
@@ -33,16 +33,16 @@ module Asciimath2UnitsML
33
33
  "already used for #{m[s]}"
34
34
  m[s] = v
35
35
  end
36
- m
36
+ m
37
37
  end
38
38
 
39
- def validate_unit_symbol_cardinality(us, k)
40
- return true if us.nil?
39
+ def validate_unit_symbol_cardinality(sym, k)
40
+ return true if sym.nil?
41
41
 
42
- !us[:id].nil? && !us[:ascii].nil? && !us[:html].nil? &&
43
- !us[:mathml].nil? && !us[:latex].nil? &&
44
- !us[:unicode].nil? and return true
45
- raise StandardError.new "malformed unit_symbol for #{k}: #{us}"
42
+ !sym[:id].nil? && !sym[:ascii].nil? && !sym[:html].nil? &&
43
+ !sym[:mathml].nil? && !sym[:latex].nil? &&
44
+ !sym[:unicode].nil? and return true
45
+ raise StandardError.new "malformed unit_symbol for #{k}: #{sym}"
46
46
  end
47
47
 
48
48
  def symbol_key(v)
@@ -1,3 +1,3 @@
1
1
  module Asciimath2UnitsML
2
- VERSION = '0.3.2'.freeze
2
+ VERSION = "0.3.3".freeze
3
3
  end
@@ -1,6 +1,7 @@
1
1
  module UnitsDB
2
2
  class Dimension
3
- attr_reader :id, :length, :mass, :time, :electric_current, :thermodynamic_temperature,
3
+ attr_reader :id, :length, :mass, :time, :electric_current,
4
+ :thermodynamic_temperature,
4
5
  :amount_of_substance, :luminous_intensity, :plane_angle, :dimensionless
5
6
 
6
7
  def initialize(id, hash)
@@ -10,12 +11,16 @@ module UnitsDB
10
11
  hash[:length] and @length = hash[:length][:powerNumerator].to_i
11
12
  hash[:mass] and @mass = hash[:mass][:powerNumerator].to_i
12
13
  hash[:time] and @time = hash[:time][:powerNumerator].to_i
13
- hash[:electric_current] and @electric_current = hash[:electric_current][:powerNumerator].to_i
14
+ hash[:electric_current] and
15
+ @electric_current = hash[:electric_current][:powerNumerator].to_i
14
16
  hash[:thermodynamic_temperature] and
15
17
  @thermodynamic_temperature = hash[:thermodynamic_temperature][:powerNumerator].to_i
16
- hash[:amount_of_substance] and @amount_of_substance = hash[:amount_of_substance][:powerNumerator].to_i
17
- hash[:luminous_intensity] and @luminous_intensity = hash[:luminous_intensity][:powerNumerator].to_i
18
- hash[:plane_angle] and @plane_angle = hash[:plane_angle][:powerNumerator].to_i
18
+ hash[:amount_of_substance] and
19
+ @amount_of_substance = hash[:amount_of_substance][:powerNumerator].to_i
20
+ hash[:luminous_intensity] and
21
+ @luminous_intensity = hash[:luminous_intensity][:powerNumerator].to_i
22
+ hash[:plane_angle] and
23
+ @plane_angle = hash[:plane_angle][:powerNumerator].to_i
19
24
  rescue
20
25
  raise StandardError.new "Parse fail on Dimension #{id}: #{hash}"
21
26
  end
@@ -48,7 +53,8 @@ module UnitsDB
48
53
  end
49
54
 
50
55
  def vector
51
- "#{@length}:#{@mass}:#{@time}:#{@electric_current}:#{@thermodynamic_temperature}:#{@amount_of_substance}:"\
56
+ "#{@length}:#{@mass}:#{@time}:#{@electric_current}:"\
57
+ "#{@thermodynamic_temperature}:#{@amount_of_substance}:"\
52
58
  "#{@luminous_intensity}:#{@plane_angle}"
53
59
  end
54
60
  end
@@ -102,7 +108,8 @@ module UnitsDB
102
108
  @dimension = hash[:dimension_url].sub(/^#/, "")
103
109
  @type = hash[:quantity_type]
104
110
  hash[:quantity_name] and @names = hash[:quantity_name]
105
- hash[:unit_reference] and @units = hash[:unit_reference].map { |x| x[:url].sub(/^#/, "") }
111
+ hash[:unit_reference] and
112
+ @units = hash[:unit_reference].map { |x| x[:url].sub(/^#/, "") }
106
113
  rescue
107
114
  raise StandardError.new "Parse fail on Quantity #{id}: #{hash}"
108
115
  end
@@ -118,7 +125,8 @@ module UnitsDB
118
125
  end
119
126
 
120
127
  class Unit
121
- attr_reader :id, :dimension, :short, :root, :unit_system, :names, :symbols, :symbols_hash, :root_units, :quantities,
128
+ attr_reader :id, :dimension, :short, :root, :unit_system, :names,
129
+ :symbols, :symbols_hash, :root_units, :quantities,
122
130
  :si_derived_bases, :prefixed
123
131
 
124
132
  def initialize(id, hash)
@@ -129,11 +137,13 @@ module UnitsDB
129
137
  hash[:short] && !hash[:short].empty? and @short = hash[:short]
130
138
  @unit_system = hash[:unit_system]
131
139
  @names = hash[:unit_name]
132
- @symbols_hash = hash[:unit_symbols]&.each_with_object({}) { |h, m| m[h[:id]] = h } || {}
140
+ @symbols_hash =
141
+ hash[:unit_symbols]&.each_with_object({}) { |h, m| m[h[:id]] = h } || {}
133
142
  @symbols = hash[:unit_symbols]
134
143
  hash[:root_units] and hash[:root_units][:enumerated_root_units] and
135
144
  @root = hash[:root_units][:enumerated_root_units]
136
- hash[:quantity_reference] and @quantities = hash[:quantity_reference].map { |x| x[:url].sub(/^#/, "") }
145
+ hash[:quantity_reference] and
146
+ @quantities = hash[:quantity_reference].map { |x| x[:url].sub(/^#/, "") }
137
147
  hash[:si_derived_bases] and @si_derived_bases = hash[:si_derived_bases]
138
148
  @prefixed = (hash[:prefixed] == true)
139
149
  rescue
@@ -158,7 +168,7 @@ module UnitsDB
158
168
  end
159
169
 
160
170
  def symbolids
161
- @symbols ? @symbols.map { |s| s[:id] } : [ @short ]
171
+ @symbols ? @symbols.map { |s| s[:id] } : [@short]
162
172
  end
163
173
  end
164
174
  end
data/spec/conv_spec.rb CHANGED
@@ -2,750 +2,729 @@ require "spec_helper"
2
2
 
3
3
  RSpec.describe Asciimath2UnitsML do
4
4
  it "converts an AsciiMath string to MathML + UnitsML" do
5
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
6
- 1 "unitsml(mm*s^-2)"
5
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
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
+ <?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>
34
16
  <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>
17
+ <mi mathvariant='normal'>s</mi>
46
18
  </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>
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'>
34
+ <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>
46
+ </mrow>
47
+ </math>
48
+ </UnitSymbol>
49
+ <RootUnits>
50
+ <EnumeratedRootUnit unit='meter' prefix='m'/>
51
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
52
+ </RootUnits>
53
+ </Unit>
54
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
55
+ <PrefixName xml:lang='en'>milli</PrefixName>
56
+ <PrefixSymbol type='ASCII'>m</PrefixSymbol>
57
+ <PrefixSymbol type='unicode'>m</PrefixSymbol>
58
+ <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
59
+ <PrefixSymbol type='HTML'>m</PrefixSymbol>
60
+ </Prefix>
61
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
62
+ <Length symbol='L' powerNumerator='1'/>
63
+ <Time symbol='T' powerNumerator='-2'/>
64
+ </Dimension>
65
+ </math>
66
66
  OUTPUT
67
67
  end
68
68
 
69
69
  it "deals with non-Ascii units and prefixes" do
70
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
71
- 1 "unitsml(um)"
70
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
71
+ 1 "unitsml(um)"
72
72
  INPUT
73
- <?xml version='1.0'?>
74
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
75
- <mn>1</mn>
76
- <mo rspace='thickmathspace'>&#x2062;</mo>
77
- <mrow xref='U_um'>
78
- <mi mathvariant='normal'>&#xB5;m</mi>
79
- </mrow>
80
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
81
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
82
- <UnitName xml:lang='en'>um</UnitName>
83
- <UnitSymbol type='HTML'>um</UnitSymbol>
84
- <UnitSymbol type='MathML'>
85
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
86
- <mrow>
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'>
87
78
  <mi mathvariant='normal'>&#xB5;m</mi>
88
79
  </mrow>
80
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
81
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
82
+ <UnitName xml:lang='en'>um</UnitName>
83
+ <UnitSymbol type='HTML'>um</UnitSymbol>
84
+ <UnitSymbol type='MathML'>
85
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
86
+ <mrow>
87
+ <mi mathvariant='normal'>&#xB5;m</mi>
88
+ </mrow>
89
+ </math>
90
+ </UnitSymbol>
91
+ <RootUnits>
92
+ <EnumeratedRootUnit unit='meter' prefix='u'/>
93
+ </RootUnits>
94
+ </Unit>
95
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
96
+ <PrefixName xml:lang='en'>micro</PrefixName>
97
+ <PrefixSymbol type='ASCII'>u</PrefixSymbol>
98
+ <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
99
+ <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
100
+ <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
101
+ </Prefix>
102
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
103
+ <Length symbol='L' powerNumerator='1'/>
104
+ </Dimension>
89
105
  </math>
90
- </UnitSymbol>
91
- <RootUnits>
92
- <EnumeratedRootUnit unit='meter' prefix='u'/>
93
- </RootUnits>
94
- </Unit>
95
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
96
- <PrefixName xml:lang='en'>micro</PrefixName>
97
- <PrefixSymbol type='ASCII'>u</PrefixSymbol>
98
- <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
99
- <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
100
- <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
101
- </Prefix>
102
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
103
- <Length symbol='L' powerNumerator='1'/>
104
- </Dimension>
105
- </math>
106
- OUTPUT
107
- end
106
+ OUTPUT
107
+ end
108
108
 
109
109
  it "does not insert space before non-alphabetic units" do
110
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
111
- 1 "unitsml(degK)" + 1 "unitsml(prime)" + ii(theta) = s//r "unitsml(rad)" + 10^(12) "unitsml(Hz)"
112
- INPUT
113
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
114
- <mn>1</mn>
115
- <mo rspace='thickmathspace'>&#x2062;</mo>
116
- <mrow xref='U_NISTu5'>
117
- <mi mathvariant='normal'>&#xB0;K</mi>
118
- </mrow>
119
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
120
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
121
- <UnitName xml:lang='en'>kelvin</UnitName>
122
- <UnitSymbol type='HTML'>K</UnitSymbol>
123
- <UnitSymbol type='MathML'>
124
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
125
- <mrow>
126
- <mi mathvariant='normal'>K</mi>
127
- </mrow>
128
- </math>
129
- </UnitSymbol>
130
- </Unit>
131
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
132
- <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
133
- </Dimension>
134
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
135
- <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
136
- </Quantity>
137
- <mo>+</mo>
138
- <mn>1</mn>
139
- <mo>&#x2062;</mo>
140
- <mrow xref='U_NISTu147'>
141
- <mi mathvariant='normal'>&#x2032;</mi>
142
- </mrow>
143
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu147'>
144
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
145
- <UnitName xml:lang='en'>minute (minute of arc)</UnitName>
146
- <UnitSymbol type='HTML'>&#x2032;</UnitSymbol>
147
- <UnitSymbol type='MathML'>
148
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
149
- <mrow>
150
- <mi mathvariant='normal'>&#x2032;</mi>
151
- </mrow>
152
- </math>
153
- </UnitSymbol>
154
- </Unit>
155
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd9'>
156
- <PlaneAngle symbol='Phi' powerNumerator='1'/>
157
- </Dimension>
158
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq9' dimensionURL='#NISTd9' quantityType='base'>
159
- <QuantityName xml:lang='en-US'>plane angle</QuantityName>
160
- <QuantityName xml:lang='en-US'>angle</QuantityName>
161
- </Quantity>
162
- <mo>+</mo>
163
- <mstyle mathvariant='italic'>
164
- <mi>&#x3B8;</mi>
165
- </mstyle>
166
- <mo>=</mo>
167
- <mi>s</mi>
168
- <mo>/</mo>
169
- <mi>r</mi>
170
- <mo rspace='thickmathspace'>&#x2062;</mo>
171
- <mrow xref='U_NISTu9'>
172
- <mi mathvariant='normal'>rad</mi>
173
- </mrow>
174
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu9' dimensionURL='#D_L0'>
175
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
176
- <UnitName xml:lang='en'>radian</UnitName>
177
- <UnitSymbol type='HTML'>rad</UnitSymbol>
178
- <UnitSymbol type='MathML'>
179
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
180
- <mrow>
181
- <mi mathvariant='normal'>rad</mi>
182
- </mrow>
183
- </math>
184
- </UnitSymbol>
185
- </Unit>
186
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L0'>
187
- <Length symbol='L' powerNumerator='0'/>
188
- </Dimension>
189
- <mo>+</mo>
190
- <msup>
191
- <mrow>
192
- <mn>10</mn>
193
- </mrow>
194
- <mrow>
195
- <mn>12</mn>
196
- </mrow>
197
- </msup>
198
- <mo rspace='thickmathspace'>&#x2062;</mo>
199
- <mrow xref='U_NISTu31'>
200
- <mi mathvariant='normal'>Hz</mi>
201
- </mrow>
202
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu31' dimensionURL='#NISTd24'>
203
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
204
- <UnitName xml:lang='en'>hertz</UnitName>
205
- <UnitSymbol type='HTML'>Hz</UnitSymbol>
206
- <UnitSymbol type='MathML'>
207
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
208
- <mrow>
209
- <mi mathvariant='normal'>Hz</mi>
210
- </mrow>
211
- </math>
212
- </UnitSymbol>
213
- </Unit>
214
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd24'>
215
- <Time symbol='T' powerNumerator='-1'/>
216
- </Dimension>
217
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq45' dimensionURL='#NISTd24' quantityType='base'>
218
- <QuantityName xml:lang='en-US'>frequency</QuantityName>
219
- </Quantity>
220
- </math>
221
- OUTPUT
222
- end
110
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
111
+ 1 "unitsml(degK)" + 1 "unitsml(prime)" + ii(theta) = s//r "unitsml(rad)" + 10^(12) "unitsml(Hz)"
112
+ INPUT
113
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
114
+ <mn>1</mn>
115
+ <mo rspace='thickmathspace'>&#x2062;</mo>
116
+ <mrow xref='U_NISTu5'>
117
+ <mi mathvariant='normal'>&#xB0;K</mi>
118
+ </mrow>
119
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
120
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
121
+ <UnitName xml:lang='en'>kelvin</UnitName>
122
+ <UnitSymbol type='HTML'>K</UnitSymbol>
123
+ <UnitSymbol type='MathML'>
124
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
125
+ <mrow>
126
+ <mi mathvariant='normal'>K</mi>
127
+ </mrow>
128
+ </math>
129
+ </UnitSymbol>
130
+ </Unit>
131
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
132
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
133
+ </Dimension>
134
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
135
+ <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
136
+ </Quantity>
137
+ <mo>+</mo>
138
+ <mn>1</mn>
139
+ <mo>&#x2062;</mo>
140
+ <mrow xref='U_NISTu147'>
141
+ <mi mathvariant='normal'>&#x2032;</mi>
142
+ </mrow>
143
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu147'>
144
+ <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
145
+ <UnitName xml:lang='en'>minute (minute of arc)</UnitName>
146
+ <UnitSymbol type='HTML'>&#x2032;</UnitSymbol>
147
+ <UnitSymbol type='MathML'>
148
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
149
+ <mrow>
150
+ <mi mathvariant='normal'>&#x2032;</mi>
151
+ </mrow>
152
+ </math>
153
+ </UnitSymbol>
154
+ </Unit>
155
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd9'>
156
+ <PlaneAngle symbol='Phi' powerNumerator='1'/>
157
+ </Dimension>
158
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq9' dimensionURL='#NISTd9' quantityType='base'>
159
+ <QuantityName xml:lang='en-US'>plane angle</QuantityName>
160
+ <QuantityName xml:lang='en-US'>angle</QuantityName>
161
+ </Quantity>
162
+ <mo>+</mo>
163
+ <mstyle mathvariant='italic'>
164
+ <mi>&#x3B8;</mi>
165
+ </mstyle>
166
+ <mo>=</mo>
167
+ <mi>s</mi>
168
+ <mo>/</mo>
169
+ <mi>r</mi>
170
+ <mo rspace='thickmathspace'>&#x2062;</mo>
171
+ <mrow xref='U_NISTu9'>
172
+ <mi mathvariant='normal'>rad</mi>
173
+ </mrow>
174
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu9' dimensionURL='#D_L0'>
175
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
176
+ <UnitName xml:lang='en'>radian</UnitName>
177
+ <UnitSymbol type='HTML'>rad</UnitSymbol>
178
+ <UnitSymbol type='MathML'>
179
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
180
+ <mrow>
181
+ <mi mathvariant='normal'>rad</mi>
182
+ </mrow>
183
+ </math>
184
+ </UnitSymbol>
185
+ </Unit>
186
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L0'>
187
+ <Length symbol='L' powerNumerator='0'/>
188
+ </Dimension>
189
+ <mo>+</mo>
190
+ <msup>
191
+ <mrow>
192
+ <mn>10</mn>
193
+ </mrow>
194
+ <mrow>
195
+ <mn>12</mn>
196
+ </mrow>
197
+ </msup>
198
+ <mo rspace='thickmathspace'>&#x2062;</mo>
199
+ <mrow xref='U_NISTu31'>
200
+ <mi mathvariant='normal'>Hz</mi>
201
+ </mrow>
202
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu31' dimensionURL='#NISTd24'>
203
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
204
+ <UnitName xml:lang='en'>hertz</UnitName>
205
+ <UnitSymbol type='HTML'>Hz</UnitSymbol>
206
+ <UnitSymbol type='MathML'>
207
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
208
+ <mrow>
209
+ <mi mathvariant='normal'>Hz</mi>
210
+ </mrow>
211
+ </math>
212
+ </UnitSymbol>
213
+ </Unit>
214
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd24'>
215
+ <Time symbol='T' powerNumerator='-1'/>
216
+ </Dimension>
217
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq45' dimensionURL='#NISTd24' quantityType='base'>
218
+ <QuantityName xml:lang='en-US'>frequency</QuantityName>
219
+ </Quantity>
220
+ </math>
221
+ OUTPUT
222
+ end
223
223
 
224
224
  it "does not insert space before operators" do
225
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
226
- 8 "unitsml(kg)" cdot "unitsml(m)"
227
- INPUT
228
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
229
- <mn>8</mn>
230
- <mo rspace='thickmathspace'>&#x2062;</mo>
231
- <mrow xref='U_NISTu2'>
232
- <mi mathvariant='normal'>kg</mi>
233
- </mrow>
234
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
235
- <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
236
- <UnitName xml:lang='en'>kilogram</UnitName>
237
- <UnitSymbol type='HTML'>kg</UnitSymbol>
238
- <UnitSymbol type='MathML'>
239
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
240
- <mrow>
225
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
226
+ 8 "unitsml(kg)" cdot "unitsml(m)"
227
+ INPUT
228
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
229
+ <mn>8</mn>
230
+ <mo rspace='thickmathspace'>&#x2062;</mo>
231
+ <mrow xref='U_NISTu2'>
241
232
  <mi mathvariant='normal'>kg</mi>
242
233
  </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>
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'>
273
264
  <mi mathvariant='normal'>m</mi>
274
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>
275
281
  </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
282
+ OUTPUT
283
283
  end
284
284
 
285
285
  it "deals with sqrt units" do
286
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
287
- 1 "unitsml(sqrt(Hz))"
286
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
287
+ 1 "unitsml(sqrt(Hz))"
288
288
  INPUT
289
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
290
- <mn>1</mn>
291
- <mo rspace='thickmathspace'>&#x2062;</mo>
292
- <mrow xref='U_sqrtHz'>
293
- <msqrt>
294
- <mi mathvariant='normal'>Hz</mi>
295
- </msqrt>
296
- </mrow>
297
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_Hz0.5' dimensionURL='#D_T-0.5'>
298
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
299
- <UnitName xml:lang='en'>Hz^0.5</UnitName>
300
- <UnitSymbol type='HTML'>&#x221A;Hz</UnitSymbol>
301
- <UnitSymbol type='MathML'>
302
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
303
- <mrow>
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'>
304
293
  <msqrt>
305
294
  <mi mathvariant='normal'>Hz</mi>
306
295
  </msqrt>
307
296
  </mrow>
297
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_Hz0.5' dimensionURL='#D_T-0.5'>
298
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
299
+ <UnitName xml:lang='en'>Hz^0.5</UnitName>
300
+ <UnitSymbol type='HTML'>&#x221A;Hz</UnitSymbol>
301
+ <UnitSymbol type='MathML'>
302
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
303
+ <mrow>
304
+ <msqrt>
305
+ <mi mathvariant='normal'>Hz</mi>
306
+ </msqrt>
307
+ </mrow>
308
+ </math>
309
+ </UnitSymbol>
310
+ </Unit>
311
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_T-0.5'>
312
+ <Time symbol='T' powerNumerator='-0.5'/>
313
+ </Dimension>
308
314
  </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
315
  OUTPUT
316
316
  end
317
317
 
318
318
  it "deals with kg and g" do
319
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
320
- 1 "unitsml(kg)" + 1 "unitsml(g)"
319
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
320
+ 1 "unitsml(kg)" + 1 "unitsml(g)"
321
321
  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
322
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
334
- <mrow>
323
+ <mn>1</mn>
324
+ <mo rspace='thickmathspace'>&#x2062;</mo>
325
+ <mrow xref='U_NISTu2'>
335
326
  <mi mathvariant='normal'>kg</mi>
336
327
  </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>
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'>
369
360
  <mi mathvariant='normal'>g</mi>
370
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>
371
374
  </math>
372
- </UnitSymbol>
373
- </Unit>
374
- </math>
375
375
  OUTPUT
376
376
  end
377
377
 
378
378
  it "deals with non-metric" do
379
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
380
- 1 "unitsml(hp)"
379
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
380
+ 1 "unitsml(hp)"
381
381
  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>
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'>
395
386
  <mi mathvariant='normal'>hp</mi>
396
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>
397
408
  </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
409
  OUTPUT
410
410
  end
411
411
 
412
412
  it "deals with duplicate units" do
413
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
414
- 1 "unitsml(kg*s^-2)" xx 9 "unitsml(kg*s^-2)"
413
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
414
+ 1 "unitsml(kg*s^-2)" xx 9 "unitsml(kg*s^-2)"
415
415
  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'>
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>
441
423
  <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>
424
+ <mi mathvariant='normal'>s</mi>
453
425
  </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>
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'>
441
+ <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>
453
+ </mrow>
454
+ </math>
455
+ </UnitSymbol>
456
+ <RootUnits>
457
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
458
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
459
+ </RootUnits>
460
+ </Unit>
461
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
462
+ <PrefixName xml:lang='en'>kilo</PrefixName>
463
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
464
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
465
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
466
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
467
+ </Prefix>
468
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
469
+ <Mass symbol='M' powerNumerator='1'/>
470
+ <Time symbol='T' powerNumerator='-2'/>
471
+ </Dimension>
472
+ <mo>&#xD7;</mo>
473
+ <mn>9</mn>
474
+ <mo rspace='thickmathspace'>&#x2062;</mo>
475
+ <mrow xref='U_kg.s-2'>
476
+ <mi mathvariant='normal'>kg</mi>
477
+ <mo>&#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
489
  OUTPUT
490
490
  end
491
491
 
492
492
  it "deals with parentheses" do
493
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
494
- 10 "unitsml(K/(kg*m))"
493
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
494
+ 10 "unitsml(K/(kg*m))"
495
495
  INPUT
496
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
497
- <mn>10</mn>
498
- <mo rspace='thickmathspace'>&#x2062;</mo>
499
- <mrow xref='U_K/kg.m'>
500
- <mi mathvariant='normal'>K</mi>
501
- <mo>/</mo>
502
- <mi mathvariant='normal'>kg</mi>
503
- <mo>&#x22C5;</mo>
504
- <mi mathvariant='normal'>m</mi>
505
- </mrow>
506
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_K.kg-1.m-1' dimensionURL='#D_L-1M-1Theta'>
507
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
508
- <UnitName xml:lang='en'>K*kg^-1*m^-1</UnitName>
509
- <UnitSymbol type='HTML'>
510
- K&#x22C5;kg
511
- <sup>&#x2212;1</sup>
512
- &#x22C5;m
513
- <sup>&#x2212;1</sup>
514
- </UnitSymbol>
515
- <UnitSymbol type='MathML'>
516
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
517
- <mrow>
518
- <mi mathvariant='normal'>K</mi>
519
- <mo>&#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
- </mrow>
540
- </math>
541
- </UnitSymbol>
542
- <RootUnits>
543
- <EnumeratedRootUnit unit='kelvin'/>
544
- <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
545
- <EnumeratedRootUnit unit='meter' powerNumerator='-1'/>
546
- </RootUnits>
547
- </Unit>
548
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
549
- <PrefixName xml:lang='en'>kilo</PrefixName>
550
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
551
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
552
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
553
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
554
- </Prefix>
555
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L-1M-1Theta'>
556
- <Length symbol='L' powerNumerator='-1'/>
557
- <Mass symbol='M' powerNumerator='-1'/>
558
- <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
559
- </Dimension>
560
- </math>
496
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
497
+ <mn>10</mn>
498
+ <mo rspace='thickmathspace'>&#x2062;</mo>
499
+ <mrow xref='U_K/kg.m'>
500
+ <mi mathvariant='normal'>K</mi>
501
+ <mo>/</mo>
502
+ <mi mathvariant='normal'>kg</mi>
503
+ <mo>&#x22C5;</mo>
504
+ <mi mathvariant='normal'>m</mi>
505
+ </mrow>
506
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_K.kg-1.m-1' dimensionURL='#D_L-1M-1Theta'>
507
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
508
+ <UnitName xml:lang='en'>K*kg^-1*m^-1</UnitName>
509
+ <UnitSymbol type='HTML'>
510
+ K&#x22C5;kg
511
+ <sup>&#x2212;1</sup>
512
+ &#x22C5;m
513
+ <sup>&#x2212;1</sup>
514
+ </UnitSymbol>
515
+ <UnitSymbol type='MathML'>
516
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
517
+ <mrow>
518
+ <mi mathvariant='normal'>K</mi>
519
+ <mo>&#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
+ </mrow>
540
+ </math>
541
+ </UnitSymbol>
542
+ <RootUnits>
543
+ <EnumeratedRootUnit unit='kelvin'/>
544
+ <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
545
+ <EnumeratedRootUnit unit='meter' powerNumerator='-1'/>
546
+ </RootUnits>
547
+ </Unit>
548
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
549
+ <PrefixName xml:lang='en'>kilo</PrefixName>
550
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
551
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
552
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
553
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
554
+ </Prefix>
555
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L-1M-1Theta'>
556
+ <Length symbol='L' powerNumerator='-1'/>
557
+ <Mass symbol='M' powerNumerator='-1'/>
558
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
559
+ </Dimension>
560
+ </math>
561
561
  OUTPUT
562
562
  end
563
563
 
564
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'>
565
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
566
+ 9 "unitsml(degK)" + 10 "unitsml(K)"
567
+ INPUT
579
568
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
580
- <mrow>
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'>
581
596
  <mi mathvariant='normal'>K</mi>
582
597
  </mrow>
583
598
  </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
599
+ OUTPUT
600
600
  end
601
601
 
602
602
  it "deals with prefixed units" do
603
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
604
- 9 "unitsml(mbar)"
605
- INPUT
606
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
607
- <mn>9</mn>
608
- <mo rspace='thickmathspace'>&#x2062;</mo>
609
- <mrow xref='U_NISTu362'>
610
- <mi mathvariant='normal'>mbar</mi>
611
- </mrow>
612
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu362'>
613
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
614
- <UnitName xml:lang='en'>millibar</UnitName>
615
- <UnitSymbol type='HTML'>mbar</UnitSymbol>
616
- <UnitSymbol type='MathML'>
603
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
604
+ 9 "unitsml(mbar)"
605
+ INPUT
617
606
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
618
- <mrow>
607
+ <mn>9</mn>
608
+ <mo rspace='thickmathspace'>&#x2062;</mo>
609
+ <mrow xref='U_NISTu362'>
619
610
  <mi mathvariant='normal'>mbar</mi>
620
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>
621
639
  </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
640
+ OUTPUT
641
641
  end
642
642
 
643
643
  it "deals with standalone prefixes" do
644
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
645
- "unitsml(p-)" "unitsml(da-)"
644
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
645
+ "unitsml(p-)" "unitsml(da-)"
646
646
  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>
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
670
  OUTPUT
671
671
  end
672
672
 
673
673
  it "deals with HTML entities in UnitsDB" do
674
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
675
- "unitsml(u-)" + "unitsml(um)"
676
- INPUT
677
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
678
- <mrow xref='NISTp10_-6'>
679
- <mi mathvariant='normal'>&#xB5;</mi>
680
- </mrow>
681
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
682
- <PrefixName xml:lang='en'>micro</PrefixName>
683
- <PrefixSymbol type='ASCII'>u</PrefixSymbol>
684
- <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
685
- <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
686
- <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
687
- </Prefix>
688
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
689
- <Mass symbol='M' powerNumerator='1'/>
690
- </Dimension>
691
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
692
- <QuantityName xml:lang='en-US'>mass</QuantityName>
693
- </Quantity>
694
- <mo>+</mo>
695
- <mrow xref='U_um'>
696
- <mi mathvariant='normal'>&#xB5;m</mi>
697
- </mrow>
698
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
699
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
700
- <UnitName xml:lang='en'>um</UnitName>
701
- <UnitSymbol type='HTML'>um</UnitSymbol>
702
- <UnitSymbol type='MathML'>
674
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
675
+ "unitsml(u-)" + "unitsml(um)"
676
+ INPUT
703
677
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
704
- <mrow>
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'>
705
696
  <mi mathvariant='normal'>&#xB5;m</mi>
706
697
  </mrow>
698
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
699
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
700
+ <UnitName xml:lang='en'>um</UnitName>
701
+ <UnitSymbol type='HTML'>um</UnitSymbol>
702
+ <UnitSymbol type='MathML'>
703
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
704
+ <mrow>
705
+ <mi mathvariant='normal'>&#xB5;m</mi>
706
+ </mrow>
707
+ </math>
708
+ </UnitSymbol>
709
+ <RootUnits>
710
+ <EnumeratedRootUnit unit='meter' prefix='u'/>
711
+ </RootUnits>
712
+ </Unit>
713
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
714
+ <Length symbol='L' powerNumerator='1'/>
715
+ </Dimension>
707
716
  </math>
708
- </UnitSymbol>
709
- <RootUnits>
710
- <EnumeratedRootUnit unit='meter' prefix='u'/>
711
- </RootUnits>
712
- </Unit>
713
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
714
- <Length symbol='L' powerNumerator='1'/>
715
- </Dimension>
716
- </math>
717
717
  OUTPUT
718
718
  end
719
719
 
720
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)"
723
- INPUT
724
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
725
- <mn>9</mn>
726
- <mo rspace='thickmathspace'>&#x2062;</mo>
727
- <mrow xref='U_A.C3'>
728
- <mi mathvariant='normal'>A</mi>
729
- <mo>&#x22C5;</mo>
730
- <msup>
731
- <mrow>
732
- <mi mathvariant='normal'>C</mi>
733
- </mrow>
734
- <mrow>
735
- <mn>3</mn>
736
- </mrow>
737
- </msup>
738
- </mrow>
739
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_A.C3' dimensionURL='#D_M3I4'>
740
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
741
- <UnitName xml:lang='en'>A*C^3</UnitName>
742
- <UnitSymbol type='HTML'>
743
- A&#x22C5;C
744
- <sup>3</sup>
745
- </UnitSymbol>
746
- <UnitSymbol type='MathML'>
747
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
748
- <mrow>
721
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
722
+ 9 "unitsml(A*C^3)" + 13 "unitsml(A/C^-3)" + 2 "unitsml(J/kg*K)"
723
+ INPUT
724
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
725
+ <mn>9</mn>
726
+ <mo rspace='thickmathspace'>&#x2062;</mo>
727
+ <mrow xref='U_A.C3'>
749
728
  <mi mathvariant='normal'>A</mi>
750
729
  <mo>&#x22C5;</mo>
751
730
  <msup>
@@ -757,215 +736,217 @@ INPUT
757
736
  </mrow>
758
737
  </msup>
759
738
  </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>
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'>
809
791
  <mi mathvariant='normal'>J</mi>
792
+ <mo>/</mo>
793
+ <mi mathvariant='normal'>kg</mi>
810
794
  <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>
795
+ <mi mathvariant='normal'>K</mi>
830
796
  </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
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
859
  end
860
860
 
861
861
  it "converts MathML to MatML + UnitsML" do
862
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>
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
871
  INPUT
872
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>
873
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
874
+ <mn>32</mn>
875
+ <mo>+</mo>
876
+ <mn>5</mn>
877
+ <mo>&#xD7;</mo>
878
+ <mn>7</mn>
879
+ <mo rspace='thickmathspace'>&#x2062;</mo>
880
+ <mrow xref='U_kg-2'>
881
+ <msup>
882
+ <mrow>
883
+ <mi mathvariant='normal'>kg</mi>
884
+ </mrow>
885
+ <mrow>
886
+ <mo>&#x2212;</mo>
887
+ <mn>2</mn>
888
+ </mrow>
889
+ </msup>
890
+ </mrow>
891
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg-2' dimensionURL='#D_M-2'>
892
+ <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
893
+ <UnitName xml:lang='en'>kg^-2</UnitName>
894
+ <UnitSymbol type='HTML'>
895
+ kg
896
+ <sup>&#x2212;2</sup>
897
+ </UnitSymbol>
898
+ <UnitSymbol type='MathML'>
899
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
885
900
  <mrow>
886
- <mo>&#x2212;</mo>
887
- <mn>2</mn>
901
+ <msup>
902
+ <mrow>
903
+ <mi mathvariant='normal'>kg</mi>
904
+ </mrow>
905
+ <mrow>
906
+ <mo>&#x2212;</mo>
907
+ <mn>2</mn>
908
+ </mrow>
909
+ </msup>
888
910
  </mrow>
889
- </msup>
890
- </mrow>
891
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg-2' dimensionURL='#D_M-2'>
892
- <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
893
- <UnitName xml:lang='en'>kg^-2</UnitName>
894
- <UnitSymbol type='HTML'>
895
- kg
896
- <sup>&#x2212;2</sup>
897
- </UnitSymbol>
898
- <UnitSymbol type='MathML'>
899
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
900
- <mrow>
901
- <msup>
902
- <mrow>
903
- <mi mathvariant='normal'>kg</mi>
904
- </mrow>
905
- <mrow>
906
- <mo>&#x2212;</mo>
907
- <mn>2</mn>
908
- </mrow>
909
- </msup>
910
- </mrow>
911
- </math>
912
- </UnitSymbol>
913
- <RootUnits>
914
- <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-2'/>
915
- </RootUnits>
916
- </Unit>
917
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
918
- <PrefixName xml:lang='en'>kilo</PrefixName>
919
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
920
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
921
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
922
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
923
- </Prefix>
924
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M-2'>
925
- <Mass symbol='M' powerNumerator='-2'/>
926
- </Dimension>
927
- </math>
928
- OUTPUT
929
- expect(xmlpp(Asciimath2UnitsML::Conv.new().MathML2UnitsML(input).to_xml)).to be_equivalent_to xmlpp(output)
930
- expect(xmlpp(Asciimath2UnitsML::Conv.new().MathML2UnitsML(Nokogiri::XML(input)).to_xml)).to be_equivalent_to xmlpp(output)
911
+ </math>
912
+ </UnitSymbol>
913
+ <RootUnits>
914
+ <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-2'/>
915
+ </RootUnits>
916
+ </Unit>
917
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
918
+ <PrefixName xml:lang='en'>kilo</PrefixName>
919
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
920
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
921
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
922
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
923
+ </Prefix>
924
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M-2'>
925
+ <Mass symbol='M' powerNumerator='-2'/>
926
+ </Dimension>
927
+ </math>
928
+ OUTPUT
929
+ expect(xmlpp(Asciimath2UnitsML::Conv.new
930
+ .MathML2UnitsML(input).to_xml)).to be_equivalent_to xmlpp(output)
931
+ expect(xmlpp(Asciimath2UnitsML::Conv.new
932
+ .MathML2UnitsML(Nokogiri::XML(input)).to_xml))
933
+ .to be_equivalent_to xmlpp(output)
931
934
  end
932
935
 
933
936
  it "raises error for illegal unit" do
934
- expect{xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))}.to raise_error(Rsec::SyntaxError)
935
- 12 "unitsml(que?)"
937
+ expect { xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT)) }.to raise_error(Rsec::SyntaxError)
938
+ 12 "unitsml(que?)"
936
939
  INPUT
937
940
  end
938
941
 
939
942
  it "initialises multiplier" do
940
943
  expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: "\u00d7").Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
941
- 1 "unitsml(kg*s^-2)"
944
+ 1 "unitsml(kg*s^-2)"
942
945
  INPUT
943
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
944
- <mn>1</mn>
945
- <mo rspace='thickmathspace'>&#x2062;</mo>
946
- <mrow xref='U_kg.s-2'>
947
- <mi mathvariant='normal'>kg</mi>
948
- <mo>&#xD7;</mo>
949
- <msup>
950
- <mrow>
951
- <mi mathvariant='normal'>s</mi>
952
- </mrow>
953
- <mrow>
954
- <mo>&#x2212;</mo>
955
- <mn>2</mn>
956
- </mrow>
957
- </msup>
958
- </mrow>
959
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
960
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
961
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
962
- <UnitSymbol type='HTML'>
963
- kg&#xD7;s
964
- <sup>&#x2212;2</sup>
965
- </UnitSymbol>
966
- <UnitSymbol type='MathML'>
967
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
968
- <mrow>
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'>
969
950
  <mi mathvariant='normal'>kg</mi>
970
951
  <mo>&#xD7;</mo>
971
952
  <msup>
@@ -978,116 +959,116 @@ OUTPUT
978
959
  </mrow>
979
960
  </msup>
980
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'>
970
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
971
+ <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>
983
+ </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>
981
1002
  </math>
982
- </UnitSymbol>
983
- <RootUnits>
984
- <EnumeratedRootUnit unit='gram' prefix='k'/>
985
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
986
- </RootUnits>
987
- </Unit>
988
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
989
- <PrefixName xml:lang='en'>kilo</PrefixName>
990
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
991
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
992
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
993
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
994
- </Prefix>
995
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
996
- <Mass symbol='M' powerNumerator='1'/>
997
- <Time symbol='T' powerNumerator='-2'/>
998
- </Dimension>
999
- </math>
1000
1003
  OUTPUT
1001
1004
  expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :space).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1002
- 1 "unitsml(kg*s^-2)"
1005
+ 1 "unitsml(kg*s^-2)"
1003
1006
  INPUT
1004
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1005
- <mn>1</mn>
1006
- <mo rspace='thickmathspace'>&#x2062;</mo>
1007
- <mrow xref='U_kg.s-2'>
1008
- <mi mathvariant='normal'>kg</mi>
1007
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1008
+ <mn>1</mn>
1009
1009
  <mo rspace='thickmathspace'>&#x2062;</mo>
1010
- <msup>
1011
- <mrow>
1012
- <mi mathvariant='normal'>s</mi>
1013
- </mrow>
1014
- <mrow>
1015
- <mo>&#x2212;</mo>
1016
- <mn>2</mn>
1017
- </mrow>
1018
- </msup>
1019
- </mrow>
1020
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1021
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1022
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
1023
- <UnitSymbol type='HTML'>
1024
- kg&#xA0;s
1025
- <sup>&#x2212;2</sup>
1026
- </UnitSymbol>
1027
- <UnitSymbol type='MathML'>
1028
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1010
+ <mrow xref='U_kg.s-2'>
1011
+ <mi mathvariant='normal'>kg</mi>
1012
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1013
+ <msup>
1029
1014
  <mrow>
1030
- <mi mathvariant='normal'>kg</mi>
1031
- <mo rspace='thickmathspace'>&#x2062;</mo>
1032
- <msup>
1033
- <mrow>
1034
- <mi mathvariant='normal'>s</mi>
1035
- </mrow>
1036
- <mrow>
1037
- <mo>&#x2212;</mo>
1038
- <mn>2</mn>
1039
- </mrow>
1040
- </msup>
1015
+ <mi mathvariant='normal'>s</mi>
1041
1016
  </mrow>
1042
- </math>
1043
- </UnitSymbol>
1044
- <RootUnits>
1045
- <EnumeratedRootUnit unit='gram' prefix='k'/>
1046
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1047
- </RootUnits>
1048
- </Unit>
1049
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1050
- <PrefixName xml:lang='en'>kilo</PrefixName>
1051
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1052
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
1053
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1054
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
1055
- </Prefix>
1056
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1057
- <Mass symbol='M' powerNumerator='1'/>
1058
- <Time symbol='T' powerNumerator='-2'/>
1059
- </Dimension>
1060
- </math>
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'>
1032
+ <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>
1044
+ </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>
1061
1064
  OUTPUT
1062
1065
  expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :nospace).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1063
- 1 "unitsml(kg*s^-2)"
1066
+ 1 "unitsml(kg*s^-2)"
1064
1067
  INPUT
1065
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1066
- <mn>1</mn>
1067
- <mo rspace='thickmathspace'>&#x2062;</mo>
1068
- <mrow xref='U_kg.s-2'>
1069
- <mi mathvariant='normal'>kg</mi>
1070
- <mo>&#x2062;</mo>
1071
- <msup>
1072
- <mrow>
1073
- <mi mathvariant='normal'>s</mi>
1074
- </mrow>
1075
- <mrow>
1076
- <mo>&#x2212;</mo>
1077
- <mn>2</mn>
1078
- </mrow>
1079
- </msup>
1080
- </mrow>
1081
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1082
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1083
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
1084
- <UnitSymbol type='HTML'>
1085
- kgs
1086
- <sup>&#x2212;2</sup>
1087
- </UnitSymbol>
1088
- <UnitSymbol type='MathML'>
1089
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1090
- <mrow>
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'>
1091
1072
  <mi mathvariant='normal'>kg</mi>
1092
1073
  <mo>&#x2062;</mo>
1093
1074
  <msup>
@@ -1100,58 +1081,58 @@ OUTPUT
1100
1081
  </mrow>
1101
1082
  </msup>
1102
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'>
1092
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1093
+ <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>
1105
+ </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>
1103
1124
  </math>
1104
- </UnitSymbol>
1105
- <RootUnits>
1106
- <EnumeratedRootUnit unit='gram' prefix='k'/>
1107
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1108
- </RootUnits>
1109
- </Unit>
1110
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1111
- <PrefixName xml:lang='en'>kilo</PrefixName>
1112
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1113
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
1114
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1115
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
1116
- </Prefix>
1117
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1118
- <Mass symbol='M' powerNumerator='1'/>
1119
- <Time symbol='T' powerNumerator='-2'/>
1120
- </Dimension>
1121
- </math>
1122
1125
  OUTPUT
1123
1126
  end
1124
1127
 
1125
1128
  it "deals with dimension decomposition with like units" do
1126
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1127
- 9 "unitsml(mW*cm^(-2))"
1128
- INPUT
1129
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1130
- <mn>9</mn>
1131
- <mo rspace='thickmathspace'>&#x2062;</mo>
1132
- <mrow xref='U_mW.cm-2'>
1133
- <mi mathvariant='normal'>mW</mi>
1134
- <mo>&#x22C5;</mo>
1135
- <msup>
1136
- <mrow>
1137
- <mi mathvariant='normal'>cm</mi>
1138
- </mrow>
1139
- <mrow>
1140
- <mo>&#x2212;</mo>
1141
- <mn>2</mn>
1142
- </mrow>
1143
- </msup>
1144
- </mrow>
1145
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mW.cm-2'>
1146
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1147
- <UnitName xml:lang='en'>mW*cm^-2</UnitName>
1148
- <UnitSymbol type='HTML'>
1149
- mW&#x22C5;cm
1150
- <sup>&#x2212;2</sup>
1151
- </UnitSymbol>
1152
- <UnitSymbol type='MathML'>
1153
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1154
- <mrow>
1129
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1130
+ 9 "unitsml(mW*cm^(-2))"
1131
+ 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'>
1155
1136
  <mi mathvariant='normal'>mW</mi>
1156
1137
  <mo>&#x22C5;</mo>
1157
1138
  <msup>
@@ -1164,102 +1145,93 @@ INPUT
1164
1145
  </mrow>
1165
1146
  </msup>
1166
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'>
1157
+ <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>
1169
+ </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>
1167
1191
  </math>
1168
- </UnitSymbol>
1169
- <RootUnits>
1170
- <EnumeratedRootUnit unit='watt' prefix='m'/>
1171
- <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1172
- </RootUnits>
1173
- </Unit>
1174
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
1175
- <PrefixName xml:lang='en'>milli</PrefixName>
1176
- <PrefixSymbol type='ASCII'>m</PrefixSymbol>
1177
- <PrefixSymbol type='unicode'>m</PrefixSymbol>
1178
- <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
1179
- <PrefixSymbol type='HTML'>m</PrefixSymbol>
1180
- </Prefix>
1181
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1182
- <PrefixName xml:lang='en'>centi</PrefixName>
1183
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1184
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1185
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1186
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1187
- </Prefix>
1188
- </math>
1189
- OUTPUT
1192
+ OUTPUT
1190
1193
  end
1191
1194
 
1192
1195
  it "deals with quantity input" do
1193
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1194
- 9 "unitsml(m, quantity: NISTq103)"
1195
- INPUT
1196
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1197
- <mn>9</mn>
1198
- <mo rspace='thickmathspace'>&#x2062;</mo>
1199
- <mrow xref='U_NISTu1'>
1200
- <mi mathvariant='normal'>m</mi>
1201
- </mrow>
1202
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1203
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1204
- <UnitName xml:lang='en'>meter</UnitName>
1205
- <UnitSymbol type='HTML'>m</UnitSymbol>
1206
- <UnitSymbol type='MathML'>
1196
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1197
+ 9 "unitsml(m, quantity: NISTq103)"
1198
+ INPUT
1207
1199
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
1208
- <mrow>
1200
+ <mn>9</mn>
1201
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1202
+ <mrow xref='U_NISTu1'>
1209
1203
  <mi mathvariant='normal'>m</mi>
1210
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>
1211
1223
  </math>
1212
- </UnitSymbol>
1213
- </Unit>
1214
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1215
- <Length symbol='L' powerNumerator='1'/>
1216
- </Dimension>
1217
- <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq103' dimensionURL='#NISTd1' quantityType='base'>
1218
- <QuantityName xml:lang='en-US'>position vector</QuantityName>
1219
- </Quantity>
1220
- </math>
1221
- OUTPUT
1222
- end
1224
+ OUTPUT
1225
+ end
1223
1226
 
1224
1227
  it "deals with name input" do
1225
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1226
- 9 "unitsml(cal_th/cm^2, name: langley)"
1227
- INPUT
1228
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1229
- <mn>9</mn>
1230
- <mo rspace='thickmathspace'>&#x2062;</mo>
1231
- <mrow xref='U_cal_th/cm2'>
1232
- <msub>
1233
- <mrow>
1234
- <mi mathvariant='normal'>cal</mi>
1235
- </mrow>
1236
- <mrow>
1237
- <mi mathvariant='normal'>th</mi>
1238
- </mrow>
1239
- </msub>
1240
- <mo>/</mo>
1241
- <msup>
1242
- <mrow>
1243
- <mi mathvariant='normal'>cm</mi>
1244
- </mrow>
1245
- <mrow>
1246
- <mn>2</mn>
1247
- </mrow>
1248
- </msup>
1249
- </mrow>
1250
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cal_th.cm-2'>
1251
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
1252
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1253
- <UnitName xml:lang='en'>langley</UnitName>
1254
- <UnitSymbol type='HTML'>
1255
- cal
1256
- <sub>th</sub>
1257
- &#x22C5;cm
1258
- <sup>&#x2212;2</sup>
1259
- </UnitSymbol>
1260
- <UnitSymbol type='MathML'>
1261
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1262
- <mrow>
1228
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1229
+ 9 "unitsml(cal_th/cm^2, name: langley)"
1230
+ 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'>
1263
1235
  <msub>
1264
1236
  <mrow>
1265
1237
  <mi mathvariant='normal'>cal</mi>
@@ -1268,158 +1240,167 @@ INPUT
1268
1240
  <mi mathvariant='normal'>th</mi>
1269
1241
  </mrow>
1270
1242
  </msub>
1271
- <mo>&#x22C5;</mo>
1243
+ <mo>/</mo>
1272
1244
  <msup>
1273
1245
  <mrow>
1274
1246
  <mi mathvariant='normal'>cm</mi>
1275
1247
  </mrow>
1276
1248
  <mrow>
1277
- <mo>&#x2212;</mo>
1278
1249
  <mn>2</mn>
1279
1250
  </mrow>
1280
1251
  </msup>
1281
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'>
1265
+ <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>
1284
+ </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>
1282
1299
  </math>
1283
- </UnitSymbol>
1284
- <RootUnits>
1285
- <EnumeratedRootUnit unit='thermochemical calorie'/>
1286
- <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1287
- </RootUnits>
1288
- </Unit>
1289
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1290
- <PrefixName xml:lang='en'>centi</PrefixName>
1291
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1292
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1293
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1294
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1295
- </Prefix>
1296
- </math>
1297
- OUTPUT
1298
- end
1300
+ OUTPUT
1301
+ end
1299
1302
 
1300
- it "deals with symbol input" do
1301
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1302
- 9 "unitsml(m, symbol: La)" + 10 "unitsml(cm*s^-2, symbol: cm cdot s^-2)"
1303
- INPUT
1304
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1305
- <mn>9</mn>
1306
- <mo rspace='thickmathspace'>&#x2062;</mo>
1307
- <mrow xref='U_NISTu1'>
1308
- <math>
1309
- <mi mathvariant='normal'>L</mi>
1310
- <mi mathvariant='normal'>a</mi>
1311
- </math>
1312
- </mrow>
1313
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1314
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1315
- <UnitName xml:lang='en'>meter</UnitName>
1316
- <UnitSymbol type='HTML'>m</UnitSymbol>
1317
- <UnitSymbol type='MathML'>
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
1318
1307
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
1319
- <mrow>
1320
- <mi mathvariant='normal'>m</mi>
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>
1321
1315
  </mrow>
1322
- </math>
1323
- </UnitSymbol>
1324
- </Unit>
1325
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1326
- <Length symbol='L' powerNumerator='1'/>
1327
- </Dimension>
1328
- <mo>+</mo>
1329
- <mn>10</mn>
1330
- <mo rspace='thickmathspace'>&#x2062;</mo>
1331
- <mrow xref='U_cm.s-2'>
1332
- <math>
1333
- <mi mathvariant='normal'>c</mi>
1334
- <mi mathvariant='normal'>m</mi>
1335
- <mo>&#x22C5;</mo>
1336
- <msup>
1337
- <mrow>
1338
- <mi mathvariant='normal'>s</mi>
1339
- </mrow>
1340
- <mrow>
1341
- <mo>&#x2212;</mo>
1342
- </mrow>
1343
- </msup>
1344
- <mn>2</mn>
1345
- </math>
1346
- </mrow>
1347
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1348
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1349
- <UnitName xml:lang='en'>cm*s^-2</UnitName>
1350
- <UnitSymbol type='HTML'>
1351
- cm&#x22C5;s
1352
- <sup>&#x2212;2</sup>
1353
- </UnitSymbol>
1354
- <UnitSymbol type='MathML'>
1355
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1356
- <mrow>
1357
- <mi mathvariant='normal'>cm</mi>
1358
- <mo>&#x22C5;</mo>
1359
- <msup>
1360
- <mrow>
1361
- <mi mathvariant='normal'>s</mi>
1362
- </mrow>
1363
- <mrow>
1364
- <mo>&#x2212;</mo>
1365
- <mn>2</mn>
1366
- </mrow>
1367
- </msup>
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
+ <mrow>
1323
+ <mi mathvariant='normal'>m</mi>
1324
+ </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>
1339
+ <msup>
1340
+ <mrow>
1341
+ <mi mathvariant='normal'>s</mi>
1342
+ </mrow>
1343
+ <mrow>
1344
+ <mo>&#x2212;</mo>
1345
+ </mrow>
1346
+ </msup>
1347
+ <mn>2</mn>
1348
+ </math>
1368
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>
1369
1390
  </math>
1370
- </UnitSymbol>
1371
- <RootUnits>
1372
- <EnumeratedRootUnit unit='meter' prefix='c'/>
1373
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1374
- </RootUnits>
1375
- </Unit>
1376
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1377
- <PrefixName xml:lang='en'>centi</PrefixName>
1378
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1379
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1380
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1381
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1382
- </Prefix>
1383
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1384
- <Length symbol='L' powerNumerator='1'/>
1385
- <Time symbol='T' powerNumerator='-2'/>
1386
- </Dimension>
1387
- </math>
1388
- OUTPUT
1389
- end
1391
+ OUTPUT
1392
+ end
1390
1393
 
1391
- it "deals with multiplier input" do
1392
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1393
- 10 "unitsml(cm*s^-2, multiplier: xx)"
1394
- INPUT
1395
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1396
- <mn>10</mn>
1397
- <mo rspace='thickmathspace'>&#x2062;</mo>
1398
- <mrow xref='U_cm.s-2'>
1399
- <mi mathvariant='normal'>cm</mi>
1400
- <mo>xx</mo>
1401
- <msup>
1402
- <mrow>
1403
- <mi mathvariant='normal'>s</mi>
1404
- </mrow>
1405
- <mrow>
1406
- <mo>&#x2212;</mo>
1407
- <mn>2</mn>
1408
- </mrow>
1409
- </msup>
1410
- </mrow>
1411
- <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1412
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1413
- <UnitName xml:lang='en'>cm*s^-2</UnitName>
1414
- <UnitSymbol type='HTML'>
1415
- cm&#x22C5;s
1416
- <sup>&#x2212;2</sup>
1417
- </UnitSymbol>
1418
- <UnitSymbol type='MathML'>
1394
+ it "deals with multiplier input" do
1395
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1396
+ 10 "unitsml(cm*s^-2, multiplier: xx)"
1397
+ INPUT
1419
1398
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
1420
- <mrow>
1399
+ <mn>10</mn>
1400
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1401
+ <mrow xref='U_cm.s-2'>
1421
1402
  <mi mathvariant='normal'>cm</mi>
1422
- <mo>&#x22C5;</mo>
1403
+ <mo>xx</mo>
1423
1404
  <msup>
1424
1405
  <mrow>
1425
1406
  <mi mathvariant='normal'>s</mi>
@@ -1430,26 +1411,47 @@ INPUT
1430
1411
  </mrow>
1431
1412
  </msup>
1432
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'>
1422
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1423
+ <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>
1435
+ </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>
1433
1454
  </math>
1434
- </UnitSymbol>
1435
- <RootUnits>
1436
- <EnumeratedRootUnit unit='meter' prefix='c'/>
1437
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1438
- </RootUnits>
1439
- </Unit>
1440
- <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1441
- <PrefixName xml:lang='en'>centi</PrefixName>
1442
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1443
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1444
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1445
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1446
- </Prefix>
1447
- <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1448
- <Length symbol='L' powerNumerator='1'/>
1449
- <Time symbol='T' powerNumerator='-2'/>
1450
- </Dimension>
1451
- </math>
1452
- OUTPUT
1453
- end
1454
-
1455
+ OUTPUT
1456
+ end
1455
1457
  end