asciimath2unitsml 0.3.0 → 0.4.0

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