diff --git a/lib/unitsml/formula.rb b/lib/unitsml/formula.rb
index 957e6a0..4ae16d5 100644
--- a/lib/unitsml/formula.rb
+++ b/lib/unitsml/formula.rb
@@ -35,9 +35,9 @@ def to_mathml(options = {})
math.ordered = true
math.element_order ||= []
value.each { |instance| process_value(math, instance.to_mathml(options)) }
-
generated_math = math.to_xml.gsub(/&(.*?)(?=<\/)/, '&\1')
reset_mml_models if plurimath_available?
+
generated_math
else
value.map { |obj| obj.to_mathml(options) }
diff --git a/lib/unitsml/intermediate_exp_rules.rb b/lib/unitsml/intermediate_exp_rules.rb
index dc64151..d8bbc95 100644
--- a/lib/unitsml/intermediate_exp_rules.rb
+++ b/lib/unitsml/intermediate_exp_rules.rb
@@ -3,33 +3,62 @@ module IntermediateExpRules
include Parslet
# Rules for slashed number
- rule(:slashed_number_int_exp) { slashed_number | (str("(") >> slashed_number >> str(")")) }
+ rule(:slashed_number_int_exp) { slashed_number | (opening_paren >> slashed_number >> closing_paren) }
# Rules for prefixes_units
- rule(:prefixes_units_int_exp) { prefixes_units | (str("(") >> prefixes_units_named_exp.as(:intermediate_exp) >> str(")") >> extended_prefixed_units.maybe) }
- rule(:extended_prefixed_units) { extender >> prefixes_units_int_exp.as(:sequence) }
- rule(:prefixes_units_named_exp) do
- prefixes_units |
- ((str("(").as(:open_parenthesis) >> prefixes_units_int_exp.as(:int_exp) >> str(")").as(:close_parenthesis)).as(:intermediate_exp) >> extended_prefixed_units.maybe)
+ rule(:wrapper_prefixes_units_value) { int_exp_prefixes_units | prefixes_units_int_exp }
+
+ rule(:extended_prefixed_units) { extender >> spaces? >> prefixes_units_int_exp.as(:sequence) }
+
+ rule(:int_exp_prefixes_units) { opening_paren >> spaces? >> named_int_exp_prefixes_units.as(:int_exp) >> spaces? >> closing_paren }
+
+ rule(:implicit_extended) do
+ prefixes_units.as(:first_set) >> spaces.as(:extender) >> prefixes_units.as(:second_set) |
+ int_exp_prefixes_units.as(:first_int_exp_set) >> spaces? >> int_exp_prefixes_units.as(:second_int_exp_set) |
+ prefixes_units.as(:first_set) >> spaces? >> int_exp_prefixes_units.as(:second_int_exp_set) |
+ int_exp_prefixes_units.as(:first_int_exp_set) >> spaces? >> prefixes_units.as(:second_set)
+ end
+
+ rule(:prefixes_units_int_exp) do
+ implicit_extended.as(:implicit_extended) >> spaces? >> prefixes_units_int_exp.as(:sequence).maybe |
+ implicit_extended.as(:implicit_extended) >> spaces? >> extender >> spaces? >> prefixes_units_int_exp.as(:sequence).maybe |
+ int_exp_prefixes_units >> spaces? >> extender >> spaces? >> prefixes_units_int_exp.as(:sequence).maybe |
+ prefixes_units >> spaces? >> extender >> spaces? >> prefixes_units_int_exp.as(:sequence).maybe |
+ int_exp_prefixes_units >> prefixes_units_int_exp.as(:sequence).maybe |
+ prefixes_units >> prefixes_units_int_exp.as(:sequence).maybe
+ end
+
+ rule(:prefixes_units_named_int_exp) do
+ opening_paren.as(:open_paren) >> spaces? >> wrapper_prefixes_units_value.as(:int_exp) >> spaces? >> closing_paren.as(:close_paren)
+ end
+
+ rule(:named_int_exp_prefixes_units) do
+ prefixes_units_named_int_exp.as(:int_exp) >> (prefixes_units_int_exp | extended_prefixed_units).maybe |
+ prefixes_units_int_exp
end
# Rules for dimension_rules
- rule(:dimension_rules_int_exp) { dimension_rules | (str("(") >> dimension_rules_named_exp.as(:intermediate_exp) >> str(")") >> extended_dimension_rules.maybe) }
- rule(:extended_dimension_rules) { extender >> dimension_rules_int_exp.as(:sequence) }
+ rule(:dimension_rules_int_exp) do
+ dimension_rules.as(:first_set) >> spaces.as(:extender) >> dimension_rules.as(:second_set) >> dimension_rules_int_exp.maybe |
+ dimension_rules.as(:first_set) >> spaces? >> int_exp_dimension_rules.as(:second_int_exp_set) >> dimension_rules_int_exp.maybe |
+ int_exp_dimension_rules.as(:first_int_exp_set) >> spaces? >> dimension_rules.as(:second_set) >> dimension_rules_int_exp.maybe |
+ int_exp_dimension_rules.as(:first_int_exp_set) >> spaces? >> int_exp_dimension_rules.as(:second_int_exp_set) >> dimension_rules_int_exp.maybe |
+ int_exp_dimension_rules |
+ dimension_rules
+ end
+
+ rule(:int_exp_dimension_rules) { opening_paren >> dimension_rules_named_exp.as(:int_exp) >> closing_paren >> extended_dimension_rules.maybe }
+
+ rule(:extended_dimension_rules) { spaces? >> extender >> spaces? >> dimension_rules_int_exp.as(:sequence) }
rule(:dimension_rules_named_exp) do
- dimension_rules |
- ((str("(").as(:open_parenthesis) >> dimension_rules_int_exp.as(:int_exp) >> str(")").as(:close_parenthesis)).as(:intermediate_exp) >> extended_dimension_rules.maybe)
+ ((opening_paren.as(:open_paren) >> dimension_rules_int_exp.as(:int_exp) >> closing_paren.as(:close_paren)).as(:int_exp) >> spaces? >> (dimension_rules_int_exp | extended_dimension_rules).as(:sequence).maybe) |
+ dimension_rules_int_exp
end
# Rules for dimensions
- rule(:sqrt_dimensions) { str("sqrt(") >> dimensions_int_exp.as(:sqrt) >> str(")") }
- rule(:powered_dimensions) { dimensions >> power.maybe }
- rule(:dimensions_int_exp) { powered_dimensions | (str("(") >> dimensions_named_exp.as(:intermediate_exp) >> str(")")) }
- rule(:dimensions_named_exp) { powered_dimensions | (str("(").as(:open_parenthesis) >> dimensions_int_exp.as(:int_exp) >> str(")").as(:close_parenthesis)) }
+ rule(:sqrt_dimensions) { sqrt >> opening_paren >> dimension_rules_int_exp.as(:sqrt) >> closing_paren }
# Rules for sequence
- rule(:sqrt_sequence) { str("sqrt(") >> sequence_int_exp.as(:sqrt) >> str(")") }
- rule(:sequence_int_exp) { sequence | (str("(") >> sequence_named_exp.as(:intermediate_exp)>> str(")")) }
- rule(:sequence_named_exp) { sequence | (str("(").as(:open_parenthesis) >> sequence_int_exp.as(:int_exp) >> str(")").as(:close_parenthesis)) }
+ rule(:sqrt_sequence) { sqrt >> opening_paren >> prefixes_units_int_exp.as(:sqrt) >> closing_paren }
end
end
diff --git a/lib/unitsml/parse.rb b/lib/unitsml/parse.rb
index fe875d7..fce3131 100644
--- a/lib/unitsml/parse.rb
+++ b/lib/unitsml/parse.rb
@@ -7,49 +7,51 @@ module Unitsml
class Parse < Parslet::Parser
include IntermediateExpRules
- rule(:power) { str("^") >> slashed_number_int_exp }
+ rule(:sqrt) { str("sqrt") }
+ rule(:power) { str("^") >> slashed_number_int_exp }
rule(:hyphen) { str("-") }
rule(:number) { hyphen.maybe >> match(/[0-9]/).repeat(1) }
+ rule(:spaces) { match(/\s/).repeat(1) }
+ rule(:spaces?) { spaces.maybe }
rule(:extender) { (forward_slashes | str("*")).as(:extender) }
rule(:sequence) { single_letter_prefixes >> units | double_letter_prefixes >> units | units }
+ rule(:opening_paren) { str("(")}
+ rule(:closing_paren) { str(")")}
rule(:unit_and_power) { units >> power.maybe }
rule(:slashed_number) { (number >> (forward_slashes >> number).maybe).as(:integer) }
rule(:forward_slashes) { str("//") | str("/") }
+ rule(:dimension_rules) { (sqrt_dimensions | powered_dimensions) >> extended_dimension_rules.maybe }
+ rule(:powered_dimensions) { dimensions >> power.maybe }
rule(:units) do
- @@filtered_units ||= arr_to_expression(Unitsdb.units.filtered, "units")
+ @@filtered_units ||= arr_to_expression(Unitsdb.units.filtered, "unit")
end
rule(:single_letter_prefixes) do
- @@prefixes1 ||= arr_to_expression(Unitsdb.prefixes_by_size(1), "prefixes")
+ @@prefixes1 ||= arr_to_expression(Unitsdb.prefixes_by_size(1), "prefix")
end
rule(:double_letter_prefixes) do
- @@prefixes2 ||= arr_to_expression(Unitsdb.prefixes_by_size(2), "prefixes")
+ @@prefixes2 ||= arr_to_expression(Unitsdb.prefixes_by_size(2), "prefix")
end
rule(:dimensions) do
- @@dimensions ||= arr_to_expression(Unitsdb.dimensions.parsables.keys, "dimensions")
+ @@dimensions ||= arr_to_expression(Unitsdb.dimensions.parsables.keys, "dimension")
end
rule(:prefixes_units) do
(sqrt_sequence >> extended_prefixed_units.maybe) |
- (str("1").as(:units) >> extended_prefixed_units.maybe) |
+ (str("1").as(:unit) >> extended_prefixed_units.maybe) |
(unit_and_power >> extended_prefixed_units) |
- unit_and_power >> (str(")").present? | any.absent?) |
+ unit_and_power >> (any.absent? | (extender | opening_paren | closing_paren | spaces).present?) |
(double_letter_prefixes >> unit_and_power >> extended_prefixed_units) |
(double_letter_prefixes >> unit_and_power) |
(single_letter_prefixes >> unit_and_power >> extended_prefixed_units) |
(single_letter_prefixes >> unit_and_power)
end
- rule(:dimension_rules) do
- (sqrt_dimensions >> extended_dimension_rules.maybe) |
- (powered_dimensions >> extended_dimension_rules.maybe)
- end
-
rule(:expression) do
prefixes_units_int_exp |
dimension_rules_int_exp |
diff --git a/lib/unitsml/prefix.rb b/lib/unitsml/prefix.rb
index 0353898..c15b5e1 100644
--- a/lib/unitsml/prefix.rb
+++ b/lib/unitsml/prefix.rb
@@ -16,7 +16,7 @@ def ==(object)
end
def prefix_instance
- @prefix ||= Unitsdb.prefixes.find_by_symbol_name(prefix_name)
+ @prefix_instance ||= Unitsdb.prefixes.find_by_symbol_name(prefix_name)
end
def id
diff --git a/lib/unitsml/transform.rb b/lib/unitsml/transform.rb
index bd6e0d8..c6c900f 100644
--- a/lib/unitsml/transform.rb
+++ b/lib/unitsml/transform.rb
@@ -3,138 +3,190 @@
require "parslet"
module Unitsml
class Transform < Parslet::Transform
- rule(sqrt: simple(:sqrt)) { Sqrt.new(sqrt) }
- rule(units: simple(:unit)) { Unit.new(unit.to_s) }
- rule(prefixes: simple(:prefix)) { Prefix.new(prefix.to_s) }
- rule(dimensions: simple(:dimension)) { Dimension.new(dimension.to_s) }
- rule(intermediate_exp: simple(:int_exp)) { int_exp }
+ rule(sqrt: simple(:sqrt)) { Sqrt.new(sqrt) }
+ rule(unit: simple(:unit)) { Unit.new(unit.to_s) }
+ rule(dimension: simple(:dimension)) { Dimension.new(dimension.to_s) }
+ rule(prefix: simple(:prefix)) { Prefix.new(prefix.to_s) }
+ rule(int_exp: simple(:int_exp)) { int_exp }
+ rule(implicit_extended: simple(:implicit_extended)) { implicit_extended }
- rule(units: simple(:unit),
- integer: simple(:integer)) do
- Unit.new(unit.to_s, integer.to_s)
+ rule(int_exp: simple(:int_exp),
+ sequence: simple(:sequence)) do
+ Formula.new([int_exp, sequence])
end
- rule(dimensions: simple(:dimension),
- integer: simple(:integer)) do
- Dimension.new(dimension.to_s, integer.to_s)
+ rule(first_int_exp_set: simple(:first_set),
+ second_set: simple(:second_set)) do
+ Formula.new([Utility.set_to_fence(first_set), second_set])
+ end
+
+ rule(first_int_exp_set: simple(:first_set),
+ second_int_exp_set: simple(:second_set)) do
+ Formula.new(
+ [Utility.set_to_fence(first_set), Utility.set_to_fence(second_set),
+ ]
+ )
end
- rule(prefixes: simple(:prefix),
- units: simple(:unit)) do
+ rule(first_set: simple(:first_set),
+ second_set: simple(:second_set)) do
+ Formula.new(
+ [
+ first_set,
+ second_set,
+ ]
+ )
+ end
+
+ rule(first_set: simple(:first_set),
+ second_int_exp_set: simple(:second_set)) do
+ Formula.new(
+ [
+ first_set,
+ Utility.set_to_fence(second_set),
+ ]
+ )
+ end
+
+ rule(prefix: simple(:prefix),
+ unit: simple(:unit)) do
Unit.new(unit.to_s, prefix: Prefix.new(prefix.to_s))
end
- rule(prefixes: simple(:prefix),
- units: simple(:unit),
+ rule(unit: simple(:unit),
integer: simple(:integer)) do
- prefix_obj = Prefix.new(prefix.to_s)
- Unit.new(unit.to_s, integer.to_s, prefix: prefix_obj)
+ Unit.new(unit.to_s, integer)
end
- rule(open_parenthesis: simple(:open_paren),
- int_exp: simple(:exp),
- close_parenthesis: simple(:close_paren)) do
- Fenced.new(open_paren.to_s, exp, close_paren.to_s)
+ rule(dimension: simple(:dimension),
+ integer: simple(:integer)) do
+ Dimension.new(dimension.to_s, integer)
+ end
+
+ rule(prefix: simple(:prefix),
+ unit: simple(:unit),
+ integer: simple(:integer)) do
+ Unit.new(unit.to_s, integer.to_s, prefix: Prefix.new(prefix.to_s))
end
- rule(open_parenthesis: simple(:open_paren),
- int_exp: simple(:exp),
- close_parenthesis: simple(:close_paren),
- sequence: sequence(:sequence)) do
+ rule(first_set: simple(:first_set),
+ extender: simple(:extender),
+ second_set: simple(:second_set)) do
Formula.new(
[
- Fenced.new(open_paren.to_s, exp, close_paren.to_s),
- sequence,
- ],
+ first_set,
+ Extender.new(extender.to_s),
+ second_set,
+ ]
)
end
- rule(intermediate_exp: simple(:intermediate_exp),
+ rule(implicit_extended: simple(:implicit_extended),
extender: simple(:extender),
sequence: simple(:sequence)) do
Formula.new(
[
- intermediate_exp,
+ implicit_extended,
Extender.new(extender.to_s),
sequence,
- ],
+ ]
)
end
- rule(prefixes: simple(:prefix),
- units: simple(:unit),
- integer: simple(:integer),
+ rule(int_exp: simple(:int_exp),
extender: simple(:extender),
- sequence: simple(:sequence),) do
- prefix_obj = Prefix.new(prefix.to_s)
- unit_object = Unit.new(unit.to_s, integer.to_s, prefix: prefix_obj)
+ sequence: simple(:sequence)) do
Formula.new(
[
- unit_object,
+ int_exp,
Extender.new(extender.to_s),
sequence,
- ],
+ ]
)
end
- rule(prefixes: simple(:prefix),
- units: simple(:unit),
+ rule(unit: simple(:unit),
extender: simple(:extender),
sequence: simple(:sequence)) do
Formula.new(
[
- Unit.new(unit.to_s, prefix: Prefix.new(prefix.to_s)),
+ Unit.new(unit.to_s),
Extender.new(extender.to_s),
sequence,
- ],
+ ]
)
end
- rule(units: simple(:unit),
+ rule(dimension: simple(:dimension),
extender: simple(:extender),
sequence: simple(:sequence)) do
Formula.new(
[
- Unit.new(unit.to_s),
+ Dimension.new(dimension.to_s),
Extender.new(extender.to_s),
sequence,
+ ]
+ )
+ end
+
+ rule(open_paren: simple(:open_paren),
+ int_exp: simple(:int_exp),
+ close_paren: simple(:close_paren)) do
+ Fenced.new(
+ open_paren.to_s,
+ int_exp,
+ close_paren.to_s,
+ )
+ end
+
+ rule(unit: simple(:unit),
+ integer: simple(:int),
+ extender: simple(:ext),
+ sequence: simple(:sequence)) do
+ Formula.new(
+ [
+ Unit.new(unit.to_s, int.to_s),
+ Extender.new(ext.to_s),
+ sequence,
],
)
end
- rule(units: simple(:unit),
- integer: simple(:integer),
- extender: simple(:extender),
+ rule(dimension: simple(:dimension),
+ integer: simple(:int),
+ extender: simple(:ext),
sequence: simple(:sequence)) do
Formula.new(
[
- Unit.new(unit.to_s, integer.to_s),
- Extender.new(extender.to_s),
+ Dimension.new(dimension.to_s, int.to_s),
+ Extender.new(ext.to_s),
sequence,
],
)
end
- rule(dimensions: simple(:dimension),
- extender: simple(:extender),
+ rule(prefix: simple(:prefix),
+ unit: simple(:unit),
+ extender: simple(:ext),
sequence: simple(:sequence)) do
Formula.new(
[
- Dimension.new(dimension.to_s),
- Extender.new(extender.to_s),
+ Unit.new(unit.to_s, prefix: Prefix.new(prefix.to_s)),
+ Extender.new(ext.to_s),
sequence,
],
)
end
- rule(dimensions: simple(:dimension),
+ rule(prefix: simple(:prefix),
+ unit: simple(:unit),
integer: simple(:integer),
- extender: simple(:extender),
+ extender: simple(:ext),
sequence: simple(:sequence)) do
Formula.new(
[
- Dimension.new(dimension.to_s, integer.to_s),
- Extender.new(extender.to_s),
+ Unit.new(unit.to_s, integer.to_s, prefix: Prefix.new(prefix.to_s)),
+ Extender.new(ext.to_s),
sequence,
],
)
diff --git a/lib/unitsml/utility.rb b/lib/unitsml/utility.rb
index ec4fdeb..f537e3a 100644
--- a/lib/unitsml/utility.rb
+++ b/lib/unitsml/utility.rb
@@ -303,6 +303,12 @@ def html_entity_to_unicode(string)
def underscore(str)
str.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
end
+
+ def set_to_fence(set)
+ return set if set.is_a?(Fenced)
+
+ Fenced.new("(", set, ")")
+ end
end
end
end
diff --git a/spec/unitsml/conv/asciimath_spec.rb b/spec/unitsml/conv/asciimath_spec.rb
index 6f2bbe3..437aeb3 100644
--- a/spec/unitsml/conv/asciimath_spec.rb
+++ b/spec/unitsml/conv/asciimath_spec.rb
@@ -260,4 +260,141 @@
expect(formula).to eq(expected_value)
end
end
+
+ describe "implicit extender" do
+ context "implicit extender example #1 from issue#53" do
+ let(:exp) { "unitsml(J(kg*K))" }
+ let(:expected_value) { "J(kg*K)" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #2 from issue#53" do
+ let(:exp) { "unitsml(J kg^-1 * K^-1)" }
+ let(:expected_value) { "J kg^-1*K^-1" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #3 from issue#53" do
+ let(:exp) { "unitsml(J/mol * K)" }
+ let(:expected_value) { "J/mol^-1*K^-1" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #4 from issue#53" do
+ let(:exp) { "unitsml(J/(mol * K))" }
+ let(:expected_value) { "J/mol^-1*K^-1" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #5" do
+ let(:exp) { "unitsml((mol * K)J)" }
+ let(:expected_value) { "(mol*K)J" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #6" do
+ let(:exp) { "unitsml((mol * K) J)" }
+ let(:expected_value) { "(mol*K)J" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #7" do
+ let(:exp) { "unitsml((mol * K)(J))" }
+ let(:expected_value) { "(mol*K)(J)" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #8" do
+ let(:exp) { "unitsml((mol * K)(J*K))" }
+ let(:expected_value) { "(mol*K)(J*K)" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #9" do
+ let(:exp) { "unitsml(E_erlang(mm)*kg)" }
+ let(:expected_value) { "E(mm)*kg" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #10" do
+ let(:exp) { "unitsml(dim_Theta(dim_phi))" }
+ let(:expected_value) { "Theta(phi)" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #11" do
+ let(:exp) { "unitsml((dim_Theta)dim_L)" }
+ let(:expected_value) { "(Theta)L" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #12" do
+ let(:exp) { "unitsml(dim_Theta dim_L)" }
+ let(:expected_value) { "Theta L" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #13" do
+ let(:exp) { "unitsml(dim_phi (dim_Theta dim_L))" }
+ let(:expected_value) { "phi(Theta L)" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #14" do
+ let(:exp) { "unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) { "(phi(I))((Theta)L)" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #15" do
+ let(:exp) { "unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) { "phi(I)((Theta)L)" }
+
+ it "matches the UnitsML to AsciiMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+ end
end
diff --git a/spec/unitsml/conv/html_spec.rb b/spec/unitsml/conv/html_spec.rb
index 7df6e72..7bae447 100644
--- a/spec/unitsml/conv/html_spec.rb
+++ b/spec/unitsml/conv/html_spec.rb
@@ -287,4 +287,141 @@
expect(formula).to be_equivalent_to(expected_value)
end
end
+
+ describe "implicit extender" do
+ context "implicit extender example #1 from issue#53" do
+ let(:exp) { "unitsml(J(kg*K))" }
+ let(:expected_value) { "J(kg⋅K)" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #2 from issue#53" do
+ let(:exp) { "unitsml(J kg^-1 * K^-1)" }
+ let(:expected_value) { "J⋅kg−1⋅K−1" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #3 from issue#53" do
+ let(:exp) { "unitsml(J/mol * K)" }
+ let(:expected_value) { "J⋅mol−1⋅K−1" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #4 from issue#53" do
+ let(:exp) { "unitsml(J/(mol * K))" }
+ let(:expected_value) { "J⋅mol−1⋅K−1" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #5" do
+ let(:exp) { "unitsml((mol * K)J)" }
+ let(:expected_value) { "(mol⋅K)J" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #6" do
+ let(:exp) { "unitsml((mol * K) J)" }
+ let(:expected_value) { "(mol⋅K)J" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #7" do
+ let(:exp) { "unitsml((mol * K)(J))" }
+ let(:expected_value) { "(mol⋅K)(J)" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #8" do
+ let(:exp) { "unitsml((mol * K)(J*K))" }
+ let(:expected_value) { "(mol⋅K)(J⋅K)" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #9" do
+ let(:exp) { "unitsml(E_erlang(mm)*kg)" }
+ let(:expected_value) { "E(mm)⋅kg" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #10" do
+ let(:exp) { "unitsml(dim_Theta(dim_phi))" }
+ let(:expected_value) { "𝝠(𝞅)" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #11" do
+ let(:exp) { "unitsml((dim_Theta)dim_L)" }
+ let(:expected_value) { "(𝝠)𝖫" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #12" do
+ let(:exp) { "unitsml(dim_Theta dim_L)" }
+ let(:expected_value) { "𝝠⋅𝖫" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #13" do
+ let(:exp) { "unitsml(dim_phi (dim_Theta dim_L))" }
+ let(:expected_value) { "𝞅(𝝠⋅𝖫)" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #14" do
+ let(:exp) { "unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) { "(𝞅(𝖨))((𝝠)𝖫)" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #15" do
+ let(:exp) { "unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) { "𝞅(𝖨)((𝝠)𝖫)" }
+
+ it "matches the UnitsML to HTML converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+ end
end
diff --git a/spec/unitsml/conv/latex_spec.rb b/spec/unitsml/conv/latex_spec.rb
index 395cea2..b128061 100644
--- a/spec/unitsml/conv/latex_spec.rb
+++ b/spec/unitsml/conv/latex_spec.rb
@@ -287,4 +287,141 @@
expect(formula).to be_equivalent_to(expected_value)
end
end
+
+ describe "implicit extender" do
+ context "implicit extender example #1 from issue#53" do
+ let(:exp) { "unitsml(J(kg*K))" }
+ let(:expected_value) { "\\ensuremath{\\mathrm{J}}(k\\ensuremath{\\mathrm{g}}/\\ensuremath{\\mathrm{K}})" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #2 from issue#53" do
+ let(:exp) { "unitsml(J kg^-1 * K^-1)" }
+ let(:expected_value) { "\\ensuremath{\\mathrm{J}}/k\\ensuremath{\\mathrm{g}}^-1/\\ensuremath{\\mathrm{K}}^-1" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #3 from issue#53" do
+ let(:exp) { "unitsml(J/mol * K)" }
+ let(:expected_value) { "\\ensuremath{\\mathrm{J}}/\\ensuremath{\\mathrm{mol}}^-1/\\ensuremath{\\mathrm{K}}^-1" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #4 from issue#53" do
+ let(:exp) { "unitsml(J/(mol * K))" }
+ let(:expected_value) { "\\ensuremath{\\mathrm{J}}/\\ensuremath{\\mathrm{mol}}^-1/\\ensuremath{\\mathrm{K}}^-1" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #5" do
+ let(:exp) { "unitsml((mol * K)J)" }
+ let(:expected_value) { "(\\ensuremath{\\mathrm{mol}}/\\ensuremath{\\mathrm{K}})\\ensuremath{\\mathrm{J}}" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #6" do
+ let(:exp) { "unitsml((mol * K) J)" }
+ let(:expected_value) { "(\\ensuremath{\\mathrm{mol}}/\\ensuremath{\\mathrm{K}})\\ensuremath{\\mathrm{J}}" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #7" do
+ let(:exp) { "unitsml((mol * K)(J))" }
+ let(:expected_value) { "(\\ensuremath{\\mathrm{mol}}/\\ensuremath{\\mathrm{K}})(\\ensuremath{\\mathrm{J}})" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #8" do
+ let(:exp) { "unitsml((mol * K)(J*K))" }
+ let(:expected_value) { "(\\ensuremath{\\mathrm{mol}}/\\ensuremath{\\mathrm{K}})(\\ensuremath{\\mathrm{J}}/\\ensuremath{\\mathrm{K}})" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #9" do
+ let(:exp) { "unitsml(E_erlang(mm)*kg)" }
+ let(:expected_value) { "\\ensuremath{\\mathrm{E}}(m\\ensuremath{\\mathrm{m}})/k\\ensuremath{\\mathrm{g}}" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #10" do
+ let(:exp) { "unitsml(dim_Theta(dim_phi))" }
+ let(:expected_value) { "\\ensuremath{\\mathsf{\\Theta}}(\\ensuremath{\\mathsf{\\phi}})" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #11" do
+ let(:exp) { "unitsml((dim_Theta)dim_L)" }
+ let(:expected_value) { "(\\ensuremath{\\mathsf{\\Theta}})\\ensuremath{\\mathsf{L}}" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #12" do
+ let(:exp) { "unitsml(dim_Theta dim_L)" }
+ let(:expected_value) { "\\ensuremath{\\mathsf{\\Theta}}/\\ensuremath{\\mathsf{L}}" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #13" do
+ let(:exp) { "unitsml(dim_phi (dim_Theta dim_L))" }
+ let(:expected_value) { "\\ensuremath{\\mathsf{\\phi}}(\\ensuremath{\\mathsf{\\Theta}}/\\ensuremath{\\mathsf{L}})" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #14" do
+ let(:exp) { "unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) { "(\\ensuremath{\\mathsf{\\phi}}(\\ensuremath{\\mathsf{I}}))((\\ensuremath{\\mathsf{\\Theta}})\\ensuremath{\\mathsf{L}})" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #15" do
+ let(:exp) { "unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) { "\\ensuremath{\\mathsf{\\phi}}(\\ensuremath{\\mathsf{I}})((\\ensuremath{\\mathsf{\\Theta}})\\ensuremath{\\mathsf{L}})" }
+
+ it "matches the UnitsML to LaTeX converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+ end
end
diff --git a/spec/unitsml/conv/mathml_spec.rb b/spec/unitsml/conv/mathml_spec.rb
index f7b3848..4bdd634 100644
--- a/spec/unitsml/conv/mathml_spec.rb
+++ b/spec/unitsml/conv/mathml_spec.rb
@@ -676,4 +676,396 @@
expect(formula.to_mathml(multiplier: "X", explicit_parenthesis: false)).to be_equivalent_to(expected_value)
end
end
+
+ describe "implicit extender" do
+ context "implicit extender example #1 from issue#53" do
+ let(:exp) { "unitsml(J(kg*K))" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #2 from issue#53" do
+ let(:exp) { "unitsml(J kg^-1 * K^-1)" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #3 from issue#53" do
+ let(:exp) { "unitsml(J/mol * K)" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #4 from issue#53" do
+ let(:exp) { "unitsml(J/(mol * K))" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #5" do
+ let(:exp) { "unitsml((mol * K)J)" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #6" do
+ let(:exp) { "unitsml((mol * K) J)" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #7" do
+ let(:exp) { "unitsml((mol * K)(J))" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #8" do
+ let(:exp) { "unitsml((mol * K)(J*K))" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #9" do
+ let(:exp) { "unitsml(E_erlang(mm)*kg)" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #10" do
+ let(:exp) { "unitsml(dim_Theta(dim_phi))" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #11" do
+ let(:exp) { "unitsml((dim_Theta)dim_L)" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #12" do
+ let(:exp) { "unitsml(dim_Theta dim_L)" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #13" do
+ let(:exp) { "unitsml(dim_phi (dim_Theta dim_L))" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #14" do
+ let(:exp) { "unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+
+ context "implicit extender example #15" do
+ let(:exp) { "unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) do
+ <<~MATHML
+
+ MATHML
+ end
+
+ it "matches the UnitsML to MathML converted value" do
+ expect(mathml).to be_equivalent_to(expected_value)
+ end
+ end
+ end
end
diff --git a/spec/unitsml/conv/plurimath_spec.rb b/spec/unitsml/conv/plurimath_spec.rb
index 9a8de9f..47e2d17 100644
--- a/spec/unitsml/conv/plurimath_spec.rb
+++ b/spec/unitsml/conv/plurimath_spec.rb
@@ -201,4 +201,526 @@
expect(formula).to eq(expected_value)
end
end
+
+ describe "implicit extender" do
+ context "implicit extender example #1 from issue#53" do
+ let(:exp) { "unitsml(J(kg*K))" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("J"),
+ "normal",
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("kg"),
+ "normal",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("K"),
+ "normal",
+ )
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ )
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #2 from issue#53" do
+ let(:exp) { "unitsml(J kg^-1 * K^-1)" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("J"),
+ "normal",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::Power.new(
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("kg"),
+ "normal",
+ ),
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Symbols::Minus.new,
+ Plurimath::Math::Number.new("1"),
+ ])
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::Power.new(
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("K"),
+ "normal",
+ ),
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Symbols::Minus.new,
+ Plurimath::Math::Number.new("1"),
+ ]),
+ )
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #3 from issue#53" do
+ let(:exp) { "unitsml(J/mol * K)" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("J"),
+ "normal",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::Power.new(
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("mol"),
+ "normal",
+ ),
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Symbols::Minus.new,
+ Plurimath::Math::Number.new("1"),
+ ]),
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::Power.new(
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("K"),
+ "normal",
+ ),
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Symbols::Minus.new,
+ Plurimath::Math::Number.new("1"),
+ ]),
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #4 from issue#53" do
+ let(:exp) { "unitsml(J/(mol * K))" }
+ let(:expected_value) do
+
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("J"),
+ "normal",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::Power.new(
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("mol"),
+ "normal",
+ ),
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Symbols::Minus.new,
+ Plurimath::Math::Number.new("1"),
+ ]),
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::Power.new(
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("K"),
+ "normal",
+ ),
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Symbols::Minus.new,
+ Plurimath::Math::Number.new("1"),
+ ]),
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #5" do
+ let(:exp) { "unitsml((mol * K)J)" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("mol"),
+ "normal",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("K"),
+ "normal",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("J"),
+ "normal",
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #6" do
+ let(:exp) { "unitsml((mol * K) J)" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("mol"),
+ "normal",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("K"),
+ "normal",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("J"),
+ "normal",
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #7" do
+ let(:exp) { "unitsml((mol * K)(J))" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("mol"),
+ "normal",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("K"),
+ "normal",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("J"),
+ "normal",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #8" do
+ let(:exp) { "unitsml((mol * K)(J*K))" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("mol"),
+ "normal",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("K"),
+ "normal",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("J"),
+ "normal",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("K"),
+ "normal",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #9" do
+ let(:exp) { "unitsml(E_erlang(mm)*kg)" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("E"),
+ "normal",
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("mm"),
+ "normal",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::FontStyle::Normal.new(
+ Plurimath::Math::Symbols::Symbol.new("kg"),
+ "normal",
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #10" do
+ let(:exp) { "unitsml(dim_Theta(dim_phi))" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::UpcaseTheta.new,
+ "sans-serif",
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Phi.new,
+ "sans-serif",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #11" do
+ let(:exp) { "unitsml((dim_Theta)dim_L)" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::UpcaseTheta.new,
+ "sans-serif",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Symbol.new("L"),
+ "sans-serif",
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #12" do
+ let(:exp) { "unitsml(dim_Theta dim_L)" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::UpcaseTheta.new,
+ "sans-serif",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Symbol.new("L"),
+ "sans-serif",
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #13" do
+ let(:exp) { "unitsml(dim_phi (dim_Theta dim_L))" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Phi.new,
+ "sans-serif",
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::UpcaseTheta.new,
+ "sans-serif",
+ ),
+ Plurimath::Math::Symbols::Cdot.new,
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Symbol.new("L"),
+ "sans-serif",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #14" do
+ let(:exp) { "unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Phi.new,
+ "sans-serif",
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Symbol.new("I"),
+ "sans-serif",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::UpcaseTheta.new,
+ "sans-serif",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Symbol.new("L"),
+ "sans-serif",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #15" do
+ let(:exp) { "unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) do
+ Plurimath::Math::Formula.new([
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Phi.new,
+ "sans-serif",
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Symbol.new("I"),
+ "sans-serif",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::Fenced.new(
+ Plurimath::Math::Symbols::Paren::Lround.new,
+ [
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::UpcaseTheta.new,
+ "sans-serif",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ Plurimath::Math::Function::FontStyle::SansSerif.new(
+ Plurimath::Math::Symbols::Symbol.new("L"),
+ "sans-serif",
+ ),
+ ],
+ Plurimath::Math::Symbols::Paren::Rround.new,
+ ),
+ ])
+ end
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+ end
end
diff --git a/spec/unitsml/conv/unicode_spec.rb b/spec/unitsml/conv/unicode_spec.rb
index e4cafe4..65ddd06 100644
--- a/spec/unitsml/conv/unicode_spec.rb
+++ b/spec/unitsml/conv/unicode_spec.rb
@@ -256,4 +256,141 @@
expect(formula).to be_equivalent_to(expected_value)
end
end
+
+ describe "implicit extender" do
+ context "implicit extender example #1 from issue#53" do
+ let(:exp) { "unitsml(J(kg*K))" }
+ let(:expected_value) { "J(kg·K)" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #2 from issue#53" do
+ let(:exp) { "unitsml(J kg^-1 * K^-1)" }
+ let(:expected_value) { "J kg^-1·K^-1" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #3 from issue#53" do
+ let(:exp) { "unitsml(J/mol * K)" }
+ let(:expected_value) { "J/mol^-1·K^-1" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #4 from issue#53" do
+ let(:exp) { "unitsml(J/(mol * K))" }
+ let(:expected_value) { "J/mol^-1·K^-1" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #5" do
+ let(:exp) { "unitsml((mol * K)J)" }
+ let(:expected_value) { "(mol·K)J" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #6" do
+ let(:exp) { "unitsml((mol * K) J)" }
+ let(:expected_value) { "(mol·K)J" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #7" do
+ let(:exp) { "unitsml((mol * K)(J))" }
+ let(:expected_value) { "(mol·K)(J)" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #8" do
+ let(:exp) { "unitsml((mol * K)(J*K))" }
+ let(:expected_value) { "(mol·K)(J·K)" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #9" do
+ let(:exp) { "unitsml(E_erlang(mm)*kg)" }
+ let(:expected_value) { "E(mm)·kg" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #10" do
+ let(:exp) { "unitsml(dim_Theta(dim_phi))" }
+ let(:expected_value) { "𝝧(𝞅)" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #11" do
+ let(:exp) { "unitsml((dim_Theta)dim_L)" }
+ let(:expected_value) { "(𝝧)𝖫" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #12" do
+ let(:exp) { "unitsml(dim_Theta dim_L)" }
+ let(:expected_value) { "𝝧 𝖫" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #13" do
+ let(:exp) { "unitsml(dim_phi (dim_Theta dim_L))" }
+ let(:expected_value) { "𝞅(𝝧 𝖫)" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #14" do
+ let(:exp) { "unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) { "(𝞅(𝖨))((𝝧)𝖫)" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #15" do
+ let(:exp) { "unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) { "𝞅(𝖨)((𝝧)𝖫)" }
+
+ it "matches the UnitsML to UnicodeMath converted value" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+ end
end
diff --git a/spec/unitsml/parse_spec.rb b/spec/unitsml/parse_spec.rb
index 3d5da39..808b8a1 100644
--- a/spec/unitsml/parse_spec.rb
+++ b/spec/unitsml/parse_spec.rb
@@ -8,10 +8,10 @@
let(:exp) { "unitsml(mm*s^-2)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("m")
- expect(formula[:units]).to eq("m")
+ expect(formula[:prefix]).to eq("m")
+ expect(formula[:unit]).to eq("m")
expect(formula[:extender]).to eq("*")
- expect(formula[:sequence][:units]).to eq("s")
+ expect(formula[:sequence][:unit]).to eq("s")
expect(formula[:sequence][:integer]).to eq("-2")
end
end
@@ -20,8 +20,8 @@
let(:exp) { "unitsml(um)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("u")
- expect(formula[:units]).to eq("m")
+ expect(formula[:prefix]).to eq("u")
+ expect(formula[:unit]).to eq("m")
end
end
@@ -29,7 +29,7 @@
let(:exp) { "unitsml(degK)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:units]).to eq("degK")
+ expect(formula[:unit]).to eq("degK")
end
end
@@ -37,7 +37,7 @@
let(:exp) { "unitsml(prime)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:units]).to eq("prime")
+ expect(formula[:unit]).to eq("prime")
end
end
@@ -45,7 +45,7 @@
let(:exp) { "unitsml(rad)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:units]).to eq("rad")
+ expect(formula[:unit]).to eq("rad")
end
end
@@ -53,7 +53,7 @@
let(:exp) { "unitsml(Hz)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:units]).to eq("Hz")
+ expect(formula[:unit]).to eq("Hz")
end
end
@@ -61,8 +61,8 @@
let(:exp) { "unitsml(kg)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("k")
- expect(formula[:units]).to eq("g")
+ expect(formula[:prefix]).to eq("k")
+ expect(formula[:unit]).to eq("g")
end
end
@@ -70,7 +70,7 @@
let(:exp) { "unitsml(m)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:units]).to eq("m")
+ expect(formula[:unit]).to eq("m")
end
end
@@ -78,7 +78,7 @@
let(:exp) { "unitsml(sqrt(Hz))" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:sqrt][:units]).to eq("Hz")
+ expect(formula[:sqrt][:unit]).to eq("Hz")
end
end
@@ -86,8 +86,8 @@
let(:exp) { "unitsml(kg)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("k")
- expect(formula[:units]).to eq("g")
+ expect(formula[:prefix]).to eq("k")
+ expect(formula[:unit]).to eq("g")
end
end
@@ -95,7 +95,7 @@
let(:exp) { "unitsml(g)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:units]).to eq("g")
+ expect(formula[:unit]).to eq("g")
end
end
@@ -103,7 +103,7 @@
let(:exp) { "unitsml(hp)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:units]).to eq("hp")
+ expect(formula[:unit]).to eq("hp")
end
end
@@ -113,10 +113,10 @@
it "returns parslet tree of parsed Unitsml string" do
sequence = formula[:sequence]
- expect(formula[:prefixes]).to eq("k")
- expect(formula[:units]).to eq("g")
+ expect(formula[:prefix]).to eq("k")
+ expect(formula[:unit]).to eq("g")
expect(formula[:extender]).to eq("*")
- expect(sequence[:units]).to eq("s")
+ expect(sequence[:unit]).to eq("s")
expect(sequence[:integer]).to eq("-2")
end
end
@@ -125,7 +125,7 @@
let(:exp) { "unitsml(degK)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:units]).to eq("degK")
+ expect(formula[:unit]).to eq("degK")
end
end
@@ -133,8 +133,8 @@
let(:exp) { "unitsml(mbar)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("m")
- expect(formula[:units]).to eq("bar")
+ expect(formula[:prefix]).to eq("m")
+ expect(formula[:unit]).to eq("bar")
end
end
@@ -142,7 +142,7 @@
let(:exp) { "unitsml(p-)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("p")
+ expect(formula[:prefix]).to eq("p")
end
end
@@ -150,7 +150,7 @@
let(:exp) { "unitsml(h-)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("h")
+ expect(formula[:prefix]).to eq("h")
end
end
@@ -158,7 +158,7 @@
let(:exp) { "unitsml(da-)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("da")
+ expect(formula[:prefix]).to eq("da")
end
end
@@ -166,7 +166,7 @@
let(:exp) { "unitsml(u-)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("u")
+ expect(formula[:prefix]).to eq("u")
end
end
@@ -176,9 +176,9 @@
it "returns parslet tree of parsed Unitsml string" do
sequence = formula[:sequence]
- expect(formula[:units]).to eq("A")
+ expect(formula[:unit]).to eq("A")
expect(formula[:extender]).to eq("*")
- expect(sequence[:units]).to eq("C")
+ expect(sequence[:unit]).to eq("C")
expect(sequence[:integer]).to eq("3")
end
end
@@ -189,9 +189,9 @@
it "returns parslet tree of parsed Unitsml string" do
sequence = formula[:sequence]
- expect(formula[:units]).to eq("A")
+ expect(formula[:unit]).to eq("A")
expect(formula[:extender]).to eq("/")
- expect(sequence[:units]).to eq("C")
+ expect(sequence[:unit]).to eq("C")
expect(sequence[:integer]).to eq("-3")
end
end
@@ -202,12 +202,12 @@
it "returns parslet tree of parsed Unitsml string" do
sequence = formula[:sequence]
- expect(formula[:units]).to eq("J")
+ expect(formula[:unit]).to eq("J")
expect(formula[:extender]).to eq("/")
- expect(sequence[:prefixes]).to eq("k")
- expect(sequence[:units]).to eq("g")
+ expect(sequence[:prefix]).to eq("k")
+ expect(sequence[:unit]).to eq("g")
expect(sequence[:extender]).to eq("*")
- expect(sequence[:sequence][:units]).to eq("K")
+ expect(sequence[:sequence][:unit]).to eq("K")
end
end
@@ -215,8 +215,8 @@
let(:exp) { "unitsml(kg^-2)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:prefixes]).to eq("k")
- expect(formula[:units]).to eq("g")
+ expect(formula[:prefix]).to eq("k")
+ expect(formula[:unit]).to eq("g")
expect(formula[:integer]).to eq("-2")
end
end
@@ -235,10 +235,10 @@
it "returns parslet tree of parsed Unitsml string" do
sequence = formula[:sequence]
- expect(formula[:prefixes]).to eq("k")
- expect(formula[:units]).to eq("g")
+ expect(formula[:prefix]).to eq("k")
+ expect(formula[:unit]).to eq("g")
expect(formula[:extender]).to eq("*")
- expect(sequence[:units]).to eq("s")
+ expect(sequence[:unit]).to eq("s")
expect(sequence[:integer]).to eq("-2")
end
end
@@ -249,11 +249,11 @@
it "returns parslet tree of parsed Unitsml string" do
sequence = formula[:sequence]
- expect(formula[:prefixes]).to eq("m")
- expect(formula[:units]).to eq("W")
+ expect(formula[:prefix]).to eq("m")
+ expect(formula[:unit]).to eq("W")
expect(formula[:extender]).to eq("*")
- expect(sequence[:prefixes]).to eq("c")
- expect(sequence[:units]).to eq("m")
+ expect(sequence[:prefix]).to eq("c")
+ expect(sequence[:unit]).to eq("m")
expect(sequence[:integer]).to eq("-2")
end
end
@@ -264,9 +264,9 @@
it "returns parslet tree of parsed Unitsml string" do
sequence = formula[:sequence]
- expect(formula[:dimensions]).to eq("dim_Theta")
+ expect(formula[:dimension]).to eq("dim_Theta")
expect(formula[:extender]).to eq("*")
- expect(sequence[:dimensions]).to eq("dim_L")
+ expect(sequence[:dimension]).to eq("dim_L")
expect(sequence[:integer]).to eq("2")
end
end
@@ -277,10 +277,10 @@
it "returns parslet tree of parsed Unitsml string" do
sequence = formula[:sequence]
- expect(formula[:dimensions]).to eq("dim_Theta")
+ expect(formula[:dimension]).to eq("dim_Theta")
expect(formula[:integer]).to eq("10")
expect(formula[:extender]).to eq("*")
- expect(sequence[:dimensions]).to eq("dim_L")
+ expect(sequence[:dimension]).to eq("dim_L")
expect(sequence[:integer]).to eq("2")
end
end
@@ -289,10 +289,10 @@
let(:exp) { "unitsml(Hz^10*darcy^100)" }
it "returns parslet tree of parsed Unitsml string" do
- expect(formula[:units]).to eq("Hz")
+ expect(formula[:unit]).to eq("Hz")
expect(formula[:integer]).to eq("10")
expect(formula[:extender]).to eq("*")
- expect(formula[:sequence][:units]).to eq("darcy")
+ expect(formula[:sequence][:unit]).to eq("darcy")
expect(formula[:sequence][:integer]).to eq("100")
end
end
diff --git a/spec/unitsml/parser_spec.rb b/spec/unitsml/parser_spec.rb
index 0987b8e..6bc6cae 100644
--- a/spec/unitsml/parser_spec.rb
+++ b/spec/unitsml/parser_spec.rb
@@ -6,9 +6,9 @@
context "contains Unitsml #1 example" do
let(:exp) { "unitsml(K/(kg*m))" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("K"),
Unitsml::Extender.new("/"),
Unitsml::Formula.new([
@@ -22,15 +22,17 @@
orig_text: "K/(kg*m)",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #2 example" do
let(:exp) { "unitsml(m, quantity: NISTq103)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new(
+ let(:expected_value) do
+ Unitsml::Formula.new(
[
Unitsml::Unit.new("m"),
],
@@ -39,15 +41,17 @@
orig_text: "m, quantity: NISTq103",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #3 example" do
let(:exp) { "unitsml(cal_th/cm^2, name: langley)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new(
+ let(:expected_value) do
+ Unitsml::Formula.new(
[
Unitsml::Unit.new("cal_th"),
Unitsml::Extender.new("/"),
@@ -58,15 +62,17 @@
orig_text: "cal_th/cm^2, name: langley",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #4 example" do
let(:exp) { "unitsml(m, symbol: La)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new(
+ let(:expected_value) do
+ Unitsml::Formula.new(
[
Unitsml::Unit.new("m"),
],
@@ -75,15 +81,17 @@
orig_text: "m, symbol: La",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #5 example" do
let(:exp) { "unitsml(cm*s^-2, symbol: cm cdot s^-2)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new(
+ let(:expected_value) do
+ Unitsml::Formula.new(
[
Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("c")),
Unitsml::Extender.new("*"),
@@ -94,15 +102,17 @@
orig_text: "cm*s^-2, symbol: cm cdot s^-2",
norm_text: "cm*s^-2"
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #6 example" do
let(:exp) { "unitsml(cm*s^-2, multiplier: xx)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new(
+ let(:expected_value) do
+ Unitsml::Formula.new(
[
Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("c")),
Unitsml::Extender.new("*"),
@@ -113,15 +123,17 @@
orig_text: "cm*s^-2, multiplier: xx",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #7 example" do
let(:exp) { "unitsml(mm*s^-2)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new(
+ let(:expected_value) do
+ Unitsml::Formula.new(
[
Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")),
Unitsml::Extender.new("*"),
@@ -131,120 +143,144 @@
orig_text: "mm*s^-2",
norm_text: "mm*s^-2",
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #8 example" do
let(:exp) { "unitsml(um)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("u")),
],
norm_text: "um",
orig_text: "um",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #9 example" do
let(:exp) { "unitsml(degK)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("degK"),
],
norm_text: "degK",
orig_text: "degK",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #10 example" do
let(:exp) { "unitsml(prime)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("prime"),
],
norm_text: "prime",
orig_text: "prime",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #11 example" do
let(:exp) { "unitsml(rad)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("rad"),
],
norm_text: "rad",
orig_text: "rad",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #12 example" do
let(:exp) { "unitsml(Hz)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("Hz"),
],
norm_text: "Hz",
orig_text: "Hz",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #13 example" do
let(:exp) { "unitsml(kg)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("g", prefix: Unitsml::Prefix.new("k")),
],
norm_text: "kg",
orig_text: "kg",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #14 example" do
let(:exp) { "unitsml(m)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("m"),
],
norm_text: "m",
orig_text: "m",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #15 example" do
let(:exp) { "unitsml(sqrt(Hz))" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Sqrt.new(
Unitsml::Unit.new("Hz", "0.5"),
),
@@ -253,45 +289,54 @@
orig_text: "sqrt(Hz)",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #16 example" do
let(:exp) { "unitsml(g)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("g"),
],
norm_text: "g",
orig_text: "g",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #17 example" do
let(:exp) { "unitsml(hp)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("hp"),
],
norm_text: "hp",
orig_text: "hp",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #18 example" do
let(:exp) { "unitsml(kg*s^-2)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("g", prefix: Unitsml::Prefix.new("k")),
Unitsml::Extender.new("*"),
Unitsml::Unit.new("s", "-2")
@@ -300,90 +345,108 @@
orig_text: "kg*s^-2",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #19 example" do
let(:exp) { "unitsml(mbar)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("bar", prefix: Unitsml::Prefix.new("m"))
],
norm_text: "mbar",
orig_text: "mbar",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #20 example" do
let(:exp) { "unitsml(p-)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Prefix.new("p", true)
],
norm_text: "p-",
orig_text: "p-",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #21 example" do
let(:exp) { "unitsml(h-)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Prefix.new("h", true)
],
norm_text: "h-",
orig_text: "h-",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #22 example" do
let(:exp) { "unitsml(da-)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Prefix.new("da", true)
],
norm_text: "da-",
orig_text: "da-",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #23 example" do
let(:exp) { "unitsml(u-)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Prefix.new("u", true)
],
norm_text: "u-",
orig_text: "u-",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #24 example" do
let(:exp) { "unitsml(A*C^3)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("A"),
Unitsml::Extender.new("*"),
Unitsml::Unit.new("C", "3"),
@@ -392,15 +455,18 @@
orig_text: "A*C^3",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #25 example" do
let(:exp) { "unitsml(A/C^-3)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("A"),
Unitsml::Extender.new("/"),
Unitsml::Unit.new("C", "3"),
@@ -409,15 +475,18 @@
orig_text: "A/C^-3",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #26 example" do
let(:exp) { "unitsml(J/kg*K)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("J"),
Unitsml::Extender.new("/"),
Unitsml::Formula.new([
@@ -430,30 +499,36 @@
orig_text: "J/kg*K",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #27 example" do
let(:exp) { "unitsml(kg^-2)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("g", "-2", prefix: Unitsml::Prefix.new("k")),
],
norm_text: "kg^-2",
orig_text: "kg^-2",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #28 example" do
let(:exp) { "unitsml(mW*cm^(-2))" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("W", prefix: Unitsml::Prefix.new("m")),
Unitsml::Extender.new("*"),
Unitsml::Unit.new("m", "-2", prefix: Unitsml::Prefix.new("c")),
@@ -462,15 +537,18 @@
orig_text: "mW*cm(-2)",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #29 example" do
let(:exp) { "unitsml(dim_Theta*dim_L^2)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Dimension.new("dim_Theta"),
Unitsml::Extender.new("*"),
Unitsml::Dimension.new("dim_L", "2"),
@@ -479,15 +557,18 @@
orig_text: "dim_Theta*dim_L^2",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #30 example" do
let(:exp) { "unitsml(dim_Theta^10*dim_L^2)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Dimension.new("dim_Theta", "10"),
Unitsml::Extender.new("*"),
Unitsml::Dimension.new("dim_L", "2"),
@@ -496,15 +577,18 @@
orig_text: "dim_Theta^10*dim_L^2",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #31 example" do
let(:exp) { "unitsml(Hz^10*darcy^-100)" }
-
- it "returns parslet tree of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("Hz", "10"),
Unitsml::Extender.new("*"),
Unitsml::Unit.new("darcy", "-100"),
@@ -513,15 +597,18 @@
orig_text: "Hz^10*darcy^-100",
root: true,
)
+ end
+
+ it "returns parslet tree of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #32 example from metanorma/bipm-si-brochure#245" do
let(:exp) { "unitsml(W*m^(−2))" }
-
- it "returns Unitsml::Formula of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Unit.new("W"),
Unitsml::Extender.new("*"),
Unitsml::Unit.new("m", "-2"),
@@ -530,15 +617,18 @@
orig_text: "W*m^(-2)",
root: true,
)
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #33 example" do
let(:exp) { "unitsml(((mm*mm)))" }
-
- it "returns Unitsml::Formula of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Fenced.new(
"(",
Unitsml::Formula.new([
@@ -553,15 +643,18 @@
orig_text: "((mm*mm))",
root: true,
)
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #34 example" do
let(:exp) { "((mm*mm))*mm" }
-
- it "returns Unitsml::Formula of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Fenced.new(
"(",
Unitsml::Formula.new([
@@ -578,15 +671,17 @@
orig_text: "((mm*mm))*mm",
root: true,
)
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #35 example" do
let(:exp) { "(mm*mm)*(((mm*m)))" }
-
- it "returns Unitsml::Formula of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new(
+ let(:expected_value) do
+ Unitsml::Formula.new(
[
Unitsml::Formula.new([
Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")),
@@ -610,15 +705,18 @@
orig_text: "(mm*mm)*(mm*m)",
root: true,
)
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #36 example" do
let(:exp) { "((dim_Theta))*dim_N*(dim_J*dim_Theta)" }
-
- it "returns Unitsml::Formula of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Fenced.new(
"(",
Unitsml::Dimension.new("dim_Theta"),
@@ -639,15 +737,18 @@
orig_text: "((dim_Theta))*dim_N*(dim_J*dim_Theta)",
root: true,
)
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #37 example" do
let(:exp) { "((dim_Theta^12))*dim_N^12*(dim_J^10*dim_Theta^10)" }
-
- it "returns Unitsml::Formula of parsed Unitsml string" do
- expected_value = Unitsml::Formula.new([
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
Unitsml::Fenced.new(
"(",
Unitsml::Dimension.new("dim_Theta", "12"),
@@ -668,24 +769,26 @@
orig_text: "((dim_Theta^12))*dim_N^12*(dim_J^10*dim_Theta^10)",
root: true,
)
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
expect(formula).to eq(expected_value)
end
end
context "contains Unitsml #38 example from unitsml/unitsml-ruby#43" do
let(:exp) { "unitsml(J/((A*m)))" }
-
- it "matches Unitsml::Formula of processed Unitsml string" do
- expected_value = Unitsml::Formula.new(
+ let(:expected_value) do
+ Unitsml::Formula.new(
[
Unitsml::Unit.new("J"),
Unitsml::Extender.new("/"),
Unitsml::Fenced.new(
"(",
Unitsml::Formula.new([
- Unitsml::Unit.new("A"),
+ Unitsml::Unit.new("A", "-1"),
Unitsml::Extender.new("*"),
- Unitsml::Unit.new("m"),
+ Unitsml::Unit.new("m", "-1"),
]),
")",
),
@@ -695,5 +798,467 @@
root: true,
)
end
+
+ it "matches Unitsml::Formula of processed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ describe "implicit extender" do
+ context "implicit extender example #1 from issue#53" do
+ let(:exp) { "unitsml(J(kg*K))" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("J"),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new(
+ "g",
+ prefix: Unitsml::Prefix.new("k"),
+ ),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("K"),
+ ],
+ ),
+ ")",
+ )
+ ],
+ norm_text: "J(kg*K)",
+ orig_text: "J(kg*K)",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #2 from issue#53" do
+ let(:exp) { "unitsml(J kg^-1 * K^-1)" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("J"),
+ Unitsml::Extender.new(" "),
+ Unitsml::Unit.new(
+ "g",
+ "-1",
+ prefix: Unitsml::Prefix.new("k"),
+ ),
+ ],
+ ),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("K", "-1"),
+ ],
+ norm_text: "J kg^-1 * K^-1",
+ orig_text: "J kg^-1 * K^-1",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #3 from issue#53" do
+ let(:exp) { "unitsml(J/mol * K)" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("J"),
+ Unitsml::Extender.new("/"),
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("mol", "-1"),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("K", "-1"),
+ ],
+ ),
+ ],
+ norm_text: "J/mol * K",
+ orig_text: "J/mol * K",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #4 from issue#53" do
+ let(:exp) { "unitsml(J/(mol * K))" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("J"),
+ Unitsml::Extender.new("/"),
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("mol", "-1"),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("K", "-1"),
+ ],
+ ),
+ ],
+ norm_text: "J/(mol * K)",
+ orig_text: "J/(mol * K)",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #5" do
+ let(:exp) { "unitsml((mol * K)J)" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("mol"),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("K"),
+ ],
+ ),
+ ")",
+ ),
+ Unitsml::Unit.new("J"),
+ ],
+ norm_text: "(mol * K)J",
+ orig_text: "(mol * K)J",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #6" do
+ let(:exp) { "unitsml((mol * K) J)" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("mol"),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("K"),
+ ],
+ ),
+ ")",
+ ),
+ Unitsml::Unit.new("J"),
+ ],
+ norm_text: "(mol * K) J",
+ orig_text: "(mol * K) J",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #7" do
+ let(:exp) { "unitsml((mol * K)(J))" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("mol"),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("K"),
+ ],
+ ),
+ ")",
+ ),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Unit.new("J"),
+ ")",
+ )
+ ],
+ orig_text: "(mol * K)(J)",
+ norm_text: "(mol * K)(J)",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #8" do
+ let(:exp) { "unitsml((mol * K)(J*K))" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("mol"),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("K"),
+ ],
+ ),
+ ")",
+ ),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("J"),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("K"),
+ ],
+ ),
+ ")",
+ ),
+ ],
+ orig_text: "(mol * K)(J*K)",
+ norm_text: "(mol * K)(J*K)",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #9" do
+ let(:exp) { "unitsml(E_erlang(mm)*kg)" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Formula.new(
+ [
+ Unitsml::Unit.new("E_erlang"),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")),
+ ")",
+ ),
+ ],
+ ),
+ Unitsml::Extender.new("*"),
+ Unitsml::Unit.new("g", prefix: Unitsml::Prefix.new("k")),
+ ],
+ orig_text: "E_erlang(mm)*kg",
+ norm_text: "E_erlang(mm)*kg",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #10" do
+ let(:exp) { "unitsml(dim_Theta(dim_phi))" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Dimension.new("dim_Theta"),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Dimension.new("dim_phi"),
+ ")",
+ ),
+ ],
+ orig_text: "dim_Theta(dim_phi)",
+ norm_text: "dim_Theta(dim_phi)",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #11" do
+ let(:exp) { "unitsml((dim_Theta)dim_L)" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Dimension.new("dim_Theta"),
+ ")",
+ ),
+ Unitsml::Dimension.new("dim_L"),
+ ],
+ orig_text: "dim_Theta(dim_L)",
+ norm_text: "dim_Theta(dim_L)",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #12" do
+ let(:exp) { "unitsml(dim_Theta dim_L)" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Dimension.new("dim_Theta"),
+ Unitsml::Extender.new(" "),
+ Unitsml::Dimension.new("dim_L"),
+ ],
+ orig_text: "dim_Theta dim_L",
+ norm_text: "dim_Theta dim_L",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #13" do
+ let(:exp) { "unitsml(dim_phi (dim_Theta dim_L))" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Dimension.new("dim_phi"),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Dimension.new("dim_Theta"),
+ Unitsml::Extender.new(" "),
+ Unitsml::Dimension.new("dim_L"),
+ ],
+ ),
+ ")",
+ ),
+ ],
+ orig_text: "dim_phi (dim_Theta dim_L)",
+ norm_text: "dim_phi (dim_Theta dim_L)",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #14" do
+ let(:exp) { "unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Dimension.new("dim_phi"),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Dimension.new("dim_I"),
+ ")",
+ ),
+ ],
+ ),
+ ")",
+ ),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Dimension.new("dim_Theta"),
+ ")",
+ ),
+ Unitsml::Dimension.new("dim_L"),
+ ],
+ ),
+ ")",
+ ),
+ ],
+ orig_text: "(dim_phi(dim_I)) ((dim_Theta) dim_L)",
+ norm_text: "(dim_phi(dim_I)) ((dim_Theta) dim_L)",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
+
+ context "implicit extender example #15" do
+ let(:exp) { "unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))" }
+ let(:expected_value) do
+ Unitsml::Formula.new(
+ [
+ Unitsml::Sqrt.new(
+ Unitsml::Formula.new(
+ [
+ Unitsml::Dimension.new("dim_phi"),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Dimension.new("dim_I"),
+ ")",
+ ),
+ ],
+ ),
+ ),
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Formula.new(
+ [
+ Unitsml::Fenced.new(
+ "(",
+ Unitsml::Dimension.new("dim_Theta"),
+ ")",
+ ),
+ Unitsml::Dimension.new("dim_L"),
+ ],
+ ),
+ ")",
+ ),
+ ],
+ orig_text: "sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L)",
+ norm_text: "sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L)",
+ root: true,
+ )
+ end
+
+ it "returns Unitsml::Formula of parsed Unitsml string" do
+ expect(formula).to eq(expected_value)
+ end
+ end
end
end