require "spec_helper"
RSpec.describe Asciimath2UnitsML do
it "converts an AsciiMath string to MathML + UnitsML" do
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1 "unitsml(kg*s^-2)" xx 9 "unitsml(g)"
INPUT
OUTPUT
end
it "deals with non-metric" do
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1 "unitsml(hp)"
INPUT
1hphorsepowerhphp
OUTPUT
end
it "deals with duplicate units" do
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1 "unitsml(kg*s^-2)" xx 9 "unitsml(kg*s^-2)"
INPUT
1kg·s−2kg*s^-2
kg·s
−2kg·s−2kilok×9kg·s−2kg*s^-2
kg·s
−2kg·s−2kilok
OUTPUT
end
=begin
it "deals with notational variants" do
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
9 "unitsml(degK)" + 10 "unitsml(K)"
INPUT
OUTPUT
end
=end
it "deals with units division" do
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
9 "unitsml(C^3*A)" + 13 "unitsml(A/C^-3)"
INPUT
9C3·AC^3*A
C
3
·A
C3·A+13A/C−3A*C^3
A/C
−3A/C−3
OUTPUT
end
it "converts MathML to MatML + UnitsML" do
input = <<~INPUT
32+5×7unitsml(kg^-2)
INPUT
output = <<~OUTPUT
32+5×7kg−2kg^-2
kg
−2kg−2kilok
OUTPUT
expect(xmlpp(Asciimath2UnitsML::Conv.new().MathML2UnitsML(input).to_xml)).to be_equivalent_to xmlpp(output)
expect(xmlpp(Asciimath2UnitsML::Conv.new().MathML2UnitsML(Nokogiri::XML(input)).to_xml)).to be_equivalent_to xmlpp(output)
end
it "raises error for illegal unit" do
expect{xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))}.to raise_error(Rsec::SyntaxError)
12 "unitsml(que?)"
INPUT
end
it "initialises multiplier" do
expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: "\u00d7").Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1 "unitsml(kg*s^-2)"
INPUT
1kg×s−2kg*s^-2
kg×s
−2kg×s−2kilok
OUTPUT
expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :space).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1 "unitsml(kg*s^-2)"
INPUT
1kgs−2kg*s^-2
kg s
−2kgs−2kilok
OUTPUT
expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :nospace).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1 "unitsml(kg*s^-2)"
INPUT
1kgs−2kg*s^-2
kgs
−2kgs−2kilok
OUTPUT
end
end