diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..a8f6f72 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,18 @@ +inherit_from: + - https://raw.githubusercontent.com/riboseinc/oss-guides/main/ci/rubocop.yml + - .rubocop_todo.yml + +inherit_mode: + merge: + - Exclude + +plugins: + - rubocop-rspec + - rubocop-performance + - rubocop-rake + +AllCops: + TargetRubyVersion: 3.0 + Exclude: + - 'unitsdb/**/*' + - 'vendor/**/*' diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml new file mode 100644 index 0000000..470de68 --- /dev/null +++ b/.rubocop_todo.yml @@ -0,0 +1,498 @@ +# This configuration was generated by +# `rubocop --auto-gen-config` +# on 2026-04-01 01:44:59 UTC using RuboCop version 1.86.0. +# The point is for the user to remove these configuration records +# one by one as the offenses are removed from the code base. +# Note that changes in the inspected code, or installation of new +# versions of RuboCop, may require this file to be generated again. + +# Offense count: 3 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation. +Bundler/OrderedGems: + Exclude: + - 'Gemfile' + +# Offense count: 3 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation. +Gemspec/OrderedDependencies: + Exclude: + - 'unitsml.gemspec' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, IndentationWidth. +# SupportedStyles: with_first_argument, with_fixed_indentation +Layout/ArgumentAlignment: + Exclude: + - 'spec/unitsml/parser_spec.rb' + - 'unitsdb/validate_schemas.rb' + +# Offense count: 59 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, IndentationWidth. +# SupportedStyles: with_first_element, with_fixed_indentation +Layout/ArrayAlignment: + Exclude: + - 'spec/unitsml/conv/plurimath_spec.rb' + - 'spec/unitsml/parser_spec.rb' + +# Offense count: 8 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyleAlignWith. +# SupportedStylesAlignWith: either, start_of_block, start_of_line +Layout/BlockAlignment: + Exclude: + - 'lib/unitsml/intermediate_exp_rules.rb' + - 'spec/unitsml/conv/latex_spec.rb' + - 'spec/unitsml/conv/plurimath_spec.rb' + +# Offense count: 8 +# This cop supports safe autocorrection (--autocorrect). +Layout/BlockEndNewline: + Exclude: + - 'lib/unitsml/intermediate_exp_rules.rb' + - 'spec/unitsml/conv/latex_spec.rb' + - 'spec/unitsml/conv/plurimath_spec.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +Layout/ClosingParenthesisIndentation: + Exclude: + - 'spec/unitsml/conv/plurimath_spec.rb' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +Layout/ElseAlignment: + Exclude: + - 'lib/unitsml/number.rb' + - 'unitsdb/validate_schemas.rb' + +# Offense count: 18 +# This cop supports safe autocorrection (--autocorrect). +Layout/EmptyLineAfterMagicComment: + Enabled: false + +# Offense count: 5 +# This cop supports safe autocorrection (--autocorrect). +Layout/EmptyLines: + Exclude: + - 'lib/unitsml/model/dimension.rb' + - 'lib/unitsml/model/prefix.rb' + - 'lib/unitsml/model/quantity.rb' + - 'lib/unitsml/model/units/root_units.rb' + +# Offense count: 10 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: empty_lines, no_empty_lines +Layout/EmptyLinesAroundBlockBody: + Exclude: + - 'spec/unitsml/conv/asciimath_spec.rb' + - 'spec/unitsml/conv/html_spec.rb' + - 'spec/unitsml/conv/latex_spec.rb' + - 'spec/unitsml/conv/mathml_spec.rb' + - 'spec/unitsml/conv/plurimath_spec.rb' + - 'spec/unitsml/conv/unicode_spec.rb' + - 'spec/unitsml/conv/xml_spec.rb' + - 'spec/unitsml/parse_spec.rb' + - 'spec/unitsml/parser_spec.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +Layout/EmptyLinesAroundExceptionHandlingKeywords: + Exclude: + - 'unitsdb/validate_schemas.rb' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +Layout/EmptyLinesAroundMethodBody: + Exclude: + - 'unitsdb/validate_schemas.rb' + +# Offense count: 82 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, IndentationWidth. +# SupportedStyles: special_inside_parentheses, consistent, align_brackets +Layout/FirstArrayElementIndentation: + Exclude: + - 'spec/unitsml/conv/plurimath_spec.rb' + - 'spec/unitsml/parser_spec.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +Layout/HeredocIndentation: + Exclude: + - 'spec/unitsml/conv/xml_spec.rb' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: normal, indented_internal_methods +Layout/IndentationConsistency: + Exclude: + - 'unitsdb/validate_schemas.rb' + +# Offense count: 20 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: Width, EnforcedStyleAlignWith, AllowedPatterns. +# SupportedStylesAlignWith: start_of_line, relative_to_receiver +Layout/IndentationWidth: + Exclude: + - 'lib/unitsml/intermediate_exp_rules.rb' + - 'lib/unitsml/number.rb' + - 'spec/unitsml/conv/latex_spec.rb' + - 'spec/unitsml/conv/plurimath_spec.rb' + - 'unitsdb/validate_schemas.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: symmetrical, new_line, same_line +Layout/MultilineArrayBraceLayout: + Exclude: + - 'lib/unitsml/transform.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +Layout/RescueEnsureAlignment: + Exclude: + - 'unitsdb/validate_schemas.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +Layout/SpaceAfterComma: + Exclude: + - 'lib/unitsml/unitsdb.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces. +# SupportedStyles: space, no_space +# SupportedStylesForEmptyBraces: space, no_space +Layout/SpaceBeforeBlockBraces: + Exclude: + - 'spec/unitsml/parse_spec.rb' + +# Offense count: 4 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters. +# SupportedStyles: space, no_space +# SupportedStylesForEmptyBraces: space, no_space +Layout/SpaceInsideBlockBraces: + Exclude: + - 'lib/unitsml/parse.rb' + - 'spec/unitsml/parse_spec.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces. +# SupportedStyles: space, no_space, compact +# SupportedStylesForEmptyBraces: space, no_space +Layout/SpaceInsideHashLiteralBraces: + Exclude: + - 'lib/unitsml/prefix.rb' + +# Offense count: 5 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: final_newline, final_blank_line +Layout/TrailingEmptyLines: + Exclude: + - 'lib/unitsml.rb' + - 'lib/unitsml/unitsdb/dimensions.rb' + - 'lib/unitsml/unitsdb/prefixes.rb' + - 'lib/unitsml/unitsdb/quantities.rb' + - 'lib/unitsml/unitsdb/units.rb' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowInHeredoc. +Layout/TrailingWhitespace: + Exclude: + - 'unitsdb/validate_schemas.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowedMethods. +# AllowedMethods: present?, blank?, presence, try, try!, in? +Lint/SafeNavigationChain: + Exclude: + - 'lib/unitsml/parse.rb' + +# Offense count: 16 +# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. +Metrics/AbcSize: + Max: 51 + +# Offense count: 89 +# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns. +# AllowedMethods: refine +Metrics/BlockLength: + Max: 1251 + +# Offense count: 5 +# Configuration parameters: CountComments, CountAsOne. +Metrics/ClassLength: + Max: 252 + +# Offense count: 11 +# Configuration parameters: AllowedMethods, AllowedPatterns. +Metrics/CyclomaticComplexity: + Max: 14 + +# Offense count: 17 +# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns. +Metrics/MethodLength: + Max: 47 + +# Offense count: 1 +# Configuration parameters: CountComments, CountAsOne. +Metrics/ModuleLength: + Max: 290 + +# Offense count: 1 +# Configuration parameters: CountKeywordArgs, MaxOptionalParameters. +Metrics/ParameterLists: + Max: 6 + +# Offense count: 10 +# Configuration parameters: AllowedMethods, AllowedPatterns. +Metrics/PerceivedComplexity: + Max: 14 + +# Offense count: 1 +Naming/AccessorMethodName: + Exclude: + - 'lib/unitsml/utility.rb' + +# Offense count: 7 +# This cop supports safe autocorrection (--autocorrect). +Naming/BinaryOperatorParameterName: + Exclude: + - 'lib/unitsml/dimension.rb' + - 'lib/unitsml/extender.rb' + - 'lib/unitsml/fenced.rb' + - 'lib/unitsml/number.rb' + - 'lib/unitsml/prefix.rb' + - 'lib/unitsml/sqrt.rb' + - 'lib/unitsml/unit.rb' + +# Offense count: 2 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyleForLeadingUnderscores. +# SupportedStylesForLeadingUnderscores: disallowed, required, optional +Naming/MemoizedInstanceVariableName: + Exclude: + - 'lib/unitsml/unitsdb/dimension.rb' + - 'lib/unitsml/unitsdb/units.rb' + +# Offense count: 3 +# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames. +# AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to +Naming/MethodParameterName: + Exclude: + - 'lib/unitsml/utility.rb' + +# Offense count: 14 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, AllowedMethods, AllowedPatterns, AllowBracesOnProceduralOneLiners, BracesRequiredMethods. +# SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces +# ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object +# FunctionalMethods: let, let!, subject, watch +# AllowedMethods: lambda, proc, it +Style/BlockDelimiters: + Exclude: + - 'lib/unitsml/intermediate_exp_rules.rb' + - 'spec/unitsml/conv/latex_spec.rb' + - 'spec/unitsml/conv/plurimath_spec.rb' + +# Offense count: 11 +Style/ClassVars: + Exclude: + - 'lib/unitsml/parse.rb' + - 'lib/unitsml/unitsdb.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions. +# SupportedStyles: assign_to_condition, assign_inside_condition +Style/ConditionalAssignment: + Exclude: + - 'lib/unitsml/number.rb' + +# Offense count: 46 +# Configuration parameters: AllowedConstants. +Style/Documentation: + Enabled: false + +# Offense count: 20 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: always, always_true, never +Style/FrozenStringLiteralComment: + Enabled: false + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, EnforcedShorthandSyntax, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols. +# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys +# SupportedShorthandSyntax: always, never, either, consistent, either_consistent +Style/HashSyntax: + Exclude: + - 'Rakefile' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowIfModifier. +Style/IfInsideElse: + Exclude: + - 'unitsdb/validate_schemas.rb' + +# Offense count: 3 +# This cop supports safe autocorrection (--autocorrect). +Style/IfUnlessModifier: + Exclude: + - 'lib/unitsml/unit.rb' + - 'unitsdb/validate_schemas.rb' + +# Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle, Autocorrect. +# SupportedStyles: module_function, extend_self, forbidden +Style/ModuleFunction: + Exclude: + - 'lib/unitsml.rb' + +# Offense count: 1 +Style/MultilineBlockChain: + Exclude: + - 'lib/unitsml/utility.rb' + +# Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: literals, strict +Style/MutableConstant: + Exclude: + - 'lib/unitsml/version.rb' + +# Offense count: 2 +# Configuration parameters: AllowedMethods. +# AllowedMethods: respond_to_missing? +Style/OptionalBooleanParameter: + Exclude: + - 'lib/unitsml/parser.rb' + - 'lib/unitsml/prefix.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +Style/RedundantBegin: + Exclude: + - 'unitsdb/validate_schemas.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +Style/RedundantFreeze: + Exclude: + - 'lib/unitsml/version.rb' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +Style/RedundantParentheses: + Exclude: + - 'lib/unitsml/unitsdb/units.rb' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, AllowInnerSlashes. +# SupportedStyles: slashes, percent_r, mixed +Style/RegexpLiteral: + Exclude: + - 'lib/unitsml/parser.rb' + - 'lib/unitsml/unitsdb/units.rb' + +# Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength. +# AllowedMethods: present?, blank?, presence, try, try! +Style/SafeNavigation: + Exclude: + - 'lib/unitsml/prefix.rb' + +# Offense count: 2 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: RequireEnglish, EnforcedStyle. +# SupportedStyles: use_perl_names, use_english_names, use_builtin_english_names +Style/SpecialGlobalVars: + Exclude: + - 'unitsdb/validate_schemas.rb' + +# Offense count: 2 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: Mode. +Style/StringConcatenation: + Exclude: + - 'lib/unitsml/utility.rb' + - 'unitsdb/validate_schemas.rb' + +# Offense count: 2046 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline. +# SupportedStyles: single_quotes, double_quotes +Style/StringLiterals: + Enabled: false + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: single_quotes, double_quotes +Style/StringLiteralsInInterpolation: + Exclude: + - 'unitsdb/validate_schemas.rb' + +# Offense count: 235 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyleForMultiline. +# SupportedStylesForMultiline: comma, consistent_comma, diff_comma, no_comma +Style/TrailingCommaInArguments: + Exclude: + - 'lib/unitsml.rb' + - 'lib/unitsml/dimension.rb' + - 'lib/unitsml/number.rb' + - 'lib/unitsml/parser.rb' + - 'lib/unitsml/prefix.rb' + - 'lib/unitsml/transform.rb' + - 'lib/unitsml/unit.rb' + - 'spec/unitsml/conv/plurimath_spec.rb' + - 'spec/unitsml/parser_spec.rb' + +# Offense count: 132 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyleForMultiline. +# SupportedStylesForMultiline: comma, consistent_comma, diff_comma, no_comma +Style/TrailingCommaInArrayLiteral: + Exclude: + - 'lib/unitsml.rb' + - 'lib/unitsml/transform.rb' + - 'spec/unitsml/conv/plurimath_spec.rb' + - 'spec/unitsml/parser_spec.rb' + +# Offense count: 5 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyleForMultiline. +# SupportedStylesForMultiline: comma, consistent_comma, diff_comma, no_comma +Style/TrailingCommaInHashLiteral: + Exclude: + - 'lib/unitsml.rb' + - 'lib/unitsml/dimension.rb' + - 'lib/unitsml/extender.rb' + - 'lib/unitsml/number.rb' + +# Offense count: 17 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings. +# URISchemes: http, https +Layout/LineLength: + Max: 215 diff --git a/Gemfile b/Gemfile index c048116..27403a6 100644 --- a/Gemfile +++ b/Gemfile @@ -1,15 +1,20 @@ -source "https://rubygems.org" +# frozen_string_literal: true + +source 'https://rubygems.org' # Specify your gem's dependencies in unitsml.gemspec gemspec -gem "byebug" -gem "equivalent-xml" -gem "oga" -gem "ox" -gem "plurimath" -gem "pry" -gem "rake" -gem "rspec" -gem "rubocop" -gem "simplecov" +gem 'lutaml-model', '~> 0.8.0', github: 'lutaml/lutaml-model', branch: 'main' + +gem 'canon' +gem 'mml', github: 'plurimath/mml', branch: 'main' +gem 'oga' +gem 'ox' +gem 'unitsdb', github: 'unitsml/unitsdb-ruby', branch: 'main' +gem 'plurimath', github: 'plurimath/plurimath', branch: 'rt-lutaml-080' +gem 'pry' +gem 'rake' +gem 'rspec' +gem 'rubocop' +gem 'simplecov' diff --git a/Rakefile b/Rakefile index b7e9ed5..82bb534 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,8 @@ -require "bundler/gem_tasks" -require "rspec/core/rake_task" +# frozen_string_literal: true + +require 'bundler/gem_tasks' +require 'rspec/core/rake_task' RSpec::Core::RakeTask.new(:spec) -task :default => :spec +task default: :spec diff --git a/bin/console b/bin/console index 7918021..ff6c598 100755 --- a/bin/console +++ b/bin/console @@ -1,7 +1,8 @@ #!/usr/bin/env ruby +# frozen_string_literal: true -require "bundler/setup" -require "unitsml" +require 'bundler/setup' +require 'unitsml' # You can add fixtures and/or initialization code here to make experimenting # with your gem easier. You can also use a different console, if you like. @@ -10,5 +11,5 @@ require "unitsml" # require "pry" # Pry.start -require "irb" +require 'irb' IRB.start(__FILE__) diff --git a/docs/README.adoc b/docs/README.adoc index b98de72..b55c7e9 100644 --- a/docs/README.adoc +++ b/docs/README.adoc @@ -69,7 +69,7 @@ unit.to_s # => "m" unit.to_xml # => - + meter m @@ -102,7 +102,7 @@ unit.to_s # => "um" unit.to_xml # => - + um µm diff --git a/lib/unitsml.rb b/lib/unitsml.rb index e82dd2d..89db311 100644 --- a/lib/unitsml.rb +++ b/lib/unitsml.rb @@ -1,10 +1,31 @@ # frozen_string_literal: true -require "lutaml/model" +require 'lutaml/model' +require 'unitsdb' + module Unitsml - extend self + module_function + + autoload :Dimension, 'unitsml/dimension' + autoload :Errors, 'unitsml/errors' + autoload :Extender, 'unitsml/extender' + autoload :Fenced, 'unitsml/fenced' + autoload :FencedNumeric, 'unitsml/fenced_numeric' + autoload :Formula, 'unitsml/formula' + autoload :IntermediateExpRules, 'unitsml/intermediate_exp_rules' + autoload :Model, 'unitsml/model' + autoload :Namespace, 'unitsml/namespace' + autoload :Number, 'unitsml/number' + autoload :Parse, 'unitsml/parse' + autoload :Parser, 'unitsml/parser' + autoload :Prefix, 'unitsml/prefix' + autoload :Sqrt, 'unitsml/sqrt' + autoload :Transform, 'unitsml/transform' + autoload :Unit, 'unitsml/unit' + autoload :Unitsdb, 'unitsml/unitsdb' + autoload :Utility, 'unitsml/utility' + autoload :VERSION, 'unitsml/version' - UNITSML_NS = "https://schema.unitsml.org/unitsml/1.0" REGISTER_ID = :unitsml_ruby def parse(string) @@ -26,49 +47,33 @@ def get_class_from_register(class_name) def register_type_substitution(from:, to:) register.register_global_type_substitution( from_type: from, - to_type: to, + to_type: to ) end end Lutaml::Model::GlobalRegister.register( - Lutaml::Model::Register.new(Unitsml::REGISTER_ID), + Lutaml::Model::Register.new(Unitsml::REGISTER_ID) ) -require "unitsdb" -require "unitsml/error" -require "unitsml/sqrt" -require "unitsml/unit" -require "unitsml/parse" -require "unitsml/fenced_numeric" -require "unitsml/number" -require "unitsml/parser" -require "unitsml/prefix" -require "unitsml/fenced" -require "unitsml/formula" -require "unitsml/version" -require "unitsml/unitsdb" -require "unitsml/extender" -require "unitsml/dimension" -require "unitsml/transform" -require "unitsml/unitsdb/unit" -require "unitsml/unitsdb/units" -require "unitsml/unitsdb/prefixes" -require "unitsml/unitsdb/dimension" -require "unitsml/unitsdb/dimensions" -require "unitsml/unitsdb/quantities" -require "unitsml/unitsdb/prefix_reference" -require "unitsml/unitsdb/dimension_quantity" - { ::Unitsdb::Unit => Unitsml::Unitsdb::Unit, ::Unitsdb::Units => Unitsml::Unitsdb::Units, ::Unitsdb::Prefixes => Unitsml::Unitsdb::Prefixes, ::Unitsdb::Dimension => Unitsml::Unitsdb::Dimension, ::Unitsdb::PrefixReference => Unitsml::Unitsdb::PrefixReference, - ::Unitsdb::DimensionDetails => Unitsml::Unitsdb::DimensionQuantity, + ::Unitsdb::DimensionDetails => Unitsml::Unitsdb::DimensionQuantity }.each do |key, value| Unitsml.register_type_substitution(from: key, to: value) end -Lutaml::Model::Config.xml_adapter_type = RUBY_ENGINE == "opal" ? :oga : :ox +[ + [Unitsml::Unitsdb::Dimensions, :unitsdb_dimensions], + [Unitsml::Unitsdb::Prefixes, :unitsdb_prefixes], + [Unitsml::Unitsdb::Quantities, :unitsdb_quantities], + [Unitsml::Unitsdb::Units, :unitsdb_units] +].each { |klass, id| Unitsml.register_model(klass, id: id) } + +Lutaml::Model::Config.configure do |config| + config.xml_adapter_type = RUBY_ENGINE == 'opal' ? :oga : :ox +end diff --git a/lib/unitsml/dimension.rb b/lib/unitsml/dimension.rb index e471405..35f8cd4 100644 --- a/lib/unitsml/dimension.rb +++ b/lib/unitsml/dimension.rb @@ -9,10 +9,10 @@ def initialize(dimension_name, power_numerator = nil) @power_numerator = power_numerator end - def ==(object) - self.class == object.class && - dimension_name == object&.dimension_name && - power_numerator == object&.power_numerator + def ==(other) + self.class == other.class && + dimension_name == other&.dimension_name && + power_numerator == other&.power_numerator end def dim_instance @@ -26,7 +26,7 @@ def dim_symbols def to_mathml(options) # MathML key's value in unitsdb/dimensions.yaml # file includes mi tags only. - value = ::Mml::Mi.from_xml(dim_symbols.mathml) + value = ::Mml::V4::Mi.from_xml(dim_symbols.mathml) method_name = if power_numerator value = msup_tag(value, options) :msup @@ -61,7 +61,7 @@ def generate_id def to_xml(_) attributes = { symbol: dim_instance.processed_symbol, - power_numerator: power_numerator&.raw_value || 1, + power_numerator: power_numerator&.raw_value || 1 } Model::DimensionQuantities.const_get(modelize(element_name)).new(attributes) end @@ -71,7 +71,7 @@ def xml_instances_hash(options) end def modelize(value) - value&.split("_")&.map(&:capitalize)&.join + value&.split('_')&.map(&:capitalize)&.join end private @@ -94,8 +94,8 @@ def element_name def msup_tag(value, options) mathml = power_numerator.to_mathml(options) - msup = ::Mml::Msup.new( - mrow_value: [::Mml::Mrow.new(mi_value: [value])], + msup = ::Mml::V4::Msup.new( + mrow_value: [::Mml::V4::Mrow.new(mi_value: [value])] ) [mathml].flatten.each do |record| record_values = msup.public_send("#{record[:method_name]}_value") || [] diff --git a/lib/unitsml/error.rb b/lib/unitsml/error.rb deleted file mode 100644 index bd7b6e2..0000000 --- a/lib/unitsml/error.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -module Unitsml - class Error < StandardError - end -end - -require_relative "errors/plurimath_load_error" diff --git a/lib/unitsml/errors.rb b/lib/unitsml/errors.rb new file mode 100644 index 0000000..bebf473 --- /dev/null +++ b/lib/unitsml/errors.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module Unitsml + module Errors + autoload :BaseError, 'unitsml/errors/base_error' + autoload :PlurimathLoadError, 'unitsml/errors/plurimath_load_error' + end +end diff --git a/lib/unitsml/errors/base_error.rb b/lib/unitsml/errors/base_error.rb new file mode 100644 index 0000000..c016f08 --- /dev/null +++ b/lib/unitsml/errors/base_error.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module Unitsml + module Errors + class BaseError < StandardError + end + end +end diff --git a/lib/unitsml/errors/plurimath_load_error.rb b/lib/unitsml/errors/plurimath_load_error.rb index 5b2ab19..532fc6e 100644 --- a/lib/unitsml/errors/plurimath_load_error.rb +++ b/lib/unitsml/errors/plurimath_load_error.rb @@ -2,7 +2,7 @@ module Unitsml module Errors - class PlurimathLoadError < Unitsml::Error + class PlurimathLoadError < Unitsml::Errors::BaseError def to_s <<~MESSAGE [unitsml] Error: Failed to require 'plurimath'. diff --git a/lib/unitsml/extender.rb b/lib/unitsml/extender.rb index a9f053e..93d6280 100644 --- a/lib/unitsml/extender.rb +++ b/lib/unitsml/extender.rb @@ -8,22 +8,22 @@ def initialize(symbol) @symbol = symbol end - def ==(object) - self.class == object.class && - symbol == object&.symbol + def ==(other) + self.class == other.class && + symbol == other&.symbol end def to_mathml(options) - rspace = "thickmathspace" if options[:multiplier] == :space - extender = multiplier(options[:multiplier] || "⋅", unicode: true) + rspace = 'thickmathspace' if options[:multiplier] == :space + extender = multiplier(options[:multiplier] || '⋅', unicode: true) { method_name: :mo, - value: ::Mml::Mo.new(value: extender, rspace: rspace), + value: ::Mml::V4::Mo.new(value: extender, rspace: rspace) } end def to_latex(options) - multiplier(options[:multiplier] || "/") + multiplier(options[:multiplier] || '/') end def to_asciimath(options) @@ -31,7 +31,7 @@ def to_asciimath(options) end def to_html(options) - multiplier(options[:multiplier] || "⋅", unicode: true, html: true) + multiplier(options[:multiplier] || '⋅', unicode: true, html: true) end def to_unicode(options) @@ -46,20 +46,20 @@ def multiplier(extender, unicode: false, html: false) when :space space_extender(html, unicode) when :nospace - unicode ? "⁢" : "" + unicode ? '⁢' : '' else unicode ? Utility.string_to_html_entity(extender) : extender end end def space_extender(html, unicode) - return " " if html + return ' ' if html - unicode ? "⁢" : " " + unicode ? '⁢' : ' ' end def unicode_extender - symbol == "*" ? "·" : symbol + symbol == '*' ? '·' : symbol end end end diff --git a/lib/unitsml/fenced.rb b/lib/unitsml/fenced.rb index 15a2052..69da043 100644 --- a/lib/unitsml/fenced.rb +++ b/lib/unitsml/fenced.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Unitsml class Fenced include FencedNumeric @@ -10,11 +12,11 @@ def initialize(open_paren, value, close_paren) @close_paren = close_paren end - def ==(object) - self.class == object.class && - open_paren == object&.open_paren && - value == object&.value && - close_paren == object&.close_paren + def ==(other) + self.class == other.class && + open_paren == other&.open_paren && + value == other&.value && + close_paren == other&.close_paren end def to_asciimath(options = {}) @@ -29,12 +31,12 @@ def to_mathml(options = {}) mathml = value.to_mathml(options) return mathml unless options[:explicit_parenthesis] - fenced = ::Mml::Mrow.new(mo_value: [::Mml::Mo.new(value: open_paren)]) + fenced = ::Mml::V4::Mrow.new(mo_value: [::Mml::V4::Mo.new(value: open_paren)]) fenced.ordered = true - fenced.element_order ||= [xml_order_element("mo")] + fenced.element_order ||= [xml_order_element('mo')] [mathml].flatten.each { |record| add_math_element(fenced, record) } - fenced.mo_value << ::Mml::Mo.new(value: close_paren) - fenced.element_order << xml_order_element("mo") + fenced.mo_value << ::Mml::V4::Mo.new(value: close_paren) + fenced.element_order << xml_order_element('mo') { method_name: :mrow, value: fenced } end @@ -82,7 +84,7 @@ def add_math_element(instance, child_hash) end def xml_order_element(tag_name) - Lutaml::Model::Xml::Element.new("Element", tag_name) + Lutaml::Xml::Element.new('Element', tag_name) end def fenced_conversion_for(lang:, options:) diff --git a/lib/unitsml/fenced_numeric.rb b/lib/unitsml/fenced_numeric.rb index fdf1f3e..1ed5f70 100644 --- a/lib/unitsml/fenced_numeric.rb +++ b/lib/unitsml/fenced_numeric.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Unitsml module FencedNumeric def to_i diff --git a/lib/unitsml/formula.rb b/lib/unitsml/formula.rb index 3388688..fd7749c 100644 --- a/lib/unitsml/formula.rb +++ b/lib/unitsml/formula.rb @@ -1,8 +1,7 @@ # frozen_string_literal: true -require "mml" -require "htmlentities" -require "unitsml/utility" +require 'mml' +require 'htmlentities' module Unitsml class Formula @@ -20,25 +19,25 @@ def initialize(value = [], @norm_text = norm_text end - def ==(object) - self.class == object.class && - value == object&.value && - explicit_value == object&.explicit_value && - root == object.root + def ==(other) + self.class == other.class && + value == other&.value && + explicit_value == other&.explicit_value && + root == other.root end def to_mathml(options = {}) if root options = update_options(options) nullify_mml_models if plurimath_available? - math = ::Mml::MathWithNamespace.new(display: "block") + math = ::Mml::V4::Math.new(display: 'block') math.ordered = true math.element_order ||= [] value.each { |instance| process_value(math, instance.to_mathml(options)) } - generated_math = math.to_xml.gsub(/&(.*?)(?=<\/)/, '&\1') + generated_math = math.to_xml.gsub(%r{&(.*?)(?= e + require 'plurimath' + rescue LoadError raise Errors::PlurimathLoadError end @@ -178,7 +178,7 @@ def add_math_element(math_instance, child_hash) method_value = math_instance.public_send(:"#{method_name}_value") || [] method_value += Array(child_hash[:value]) math_instance.public_send(:"#{method_name}_value=", method_value) - math_instance.element_order << Lutaml::Model::Xml::Element.new("Element", method_name.to_s) + math_instance.element_order << Lutaml::Xml::Element.new('Element', method_name.to_s) end def plurimath_available? @@ -192,7 +192,7 @@ def nullify_mml_models end def reset_mml_models - ::Mml::Configuration.custom_models = Plurimath::Mathml::Parser::CONFIGURATION + ::Mml::V4::Configuration.custom_models = Plurimath::Mathml::Parser::CONFIGURATION end def process_value(math, mathml_instances) diff --git a/lib/unitsml/intermediate_exp_rules.rb b/lib/unitsml/intermediate_exp_rules.rb index 00c1d85..9408431 100644 --- a/lib/unitsml/intermediate_exp_rules.rb +++ b/lib/unitsml/intermediate_exp_rules.rb @@ -1,9 +1,13 @@ +# frozen_string_literal: true + module Unitsml module IntermediateExpRules include Parslet # Rules for slashed number - rule(:slashed_number_int_exp) { slashed_number | (opening_paren >> slashed_number_named_int_exp.as(:int_exp) >> closing_paren) } + rule(:slashed_number_int_exp) do + slashed_number | (opening_paren >> slashed_number_named_int_exp.as(:int_exp) >> closing_paren) + end rule(:slashed_number_named_int_exp) do (opening_paren.as(:open_paren) >> slashed_number_int_exp >> closing_paren.as(:close_paren)) | slashed_number_int_exp @@ -14,7 +18,9 @@ module IntermediateExpRules 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(:int_exp_prefixes_units) do + opening_paren >> spaces? >> named_int_exp_prefixes_units.as(:int_exp) >> spaces? >> closing_paren + end rule(:implicit_extended) do prefixes_units.as(:first_set) >> spaces.as(:extender) >> prefixes_units.as(:second_set) | @@ -51,7 +57,9 @@ module IntermediateExpRules dimension_rules end - rule(:int_exp_dimension_rules) { opening_paren >> dimension_rules_named_exp.as(:int_exp) >> closing_paren >> extended_dimension_rules.maybe } + rule(:int_exp_dimension_rules) do + opening_paren >> dimension_rules_named_exp.as(:int_exp) >> closing_paren >> extended_dimension_rules.maybe + end rule(:extended_dimension_rules) { spaces? >> extender >> spaces? >> dimension_rules_int_exp.as(:sequence) } rule(:dimension_rules_named_exp) do diff --git a/lib/unitsml/model.rb b/lib/unitsml/model.rb new file mode 100644 index 0000000..85a9dec --- /dev/null +++ b/lib/unitsml/model.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Unitsml + module Model + autoload :Dimension, "#{__dir__}/model/dimension" + autoload :DimensionQuantities, "#{__dir__}/model/dimension_quantities" + autoload :Namespace, "#{__dir__}/model/namespace" + autoload :Prefix, "#{__dir__}/model/prefix" + autoload :Prefixes, "#{__dir__}/model/prefixes" + autoload :Quantities, "#{__dir__}/model/quantities" + autoload :Quantity, "#{__dir__}/model/quantity" + autoload :Unit, "#{__dir__}/model/unit" + autoload :Units, "#{__dir__}/model/units" + end +end diff --git a/lib/unitsml/model/dimension.rb b/lib/unitsml/model/dimension.rb index 6a98dae..7046695 100644 --- a/lib/unitsml/model/dimension.rb +++ b/lib/unitsml/model/dimension.rb @@ -1,19 +1,9 @@ # frozen_string_literal: true -require "unitsml/model/dimension_quantities/quantity" -require "unitsml/model/dimension_quantities/length" -require "unitsml/model/dimension_quantities/mass" -require "unitsml/model/dimension_quantities/time" -require "unitsml/model/dimension_quantities/electric_current" -require "unitsml/model/dimension_quantities/thermodynamic_temperature" -require "unitsml/model/dimension_quantities/amount_of_substance" -require "unitsml/model/dimension_quantities/luminous_intensity" -require "unitsml/model/dimension_quantities/plane_angle" - module Unitsml module Model class Dimension < Lutaml::Model::Serializable - attribute :id, :string + attribute :id, :xml_id attribute :length, DimensionQuantities::Length attribute :mass, DimensionQuantities::Mass attribute :time, DimensionQuantities::Time @@ -24,10 +14,10 @@ class Dimension < Lutaml::Model::Serializable attribute :plane_angle, DimensionQuantities::PlaneAngle xml do - root "Dimension" - namespace Unitsml::UNITSML_NS + namespace ::Unitsml::Namespace + element 'Dimension' - map_attribute :id, to: :id, namespace: nil, prefix: "xml" + map_attribute :id, to: :id map_element :Length, to: :length map_element :Mass, to: :mass map_element :Time, to: :time diff --git a/lib/unitsml/model/dimension_quantities.rb b/lib/unitsml/model/dimension_quantities.rb new file mode 100644 index 0000000..2b80a41 --- /dev/null +++ b/lib/unitsml/model/dimension_quantities.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module Unitsml + module Model + module DimensionQuantities + autoload :AmountOfSubstance, "#{__dir__}/dimension_quantities/amount_of_substance" + autoload :ElectricCurrent, "#{__dir__}/dimension_quantities/electric_current" + autoload :Length, "#{__dir__}/dimension_quantities/length" + autoload :LuminousIntensity, "#{__dir__}/dimension_quantities/luminous_intensity" + autoload :Mass, "#{__dir__}/dimension_quantities/mass" + autoload :PlaneAngle, "#{__dir__}/dimension_quantities/plane_angle" + autoload :Quantity, "#{__dir__}/dimension_quantities/quantity" + autoload :ThermodynamicTemperature, "#{__dir__}/dimension_quantities/thermodynamic_temperature" + autoload :Time, "#{__dir__}/dimension_quantities/time" + end + end +end diff --git a/lib/unitsml/model/dimension_quantities/quantity.rb b/lib/unitsml/model/dimension_quantities/quantity.rb index e0ab9d0..418dd46 100644 --- a/lib/unitsml/model/dimension_quantities/quantity.rb +++ b/lib/unitsml/model/dimension_quantities/quantity.rb @@ -8,6 +8,8 @@ class Quantity < Lutaml::Model::Serializable attribute :power_numerator, :string xml do + namespace ::Unitsml::Namespace + map_attribute :symbol, to: :symbol map_attribute :powerNumerator, to: :power_numerator end diff --git a/lib/unitsml/model/prefix.rb b/lib/unitsml/model/prefix.rb index ffe0077..4b33b6b 100644 --- a/lib/unitsml/model/prefix.rb +++ b/lib/unitsml/model/prefix.rb @@ -1,25 +1,21 @@ # frozen_string_literal: true -require "unitsml/model/prefixes/name" -require "unitsml/model/prefixes/symbol" - - module Unitsml module Model class Prefix < Lutaml::Model::Serializable attribute :name, Prefixes::Name - attribute :id, :string + attribute :id, :xml_id attribute :symbol, Prefixes::Symbol, collection: true attribute :prefix_base, :string attribute :prefix_power, :string xml do - root "Prefix" - namespace Unitsml::UNITSML_NS + namespace ::Unitsml::Namespace + element 'Prefix' map_attribute :prefixBase, to: :prefix_base map_attribute :prefixPower, to: :prefix_power - map_attribute :id, to: :id, namespace: nil, prefix: "xml" + map_attribute :id, to: :id map_element :PrefixName, to: :name map_element :PrefixSymbol, to: :symbol end diff --git a/lib/unitsml/model/prefixes.rb b/lib/unitsml/model/prefixes.rb new file mode 100644 index 0000000..d9b1cb7 --- /dev/null +++ b/lib/unitsml/model/prefixes.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module Unitsml + module Model + module Prefixes + autoload :Name, "#{__dir__}/prefixes/name" + autoload :Symbol, "#{__dir__}/prefixes/symbol" + end + end +end diff --git a/lib/unitsml/model/prefixes/name.rb b/lib/unitsml/model/prefixes/name.rb index 43bb181..2d888c5 100644 --- a/lib/unitsml/model/prefixes/name.rb +++ b/lib/unitsml/model/prefixes/name.rb @@ -2,15 +2,16 @@ module Unitsml module Model - class Prefixes + module Prefixes class Name < Lutaml::Model::Serializable - attribute :lang, :string, default: -> { "en" } + attribute :lang, :xml_lang, default: -> { 'en' } attribute :content, :string xml do - root "PrefixName" + element 'PrefixName' + namespace ::Unitsml::Namespace - map_attribute :lang, to: :lang, namespace: nil, prefix: "xml", render_default: true + map_attribute :lang, to: :lang, render_default: true map_content to: :content end end diff --git a/lib/unitsml/model/prefixes/symbol.rb b/lib/unitsml/model/prefixes/symbol.rb index ead9f73..cd1a2bd 100644 --- a/lib/unitsml/model/prefixes/symbol.rb +++ b/lib/unitsml/model/prefixes/symbol.rb @@ -2,13 +2,14 @@ module Unitsml module Model - class Prefixes + module Prefixes class Symbol < Lutaml::Model::Serializable attribute :type, :string attribute :content, :string xml do - root "PrefixSymbol" + element 'PrefixSymbol' + namespace ::Unitsml::Namespace map_attribute :type, to: :type map_content to: :content diff --git a/lib/unitsml/model/quantities.rb b/lib/unitsml/model/quantities.rb new file mode 100644 index 0000000..a06388c --- /dev/null +++ b/lib/unitsml/model/quantities.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module Unitsml + module Model + module Quantities + autoload :Name, "#{__dir__}/quantities/name" + end + end +end diff --git a/lib/unitsml/model/quantities/name.rb b/lib/unitsml/model/quantities/name.rb index 17a152b..c6156a6 100644 --- a/lib/unitsml/model/quantities/name.rb +++ b/lib/unitsml/model/quantities/name.rb @@ -4,13 +4,14 @@ module Unitsml module Model module Quantities class Name < Lutaml::Model::Serializable - attribute :lang, :string, default: -> { "en-US" } + attribute :lang, :xml_lang, default: -> { 'en' } attribute :content, :string xml do - root "QuantityName" + element 'QuantityName' + namespace ::Unitsml::Namespace - map_attribute :lang, to: :lang, namespace: nil, prefix: "xml", render_default: true + map_attribute :lang, to: :lang, render_default: true map_content to: :content end end diff --git a/lib/unitsml/model/quantity.rb b/lib/unitsml/model/quantity.rb index e258dc3..b269a51 100644 --- a/lib/unitsml/model/quantity.rb +++ b/lib/unitsml/model/quantity.rb @@ -1,20 +1,18 @@ # frozen_string_literal: true -require "unitsml/model/quantities/name" - module Unitsml module Model class Quantity < Lutaml::Model::Serializable - attribute :id, :string + attribute :id, :xml_id attribute :name, Quantities::Name, collection: true - attribute :quantity_type, :string, default: -> { "base" } + attribute :quantity_type, :string, default: -> { 'base' } attribute :dimension_url, :string xml do - root "Quantity" - namespace Unitsml::UNITSML_NS + namespace ::Unitsml::Namespace + element 'Quantity' - map_attribute :id, to: :id, namespace: nil, prefix: "xml" + map_attribute :id, to: :id map_attribute :quantityType, to: :quantity_type, render_default: true map_attribute :dimensionURL, to: :dimension_url map_element :QuantityName, to: :name diff --git a/lib/unitsml/model/unit.rb b/lib/unitsml/model/unit.rb index 0916192..a2c32da 100644 --- a/lib/unitsml/model/unit.rb +++ b/lib/unitsml/model/unit.rb @@ -1,14 +1,9 @@ # frozen_string_literal: true -require "unitsml/model/units/name" -require "unitsml/model/units/symbol" -require "unitsml/model/units/system" -require "unitsml/model/units/root_units" - module Unitsml module Model class Unit < Lutaml::Model::Serializable - attribute :id, :string + attribute :id, :xml_id attribute :name, Units::Name attribute :dimension_url, :string attribute :symbol, Units::Symbol, collection: true @@ -16,11 +11,11 @@ class Unit < Lutaml::Model::Serializable attribute :root_units, Units::RootUnits xml do - root "Unit" - namespace Unitsml::UNITSML_NS + namespace ::Unitsml::Namespace + element 'Unit' map_attribute :dimensionURL, to: :dimension_url - map_attribute :id, to: :id, namespace: nil, prefix: "xml" + map_attribute :id, to: :id map_element :UnitSystem, to: :system map_element :UnitName, to: :name map_element :UnitSymbol, to: :symbol diff --git a/lib/unitsml/model/units.rb b/lib/unitsml/model/units.rb new file mode 100644 index 0000000..34bb1f6 --- /dev/null +++ b/lib/unitsml/model/units.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Unitsml + module Model + module Units + autoload :EnumeratedRootUnit, 'unitsml/model/units/enumerated_root_unit' + autoload :Name, 'unitsml/model/units/name' + autoload :RootUnits, 'unitsml/model/units/root_units' + autoload :Symbol, 'unitsml/model/units/symbol' + autoload :System, 'unitsml/model/units/system' + end + end +end diff --git a/lib/unitsml/model/units/enumerated_root_unit.rb b/lib/unitsml/model/units/enumerated_root_unit.rb index fdc5fa4..90ba033 100644 --- a/lib/unitsml/model/units/enumerated_root_unit.rb +++ b/lib/unitsml/model/units/enumerated_root_unit.rb @@ -9,6 +9,7 @@ class EnumeratedRootUnit < Lutaml::Model::Serializable attribute :power_numerator, :string xml do + namespace ::Unitsml::Namespace map_attribute :unit, to: :unit map_attribute :prefix, to: :prefix map_attribute :powerNumerator, to: :power_numerator diff --git a/lib/unitsml/model/units/name.rb b/lib/unitsml/model/units/name.rb index 8eda6c7..fdf8801 100644 --- a/lib/unitsml/model/units/name.rb +++ b/lib/unitsml/model/units/name.rb @@ -5,13 +5,14 @@ module Model module Units class Name < Lutaml::Model::Serializable attribute :name, :string - attribute :lang, :string, default: -> { "en" } + attribute :lang, :xml_lang, default: -> { 'en' } xml do - root "UnitName" + element 'UnitName' + namespace ::Unitsml::Namespace map_content to: :name - map_attribute :lang, to: :lang, namespace: nil, prefix: "xml", render_default: true + map_attribute :lang, to: :lang, render_default: true end end end diff --git a/lib/unitsml/model/units/root_units.rb b/lib/unitsml/model/units/root_units.rb index acf8c59..7502582 100644 --- a/lib/unitsml/model/units/root_units.rb +++ b/lib/unitsml/model/units/root_units.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "unitsml/model/units/enumerated_root_unit" - module Unitsml module Model module Units @@ -9,6 +7,9 @@ class RootUnits < Lutaml::Model::Serializable attribute :enumerated_root_unit, EnumeratedRootUnit, collection: true xml do + element 'RootUnits' + namespace ::Unitsml::Namespace + map_element :EnumeratedRootUnit, to: :enumerated_root_unit end end diff --git a/lib/unitsml/model/units/symbol.rb b/lib/unitsml/model/units/symbol.rb index 7069a36..966f4a6 100644 --- a/lib/unitsml/model/units/symbol.rb +++ b/lib/unitsml/model/units/symbol.rb @@ -8,7 +8,8 @@ class Symbol < Lutaml::Model::Serializable attribute :content, :string xml do - root "UnitSymbol" + element 'UnitSymbol' + namespace ::Unitsml::Namespace map_attribute :type, to: :type map_content to: :content, with: { from: :content_from_xml, to: :content_to_xml } diff --git a/lib/unitsml/model/units/system.rb b/lib/unitsml/model/units/system.rb index ab2c87c..2f0d6b0 100644 --- a/lib/unitsml/model/units/system.rb +++ b/lib/unitsml/model/units/system.rb @@ -6,14 +6,15 @@ module Units class System < Lutaml::Model::Serializable attribute :name, :string attribute :type, :string - attribute :lang, :string, default: -> { "en-US" } + attribute :lang, :xml_lang, default: -> { 'en' } xml do - root "UnitSystem" + element 'UnitSystem' + namespace ::Unitsml::Namespace map_attribute :name, to: :name map_attribute :type, to: :type - map_attribute :lang, to: :lang, namespace: nil, prefix: "xml", render_default: true + map_attribute :lang, to: :lang, render_default: true end end end diff --git a/lib/unitsml/namespace.rb b/lib/unitsml/namespace.rb new file mode 100644 index 0000000..f168f2d --- /dev/null +++ b/lib/unitsml/namespace.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module Unitsml + class Namespace < Lutaml::Xml::Namespace + uri 'https://schema.unitsml.org/unitsml/1.0' + prefix_default 'unitsml' + end +end diff --git a/lib/unitsml/number.rb b/lib/unitsml/number.rb index 6a283ee..7864401 100644 --- a/lib/unitsml/number.rb +++ b/lib/unitsml/number.rb @@ -11,20 +11,20 @@ def initialize(value) @value = value end - def ==(object) - self.class == object.class && - value == object&.value + def ==(other) + self.class == other.class && + value == other&.value end def to_mathml(_options) matched_value = value&.match(/-?(.+)/) mn_value = matched_value ? matched_value[1] : value - mn_tag = ::Mml::Mn.new(value: mn_value) - value.start_with?("-") ? mrow_hash(mn_tag) : mn_hash(mn_tag) + mn_tag = ::Mml::V4::Mn.new(value: mn_value) + value.start_with?('-') ? mrow_hash(mn_tag) : mn_hash(mn_tag) end def to_html(_options) - value.sub("-", "−") + value.sub('-', '−') end def to_latex(_options) @@ -40,21 +40,21 @@ def to_unicode(_options) end def negative? - value.start_with?("-") + value.start_with?('-') end def update_negative_sign - if negative? - self.value = value.delete_prefix("-") - else - self.value = ["-", value].join - end + self.value = if negative? + value.delete_prefix('-') + else + ['-', value].join + end end def float_to_display - return "" if value.nil? + return '' if value.nil? - value.to_f.round(1).to_s.sub(/\.0$/, "") + value.to_f.round(1).to_s.sub(/\.0$/, '') end private @@ -62,17 +62,17 @@ def float_to_display def mrow_hash(mn_tag) { method_name: :mrow, - value: ::Mml::Mrow.new( - mo_value: [::Mml::Mo.new(value: "−")], - mn_value: [mn_tag], - ), + value: ::Mml::V4::Mrow.new( + mo_value: [::Mml::V4::Mo.new(value: '−')], + mn_value: [mn_tag] + ) } end def mn_hash(mn_tag) { method_name: :mn, - value: mn_tag, + value: mn_tag } end end diff --git a/lib/unitsml/parse.rb b/lib/unitsml/parse.rb index cecd88a..1685798 100644 --- a/lib/unitsml/parse.rb +++ b/lib/unitsml/parse.rb @@ -1,49 +1,48 @@ # frozen_string_literal: true -require "parslet" -require "unitsml/unitsdb" -require_relative "intermediate_exp_rules" +require 'parslet' + module Unitsml class Parse < Parslet::Parser include IntermediateExpRules - rule(:sqrt) { str("sqrt") } - rule(:power) { str("^") >> slashed_number_int_exp.as(:power_numerator) } - rule(:hyphen) { str("-") } + rule(:sqrt) { str('sqrt') } + rule(:power) { str('^') >> slashed_number_int_exp.as(:power_numerator) } + 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(: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(: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(: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, "unit") + @@filtered_units ||= arr_to_expression(::Unitsml::Unitsdb.units.filtered, 'unit') end rule(:single_letter_prefixes) do - @@prefixes1 ||= arr_to_expression(Unitsdb.prefixes_by_size(1), "prefix") + @@prefixes1 ||= arr_to_expression(::Unitsml::Unitsdb.prefixes_by_size(1), 'prefix') end rule(:double_letter_prefixes) do - @@prefixes2 ||= arr_to_expression(Unitsdb.prefixes_by_size(2), "prefix") + @@prefixes2 ||= arr_to_expression(::Unitsml::Unitsdb.prefixes_by_size(2), 'prefix') end rule(:dimensions) do - @@dimensions ||= arr_to_expression(Unitsdb.dimensions.parsables.keys, "dimension") + @@dimensions ||= arr_to_expression(::Unitsml::Unitsdb.dimensions.parsables.keys, 'dimension') end rule(:prefixes_units) do (sqrt_sequence >> extended_prefixed_units.maybe) | - (str("1").as(:unit) >> extended_prefixed_units.maybe) | + (str('1').as(:unit) >> extended_prefixed_units.maybe) | (unit_and_power >> extended_prefixed_units) | unit_and_power >> (any.absent? | (extender | opening_paren | closing_paren | spaces).present?) | (double_letter_prefixes >> unit_and_power >> extended_prefixed_units) | @@ -62,7 +61,7 @@ class Parse < Parslet::Parser root :expression def arr_to_expression(arr, file_name) - array = arr&.flatten&.compact&.sort_by(&:length).reverse + array = arr&.flatten&.compact&.sort_by(&:length)&.reverse array&.reduce do |expression, expr_string| expression = str(expression).as(file_name.to_sym) if expression.is_a?(String) expression | str(expr_string).as(file_name.to_sym) diff --git a/lib/unitsml/parser.rb b/lib/unitsml/parser.rb index f7fb8a6..9fe1697 100644 --- a/lib/unitsml/parser.rb +++ b/lib/unitsml/parser.rb @@ -5,10 +5,10 @@ class Parser attr_accessor :text def initialize(text) - @regexp = %r{(quantity|name|symbol|multiplier):\s*} + @regexp = /(quantity|name|symbol|multiplier):\s*/ @text = extract_equation(text) @orig_text = @text - @text = @text.gsub("−", "-") + @text = @text.gsub('−', '-') post_extras end @@ -21,10 +21,10 @@ def parse explicit_value: @extras_hash, root: true, orig_text: @orig_text, - norm_text: text, + norm_text: text ) update_units_exponents(formula.value, false) - formula.value.first.only_instance = true if text.end_with?("-") + formula.value.first.only_instance = true if text.end_with?('-') formula end @@ -33,7 +33,7 @@ def update_units_exponents(array, inverse, sqrt = false) if object.is_a?(Sqrt) object = object.value if object.respond_to?(:power_numerator) - object.power_numerator = Number.new("0.5") + object.power_numerator = Number.new('0.5') else update_units_exponents([object], inverse, true) end @@ -41,12 +41,12 @@ def update_units_exponents(array, inverse, sqrt = false) case object when Unit - next object.power_numerator = Number.new("0.5") if sqrt + next object.power_numerator = Number.new('0.5') if sqrt next unless inverse inverse ? object.inverse_power_numerator : object.power_numerator - when Dimension then object.power_numerator = Number.new("0.5") if sqrt - when Extender then inverse = !inverse if ["/", "//"].any?(object.symbol) + when Dimension then object.power_numerator = Number.new('0.5') if sqrt + when Extender then inverse = !inverse if ['/', '//'].any?(object.symbol) when Formula then update_units_exponents(object.value, inverse) when Fenced then update_units_exponents([object.value], inverse, sqrt) end @@ -57,7 +57,7 @@ def post_extras return nil unless @regexp.match?(text) @extras_hash = {} - texts_array = text&.split(",")&.map(&:strip) + texts_array = text&.split(',')&.map(&:strip) @text = texts_array&.shift texts_array&.map { |text| parse_extras(text) } end @@ -65,16 +65,16 @@ def post_extras def parse_extras(text) return nil unless @regexp.match?(text) - key, _, value = text&.partition(":") + key, _, value = text&.partition(':') @extras_hash[key&.to_sym] ||= value&.strip end private def extract_equation(text) - return text unless text&.start_with?("unitsml(") + return text unless text&.start_with?('unitsml(') - text.delete_prefix("unitsml(").delete_suffix(")") + text.delete_prefix('unitsml(').delete_suffix(')') end end end diff --git a/lib/unitsml/prefix.rb b/lib/unitsml/prefix.rb index c15b5e1..01d6507 100644 --- a/lib/unitsml/prefix.rb +++ b/lib/unitsml/prefix.rb @@ -9,10 +9,10 @@ def initialize(prefix_name, only_instance = false) @only_instance = only_instance end - def ==(object) - self.class == object.class && - prefix_name == object&.prefix_name && - only_instance == object&.only_instance + def ==(other) + self.class == other.class && + prefix_name == other&.prefix_name && + only_instance == other&.only_instance end def prefix_instance @@ -20,11 +20,11 @@ def prefix_instance end def id - @id ||= prefix_instance.identifiers.find { |prefix| prefix.type == "nist" }&.id + @id ||= prefix_instance.identifiers.find { |prefix| prefix.type == 'nist' }&.id end def name - @name ||= prefix_instance.names.find { |name| name.lang == "en" }.value + @name ||= prefix_instance.names.find { |name| name.lang == 'en' }.value end def prefix_symbols @@ -35,11 +35,11 @@ def to_mathml(_) symbol = Utility.string_to_html_entity( Utility.html_entity_to_unicode( prefix_symbols.html - ), + ) ) return symbol unless only_instance - { method_name: :mi, value: ::Mml::Mi.new(value: symbol)} + { method_name: :mi, value: ::Mml::V4::Mi.new(value: symbol) } end def to_latex(_) @@ -59,7 +59,7 @@ def to_unicode(_) end def symbolid - prefix_symbols.ascii if prefix_symbols + prefix_symbols&.ascii end def base diff --git a/lib/unitsml/sqrt.rb b/lib/unitsml/sqrt.rb index da5875f..4f2a32b 100644 --- a/lib/unitsml/sqrt.rb +++ b/lib/unitsml/sqrt.rb @@ -8,9 +8,9 @@ def initialize(value) @value = value end - def ==(object) - self.class == object.class && - value == object&.value + def ==(other) + self.class == other.class && + value == other&.value end def to_asciimath(options) diff --git a/lib/unitsml/transform.rb b/lib/unitsml/transform.rb index d51881e..85be048 100644 --- a/lib/unitsml/transform.rb +++ b/lib/unitsml/transform.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require "parslet" +require 'parslet' module Unitsml class Transform < Parslet::Transform rule(sqrt: simple(:sqrt)) { Sqrt.new(sqrt) } @@ -24,8 +24,7 @@ class Transform < Parslet::Transform 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), - ] + [Utility.set_to_fence(first_set), Utility.set_to_fence(second_set)] ) end @@ -34,7 +33,7 @@ class Transform < Parslet::Transform Formula.new( [ first_set, - second_set, + second_set ] ) end @@ -44,7 +43,7 @@ class Transform < Parslet::Transform Formula.new( [ first_set, - Utility.set_to_fence(second_set), + Utility.set_to_fence(second_set) ] ) end @@ -77,7 +76,7 @@ class Transform < Parslet::Transform [ first_set, Extender.new(extender.to_s), - second_set, + second_set ] ) end @@ -89,7 +88,7 @@ class Transform < Parslet::Transform [ implicit_extended, Extender.new(extender.to_s), - sequence, + sequence ] ) end @@ -101,7 +100,7 @@ class Transform < Parslet::Transform [ int_exp, Extender.new(extender.to_s), - sequence, + sequence ] ) end @@ -113,7 +112,7 @@ class Transform < Parslet::Transform [ Unit.new(unit.to_s), Extender.new(extender.to_s), - sequence, + sequence ] ) end @@ -125,7 +124,7 @@ class Transform < Parslet::Transform [ Dimension.new(dimension.to_s), Extender.new(extender.to_s), - sequence, + sequence ] ) end @@ -136,7 +135,7 @@ class Transform < Parslet::Transform Fenced.new( open_paren.to_s, int_exp, - close_paren.to_s, + close_paren.to_s ) end @@ -146,7 +145,7 @@ class Transform < Parslet::Transform Fenced.new( open_paren.to_s, Number.new(integer.to_s), - close_paren.to_s, + close_paren.to_s ) end @@ -158,8 +157,8 @@ class Transform < Parslet::Transform [ Unit.new(unit.to_s, power_numerator), Extender.new(ext.to_s), - sequence, - ], + sequence + ] ) end @@ -171,8 +170,8 @@ class Transform < Parslet::Transform [ Dimension.new(dimension.to_s, power_numerator), Extender.new(ext.to_s), - sequence, - ], + sequence + ] ) end @@ -184,8 +183,8 @@ class Transform < Parslet::Transform [ Unit.new(unit.to_s, prefix: Prefix.new(prefix.to_s)), Extender.new(ext.to_s), - sequence, - ], + sequence + ] ) end @@ -198,8 +197,8 @@ class Transform < Parslet::Transform [ Unit.new(unit.to_s, power_numerator, prefix: Prefix.new(prefix.to_s)), Extender.new(ext.to_s), - sequence, - ], + sequence + ] ) end end diff --git a/lib/unitsml/unit.rb b/lib/unitsml/unit.rb index 2f47a9d..aa7d8ea 100644 --- a/lib/unitsml/unit.rb +++ b/lib/unitsml/unit.rb @@ -14,11 +14,11 @@ def initialize(unit_name, @power_numerator = power_numerator end - def ==(object) - self.class == object.class && - prefix == object&.prefix && - unit_name == object&.unit_name && - power_numerator == object&.power_numerator + def ==(other) + self.class == other.class && + prefix == other&.prefix && + unit_name == other&.unit_name && + power_numerator == other&.power_numerator end def unit_instance @@ -36,12 +36,12 @@ def unit_symbols def to_mathml(options) value = unit_symbols&.mathml tag_name = value.match(/^<(?\w+)/)[:tag] - value = ::Mml.const_get(tag_name.capitalize).from_xml(value) + value = ::Mml::V4.const_get(tag_name.capitalize).from_xml(value) value.value = "#{prefix.to_mathml(options)}#{value.value}" if prefix if power_numerator value = msup_tag( { method_name: tag_name, value: value }, - options, + options ) tag_name = :msup end @@ -64,9 +64,7 @@ def to_asciimath(options) def to_html(options) value = unit_symbols&.html - if power_numerator - value = "#{value}#{power_numerator.to_html(options)}" - end + value = "#{value}#{power_numerator.to_html(options)}" if power_numerator value = "#{prefix.to_html(options)}#{value}" if prefix value end @@ -79,7 +77,7 @@ def to_unicode(options) end def enumerated_name - unit_instance.names.find { |name| name.lang == "en" }&.value + unit_instance.names.find { |name| name.lang == 'en' }&.value end def prefix_name @@ -110,7 +108,7 @@ def inverse_power_numerator if power_numerator power_numerator.update_negative_sign else - @power_numerator = Number.new("-1") + @power_numerator = Number.new('-1') end end @@ -120,7 +118,7 @@ def display_exp return unless power_numerator exp = power_numerator.raw_value - "^#{exp}" if exp != "1" + "^#{exp}" if exp != '1' end def system_reference @@ -128,13 +126,13 @@ def system_reference end def msup_tag(value, options) - msup = ::Mml::Msup.new + msup = ::Mml::V4::Msup.new msup.ordered = true msup.element_order = [] [value, power_numerator.to_mathml(options)].flatten.each do |record| values = msup.public_send("#{record[:method_name]}_value") || [] values += [record[:value]] - msup.element_order << Lutaml::Model::Xml::Element.new("Element", record[:method_name].to_s) + msup.element_order << Lutaml::Xml::Element.new('Element', record[:method_name].to_s) msup.public_send("#{record[:method_name]}_value=", values) end msup diff --git a/lib/unitsml/unitsdb.rb b/lib/unitsml/unitsdb.rb index 60599bd..3c91b8c 100644 --- a/lib/unitsml/unitsdb.rb +++ b/lib/unitsml/unitsdb.rb @@ -2,6 +2,15 @@ module Unitsml module Unitsdb + autoload :Unit, "#{__dir__}/unitsdb/unit" + autoload :Units, "#{__dir__}/unitsdb/units" + autoload :Prefixes, "#{__dir__}/unitsdb/prefixes" + autoload :Dimension, "#{__dir__}/unitsdb/dimension" + autoload :Dimensions, "#{__dir__}/unitsdb/dimensions" + autoload :Quantities, "#{__dir__}/unitsdb/quantities" + autoload :PrefixReference, "#{__dir__}/unitsdb/prefix_reference" + autoload :DimensionQuantity, "#{__dir__}/unitsdb/dimension_quantity" + class << self def load_file(file_name) @@hash ||= {} @@ -37,7 +46,7 @@ def prefixes_by_size(size) def valid_path(file_name) File.expand_path( - File.join(__dir__, "..", "..","unitsdb", "#{file_name}.yaml") + File.join(__dir__, '..', '..', 'unitsdb', "#{file_name}.yaml") ) end end diff --git a/lib/unitsml/unitsdb/dimension.rb b/lib/unitsml/unitsdb/dimension.rb index ffac050..a8458fc 100644 --- a/lib/unitsml/unitsdb/dimension.rb +++ b/lib/unitsml/unitsdb/dimension.rb @@ -56,13 +56,13 @@ def processed_symbol end def set_vector - @vector ||= Utility::DIMS_VECTOR.map do |h| + @set_vector ||= Utility::DIMS_VECTOR.map do |h| public_send(Utility.underscore(h))&.power - end.join(":") + end.join(':') end def id - identifiers.find { |id| id.type == "nist" }&.id + identifiers.find { |id| id.type == 'nist' }&.id end private diff --git a/lib/unitsml/unitsdb/dimensions.rb b/lib/unitsml/unitsdb/dimensions.rb index 7ea4163..46dbd88 100644 --- a/lib/unitsml/unitsdb/dimensions.rb +++ b/lib/unitsml/unitsdb/dimensions.rb @@ -4,8 +4,8 @@ module Unitsml module Unitsdb class Dimensions < ::Unitsdb::Dimensions def find_by_vector(vector) - @vectored ||= dimensions.each(&:set_vector) - find(:vector, vector) + dimensions.each(&:set_vector) + dimensions.find { |dim| dim.set_vector == vector } end def find_by_id(d_id) @@ -30,5 +30,3 @@ def find(field, matching_data) end end end - -Unitsml.register_model(Unitsml::Unitsdb::Dimensions, id: :unitsdb_dimensions) diff --git a/lib/unitsml/unitsdb/prefixes.rb b/lib/unitsml/unitsdb/prefixes.rb index 085b1a2..47ce5a2 100644 --- a/lib/unitsml/unitsdb/prefixes.rb +++ b/lib/unitsml/unitsdb/prefixes.rb @@ -32,5 +32,3 @@ def find(matching_data, field, prefix_method) end end end - -Unitsml.register_model(Unitsml::Unitsdb::Prefixes, id: :unitsdb_prefixes) diff --git a/lib/unitsml/unitsdb/quantities.rb b/lib/unitsml/unitsdb/quantities.rb index e55d36e..1c521f5 100644 --- a/lib/unitsml/unitsdb/quantities.rb +++ b/lib/unitsml/unitsdb/quantities.rb @@ -11,5 +11,3 @@ def find_by_id(q_id) end end end - -Unitsml.register_model(Unitsml::Unitsdb::Quantities, id: :unitsdb_quantities) diff --git a/lib/unitsml/unitsdb/unit.rb b/lib/unitsml/unitsdb/unit.rb index 08e2fff..8409c80 100644 --- a/lib/unitsml/unitsdb/unit.rb +++ b/lib/unitsml/unitsdb/unit.rb @@ -10,11 +10,11 @@ def dimension_url end def en_name - names.find { |name| name.lang == "en" }&.value + names.find { |name| name.lang == 'en' }&.value end def nist_id - identifiers.find { |id| id.type == "nist" }&.id + identifiers.find { |id| id.type == 'nist' }&.id end end end diff --git a/lib/unitsml/unitsdb/units.rb b/lib/unitsml/unitsdb/units.rb index b538130..46e8d34 100644 --- a/lib/unitsml/unitsdb/units.rb +++ b/lib/unitsml/unitsdb/units.rb @@ -13,7 +13,7 @@ def find_by_name(u_name) def filtered @filtered ||= symbols_ids.reject do |unit| - ((/\*|\^|\/|^1$/).match?(unit) || find_by_symbol_id(unit).prefixed) + %r{\*|\^|/|^1$}.match?(unit) || find_by_symbol_id(unit).prefixed end end @@ -26,7 +26,7 @@ def symbols_ids end def symbols_hash - @symbol_ids_hash ||= units.each_with_object({}) do |unit, object| + @symbols_hash ||= units.each_with_object({}) do |unit, object| unit.symbols&.each { |unit_sym| object[unit_sym.id] = unit } end end @@ -43,5 +43,3 @@ def find(matching_data, field, unit_method) end end end - -Unitsml.register_model(Unitsml::Unitsdb::Units, id: :unitsdb_units) diff --git a/lib/unitsml/utility.rb b/lib/unitsml/utility.rb index 73f6447..711ec4a 100644 --- a/lib/unitsml/utility.rb +++ b/lib/unitsml/utility.rb @@ -1,37 +1,32 @@ # frozen_string_literal: true -require "unitsml/model/unit" -require "unitsml/model/prefix" -require "unitsml/model/quantity" -require "unitsml/model/dimension" - module Unitsml module Utility # Unit to dimension U2D = { - "m" => { dimension: "Length", order: 1, symbol: "L" }, - "g" => { dimension: "Mass", order: 2, symbol: "M" }, - "kg" => { dimension: "Mass", order: 2, symbol: "M" }, - "s" => { dimension: "Time", order: 3, symbol: "T" }, - "A" => { dimension: "ElectricCurrent", order: 4, symbol: "I" }, - "K" => { dimension: "ThermodynamicTemperature", order: 5, - symbol: "Theta" }, - "degK" => { dimension: "ThermodynamicTemperature", order: 5, - symbol: "Theta" }, - "mol" => { dimension: "AmountOfSubstance", order: 6, symbol: "N" }, - "cd" => { dimension: "LuminousIntensity", order: 7, symbol: "J" }, - "deg" => { dimension: "PlaneAngle", order: 8, symbol: "phi" }, + 'm' => { dimension: 'Length', order: 1, symbol: 'L' }, + 'g' => { dimension: 'Mass', order: 2, symbol: 'M' }, + 'kg' => { dimension: 'Mass', order: 2, symbol: 'M' }, + 's' => { dimension: 'Time', order: 3, symbol: 'T' }, + 'A' => { dimension: 'ElectricCurrent', order: 4, symbol: 'I' }, + 'K' => { dimension: 'ThermodynamicTemperature', order: 5, + symbol: 'Theta' }, + 'degK' => { dimension: 'ThermodynamicTemperature', order: 5, + symbol: 'Theta' }, + 'mol' => { dimension: 'AmountOfSubstance', order: 6, symbol: 'N' }, + 'cd' => { dimension: 'LuminousIntensity', order: 7, symbol: 'J' }, + 'deg' => { dimension: 'PlaneAngle', order: 8, symbol: 'phi' } }.freeze # Dimesion for dim_(dimesion) input DIM2D = { - "dim_L" => U2D["m"], - "dim_M" => U2D["g"], - "dim_T" => U2D["s"], - "dim_I" => U2D["A"], - "dim_Theta" => U2D["K"], - "dim_N" => U2D["mol"], - "dim_J" => U2D["cd"], - "dim_phi" => U2D["deg"], + 'dim_L' => U2D['m'], + 'dim_M' => U2D['g'], + 'dim_T' => U2D['s'], + 'dim_I' => U2D['A'], + 'dim_Theta' => U2D['K'], + 'dim_N' => U2D['mol'], + 'dim_J' => U2D['cd'], + 'dim_phi' => U2D['deg'] }.freeze DIMS_VECTOR = %w[ ThermodynamicTemperature @@ -44,7 +39,7 @@ module Utility Time ].freeze - UNKNOWN = "unknown" + UNKNOWN = 'unknown' class << self def unit_instance(unit) @@ -65,7 +60,7 @@ def units2dimensions(units) dimension: U2D[unit_name][:dimension], unit: unit_name, exponent: u[:unit].power_numerator || 1, - symbol: U2D[unit_name][:symbol], + symbol: U2D[unit_name][:symbol] } end.sort { |a, b| U2D[a[:unit]][:order] <=> U2D[b[:unit]][:order] } end @@ -74,13 +69,13 @@ def dim_id(dims) return nil if dims.nil? || dims.empty? dim_hash = dims.each_with_object({}) { |h, m| m[h[:dimension]] = h } - dims_vector = DIMS_VECTOR.map { |h| dim_hash.dig(h, :exponent) }.join(":") + dims_vector = DIMS_VECTOR.map { |h| dim_hash.dig(h, :exponent) }.join(':') id = Unitsdb.dimensions.find_by_vector(dims_vector)&.id and return id.to_s - "D_" + dims.map do |d| + 'D_' + dims.map do |d| (U2D.dig(d[:unit], :symbol) || DIM2D.dig(d[:id], :symbol)) + - (to_i_value(d[:exponent]) == 1 ? "" : float_to_display(d[:exponent])) - end.join("") + (to_i_value(d[:exponent]) == 1 ? '' : float_to_display(d[:exponent])) + end.join('') end def to_i_value(object) @@ -95,7 +90,7 @@ def decompose_units_list(units) end def decompose_unit(u) - if u&.unit_name == "g" || Lutaml::Model::Utils.snake_case(u.system_type) == "si_base" + if u&.unit_name == 'g' || Lutaml::Model::Utils.snake_case(u.system_type) == 'si_base' { unit: u, prefix: u&.prefix } elsif u.si_derived_bases.nil? || u.si_derived_bases.empty? { unit: Unit.new(UNKNOWN) } @@ -109,8 +104,7 @@ def decompose_unit(u) unit_name = Unitsdb.units.find_by_id(k.unit_reference.id).symbols.first.id exponent = (k.power&.to_i || 1) * (u.power_numerator&.to_f || 1) object << { prefix: prefix, - unit: Unit.new(unit_name, exponent, prefix: prefix), - } + unit: Unit.new(unit_name, exponent, prefix: prefix) } end end end @@ -123,7 +117,7 @@ def gather_units(units) m[-1][:unit]&.power_numerator = Number.new(numerator_value(k, m)) m[-1] = { prefix: combine_prefixes(prefix_object(m[-1][:prefix]), prefix_object(k[:prefix])), - unit: m[-1][:unit], + unit: m[-1][:unit] } end end @@ -165,15 +159,16 @@ def unit(units, formula, dims, norm_text, name, options) system: unitsystem(units), name: unitname(norm_text, name), symbol: unitsymbols(formula, options), - root_units: rootunits(units), + root_units: rootunits(units) } attributes[:dimension_url] = "##{dim_id(dims)}" if dims Model::Unit.new(attributes).to_xml - .gsub("<", "<") - .gsub(">", ">") - .gsub("&", "&") - .gsub(/−/, "−") - .gsub(/⋅/, "⋅") + .force_encoding('UTF-8') + .gsub('<', '<') + .gsub('>', '>') + .gsub('&', '&') + .gsub(/−/, '−') + .gsub(/⋅/, '⋅') end def unitname(text, name) @@ -185,22 +180,20 @@ def unitsymbols(formula, options) %w[HTML MathMl].map do |lang| Model::Units::Symbol.new( type: lang, - content: formula.public_send(:"to_#{lang.downcase}", options), + content: formula.public_send(:"to_#{lang.downcase}", options) ) end end def unitsystem(units) ret = [] - if units.any? { |u| !u.si_system_type? } - ret << Model::Units::System.new(name: "not_SI", type: "not_SI") - end + ret << Model::Units::System.new(name: 'not_SI', type: 'not_SI') if units.any? { |u| !u.si_system_type? } if units.any?(&:si_system_type?) if units.size == 1 - base = units[0].downcase_system_type == "si_base" - base = true if units[0].unit_name == "g" && units[0]&.prefix_name == "k" + base = units[0].downcase_system_type == 'si_base' + base = true if units[0].unit_name == 'g' && units[0]&.prefix_name == 'k' end - ret << Model::Units::System.new(name: "SI", type: (base ? "SI_base" : "SI_derived")) + ret << Model::Units::System.new(name: 'SI', type: (base ? 'SI_base' : 'SI_derived')) end ret end @@ -211,7 +204,7 @@ def dimension(norm_text) dim_attrs = { id: dim_id } dimid2dimensions(dim_id)&.compact&.each { |u| dimension1(u, dim_attrs) } - Model::Dimension.new(dim_attrs).to_xml + Model::Dimension.new(dim_attrs).to_xml.force_encoding('UTF-8') end def dimension1(dim, dims_hash) @@ -219,14 +212,14 @@ def dimension1(dim, dims_hash) dim_klass = Model::DimensionQuantities.const_get(dim_name) dims_hash[underscore(dim_name).to_sym] = dim_klass.new( symbol: dim[:symbol], - power_numerator: float_to_display(dim[:exponent]), + power_numerator: float_to_display(dim[:exponent]) ) end def float_to_display(float) case float when Integer, Float - float.to_f.round(1).to_s.sub(/\.0$/, "") + float.to_f.round(1).to_s.sub(/\.0$/, '') when Number, Fenced float.float_to_display end @@ -235,14 +228,14 @@ def float_to_display(float) def dimid2dimensions(normtext) dims = Unitsdb.dimensions.find_by_id(normtext) dims&.processed_keys&.map do |processed_key| - humanized = processed_key.split("_").map(&:capitalize).join + humanized = processed_key.split('_').map(&:capitalize).join next unless DIMS_VECTOR.include?(humanized) dim_quantity = dims.public_send(processed_key) { dimension: humanized, symbol: dim_quantity.symbol, - exponent: dim_quantity.power, + exponent: dim_quantity.power } end end @@ -256,10 +249,10 @@ def prefixes(units, options) prefix_attrs[:symbol] = type_and_methods.map do |type, method_name| Model::Prefixes::Symbol.new( type: type, - content: prefix&.public_send(method_name, options), + content: prefix&.public_send(method_name, options) ) end - Model::Prefix.new(prefix_attrs).to_xml.gsub("&", "&") + Model::Prefix.new(prefix_attrs).to_xml.force_encoding('UTF-8').gsub('&', '&') end.join("\n") end @@ -269,7 +262,7 @@ def rootunits(units) enum_root_units = units.map do |unit| attributes = { unit: unit.enumerated_name } attributes[:prefix] = unit.prefix_name if unit.prefix - unit.power_numerator && unit.power_numerator != "1" and + unit.power_numerator && unit.power_numerator != '1' and attributes[:power_numerator] = unit.power_numerator.raw_value Model::Units::EnumeratedRootUnit.new(attributes) end @@ -277,16 +270,16 @@ def rootunits(units) end def unit_id(text) - text = text&.gsub(/[()]/, "") + text = text&.gsub(/[()]/, '') unit = unit_instance(text) - format_unit_id(unit, text)&.insert(0, "U_") + format_unit_id(unit, text)&.insert(0, 'U_') end def format_unit_id(unit, text) - return unit.nist_id&.gsub(/'/, "_") if unit + return unit.nist_id&.gsub(/'/, '_') if unit - text&.gsub(/\*/, ".")&.gsub(/\^/, "") + text&.gsub(/\*/, '.')&.gsub(/\^/, '') end def dimension_components(dims) @@ -294,7 +287,7 @@ def dimension_components(dims) dim_attrs = { id: dim_id(dims) } dims.map { |u| dimension1(u, dim_attrs) } - Model::Dimension.new(dim_attrs).to_xml + Model::Dimension.new(dim_attrs).to_xml.force_encoding('UTF-8') end def quantity(normtext, instance) @@ -302,8 +295,8 @@ def quantity(normtext, instance) return unless unit_or_quantity(unit, instance) model_quantity_xml( - (instance || unit.quantity_references&.first&.id), - "##{unit.dimension_url}", + instance || unit.quantity_references&.first&.id, + "##{unit.dimension_url}" ) end @@ -316,13 +309,13 @@ def model_quantity_xml(id, url) Model::Quantity.new( id: id, name: quantity_name(id), - dimension_url: url, - ).to_xml + dimension_url: url + ).to_xml.force_encoding('UTF-8') end def quantity_name(id) quantity_instance(id)&.names&.filter_map do |name| - next unless name.lang == "en" + next unless name.lang == 'en' Model::Quantities::Name.new(content: name.value) end @@ -330,8 +323,8 @@ def quantity_name(id) def string_to_html_entity(string) HTMLEntities.new.encode( - string.frozen? ? string : string.force_encoding("UTF-8"), - :hexadecimal, + string.frozen? ? string : string.force_encoding('UTF-8'), + :hexadecimal ) end @@ -346,7 +339,7 @@ def underscore(str) def set_to_fence(set) return set if set.is_a?(Fenced) - Fenced.new("(", set, ")") + Fenced.new('(', set, ')') end end end diff --git a/lib/unitsml/version.rb b/lib/unitsml/version.rb index 1efa1c8..754507c 100644 --- a/lib/unitsml/version.rb +++ b/lib/unitsml/version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Unitsml - VERSION = "0.5.1" + VERSION = '0.5.1' end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3a4def9..2159434 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,12 +1,16 @@ -require "bundler/setup" -require "unitsml" -require "rspec/matchers" -require "equivalent-xml/rspec_matchers" -require "byebug" +# frozen_string_literal: true + +require 'bundler/setup' +require_relative '../lib/unitsml' +require 'canon' + +Lutaml::Model::Config.configure do |config| + config.xml_adapter_type = :nokogiri +end RSpec.configure do |config| # Enable flags like --only-failures and --next-failure - config.example_status_persistence_file_path = ".rspec_status" + config.example_status_persistence_file_path = '.rspec_status' # Disable RSpec exposing methods globally on `Module` and `main` config.disable_monkey_patching! diff --git a/spec/unitsml/conv/asciimath_spec.rb b/spec/unitsml/conv/asciimath_spec.rb index 5936016..21295df 100644 --- a/spec/unitsml/conv/asciimath_spec.rb +++ b/spec/unitsml/conv/asciimath_spec.rb @@ -1,398 +1,399 @@ -require "spec_helper" +# frozen_string_literal: true -RSpec.describe Unitsml::Parser do +require 'spec_helper' +RSpec.describe Unitsml::Parser do subject(:formula) do described_class.new(exp).parse.to_asciimath( respond_to?(:options) ? options : {} ) end - context "contains Unitsml #1 example" do - let(:exp) { "unitsml(mm*s^((-2)))" } - let(:expected_value) { "mm*s^(-2)" } + context 'contains Unitsml #1 example' do + let(:exp) { 'unitsml(mm*s^((-2)))' } + let(:expected_value) { 'mm*s^(-2)' } - it "returns parslet tree of parsed Unitsml string" do + 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(um)" } - let(:expected_value) { "um" } + context 'contains Unitsml #2 example' do + let(:exp) { 'unitsml(um)' } + let(:expected_value) { 'um' } - it "returns parslet tree of parsed Unitsml string" do + 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(degK)" } - let(:expected_value) { "degK" } + context 'contains Unitsml #3 example' do + let(:exp) { 'unitsml(degK)' } + let(:expected_value) { 'degK' } - it "returns parslet tree of parsed Unitsml string" do + 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(prime)" } + context 'contains Unitsml #4 example' do + let(:exp) { 'unitsml(prime)' } let(:expected_value) { "'" } - it "returns parslet tree of parsed Unitsml string" do + 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(rad)" } - let(:expected_value) { "rad" } + context 'contains Unitsml #5 example' do + let(:exp) { 'unitsml(rad)' } + let(:expected_value) { 'rad' } - it "returns parslet tree of parsed Unitsml string" do + 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(Hz)" } - let(:expected_value) { "Hz" } + context 'contains Unitsml #6 example' do + let(:exp) { 'unitsml(Hz)' } + let(:expected_value) { 'Hz' } - it "returns parslet tree of parsed Unitsml string" do + 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(kg)" } - let(:expected_value) { "kg" } + context 'contains Unitsml #7 example' do + let(:exp) { 'unitsml(kg)' } + let(:expected_value) { 'kg' } - it "returns parslet tree of parsed Unitsml string" do + 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(m)" } - let(:expected_value) { "m" } + context 'contains Unitsml #8 example' do + let(:exp) { 'unitsml(m)' } + let(:expected_value) { 'm' } - it "returns parslet tree of parsed Unitsml string" do + 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(sqrt(Hz))" } - let(:expected_value) { "Hz^0.5" } + context 'contains Unitsml #9 example' do + let(:exp) { 'unitsml(sqrt(Hz))' } + let(:expected_value) { 'Hz^0.5' } - it "returns parslet tree of parsed Unitsml string" do + 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(g)" } - let(:expected_value) { "g" } + context 'contains Unitsml #10 example' do + let(:exp) { 'unitsml(g)' } + let(:expected_value) { 'g' } - it "returns parslet tree of parsed Unitsml string" do + 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(hp)" } - let(:expected_value) { "hp" } + context 'contains Unitsml #11 example' do + let(:exp) { 'unitsml(hp)' } + let(:expected_value) { 'hp' } - it "returns parslet tree of parsed Unitsml string" do + 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(kg*s^-2)" } - let(:expected_value) { "kg*s^-2" } + context 'contains Unitsml #12 example' do + let(:exp) { 'unitsml(kg*s^-2)' } + let(:expected_value) { 'kg*s^-2' } - it "returns parslet tree of parsed Unitsml string" do + 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(mbar)" } - let(:expected_value) { "mbar" } + context 'contains Unitsml #13 example' do + let(:exp) { 'unitsml(mbar)' } + let(:expected_value) { 'mbar' } - it "returns parslet tree of parsed Unitsml string" do + 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(p-)" } - let(:expected_value) { "p" } + context 'contains Unitsml #14 example' do + let(:exp) { 'unitsml(p-)' } + let(:expected_value) { 'p' } - it "returns parslet tree of parsed Unitsml string" do + 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(h-)" } - let(:expected_value) { "h" } + context 'contains Unitsml #15 example' do + let(:exp) { 'unitsml(h-)' } + let(:expected_value) { 'h' } - it "returns parslet tree of parsed Unitsml string" do + 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(da-)" } - let(:expected_value) { "da" } + context 'contains Unitsml #16 example' do + let(:exp) { 'unitsml(da-)' } + let(:expected_value) { 'da' } - it "returns parslet tree of parsed Unitsml string" do + 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(u-)" } - let(:expected_value) { "u" } + context 'contains Unitsml #17 example' do + let(:exp) { 'unitsml(u-)' } + let(:expected_value) { 'u' } - it "returns parslet tree of parsed Unitsml string" do + 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(A*C^3)" } - let(:expected_value) { "A*C^3" } + context 'contains Unitsml #18 example' do + let(:exp) { 'unitsml(A*C^3)' } + let(:expected_value) { 'A*C^3' } - it "returns parslet tree of parsed Unitsml string" do + 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(A/C^-3)" } - let(:expected_value) { "A/C^3" } + context 'contains Unitsml #19 example' do + let(:exp) { 'unitsml(A/C^-3)' } + let(:expected_value) { 'A/C^3' } - it "returns parslet tree of parsed Unitsml string" do + 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(J/kg*K)" } - let(:expected_value) { "J/kg^-1*K^-1" } + context 'contains Unitsml #20 example' do + let(:exp) { 'unitsml(J/kg*K)' } + let(:expected_value) { 'J/kg^-1*K^-1' } - it "returns parslet tree of parsed Unitsml string" do + 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(kg^-2)" } - let(:expected_value) { "kg^-2" } + context 'contains Unitsml #21 example' do + let(:exp) { 'unitsml(kg^-2)' } + let(:expected_value) { 'kg^-2' } - it "returns parslet tree of parsed Unitsml string" do + 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(kg*s^-2)" } - let(:expected_value) { "kg*s^-2" } + context 'contains Unitsml #22 example' do + let(:exp) { 'unitsml(kg*s^-2)' } + let(:expected_value) { 'kg*s^-2' } - it "returns parslet tree of parsed Unitsml string" do + 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(mW*cm^((-2)))" } - let(:expected_value) { "mW*cm^(-2)" } + context 'contains Unitsml #23 example' do + let(:exp) { 'unitsml(mW*cm^((-2)))' } + let(:expected_value) { 'mW*cm^(-2)' } - it "returns parslet tree of parsed Unitsml string" do + 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(dim_Theta*dim_L^((2)))" } - let(:expected_value) { "Theta*L^(2)" } + context 'contains Unitsml #24 example' do + let(:exp) { 'unitsml(dim_Theta*dim_L^((2)))' } + let(:expected_value) { 'Theta*L^(2)' } - it "returns parslet tree of parsed Unitsml string" do + 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(dim_Theta^10*dim_L^2)" } - let(:expected_value) { "Theta^10*L^2" } + context 'contains Unitsml #25 example' do + let(:exp) { 'unitsml(dim_Theta^10*dim_L^2)' } + let(:expected_value) { 'Theta^10*L^2' } - it "returns parslet tree of parsed Unitsml string" do + 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(Hz^10*darcy^100, multiplier: xx)" } - let(:expected_value) { "Hz^10xxd^100" } + context 'contains Unitsml #26 example' do + let(:exp) { 'unitsml(Hz^10*darcy^100, multiplier: xx)' } + let(:expected_value) { 'Hz^10xxd^100' } - it "returns parslet tree of parsed Unitsml string" do + 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(((Hz^10))*(darcy^100), multiplier: xx)" } - let(:expected_value) { "(Hz^10)xxd^100" } + context 'contains Unitsml #27 example' do + let(:exp) { 'unitsml(((Hz^10))*(darcy^100), multiplier: xx)' } + let(:expected_value) { '(Hz^10)xxd^100' } - it "returns parslet tree of parsed Unitsml string" do + 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(((dim_Theta^10*dim_L^2)))" } - let(:expected_value) { "Theta^10*L^2" } + context 'contains Unitsml #28 example' do + let(:exp) { 'unitsml(((dim_Theta^10*dim_L^2)))' } + let(:expected_value) { 'Theta^10*L^2' } let(:options) { { explicit_parenthesis: false } } - it "returns parslet tree of parsed Unitsml string" do + it 'returns parslet tree of parsed 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) { "J(kg*K)" } + 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 + 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)" } + 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 + 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" } + 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 + 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" } + 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 + 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" } + 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 + 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" } + 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 + 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)" } + 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 + 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)" } + 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 + 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" } + 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 + 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)" } + 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 + 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" } + 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 + 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" } + 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 + 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)" } + 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 + 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)" } + 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 + 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)" } + 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 + it 'matches the UnitsML to AsciiMath converted value' do expect(formula).to eq(expected_value) end end diff --git a/spec/unitsml/conv/html_spec.rb b/spec/unitsml/conv/html_spec.rb index a2c660d..04494fa 100644 --- a/spec/unitsml/conv/html_spec.rb +++ b/spec/unitsml/conv/html_spec.rb @@ -1,425 +1,426 @@ -require "spec_helper" +# frozen_string_literal: true -RSpec.describe Unitsml::Parser do +require 'spec_helper' +RSpec.describe Unitsml::Parser do subject(:formula) do described_class.new(exp).parse.to_html( respond_to?(:options) ? options : {} ) end - context "contains Unitsml #1 example" do - let(:exp) { "unitsml(mm*s^((-2)))" } - let(:expected_value) { "mm⋅s(−2)" } + context 'contains Unitsml #1 example' do + let(:exp) { 'unitsml(mm*s^((-2)))' } + let(:expected_value) { 'mm⋅s(−2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #2 example" do - let(:exp) { "unitsml(um)" } - let(:expected_value) { "µm" } + context 'contains Unitsml #2 example' do + let(:exp) { 'unitsml(um)' } + let(:expected_value) { 'µm' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #3 example" do - let(:exp) { "unitsml(degK)" } - let(:expected_value) { "°K" } + context 'contains Unitsml #3 example' do + let(:exp) { 'unitsml(degK)' } + let(:expected_value) { '°K' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #4 example" do - let(:exp) { "unitsml(prime)" } - let(:expected_value) { "′" } + context 'contains Unitsml #4 example' do + let(:exp) { 'unitsml(prime)' } + let(:expected_value) { '′' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #5 example" do - let(:exp) { "unitsml(rad)" } - let(:expected_value) { "rad" } + context 'contains Unitsml #5 example' do + let(:exp) { 'unitsml(rad)' } + let(:expected_value) { 'rad' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #6 example" do - let(:exp) { "unitsml(Hz)" } - let(:expected_value) { "Hz" } + context 'contains Unitsml #6 example' do + let(:exp) { 'unitsml(Hz)' } + let(:expected_value) { 'Hz' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #7 example" do - let(:exp) { "unitsml(kg)" } - let(:expected_value) { "kg" } + context 'contains Unitsml #7 example' do + let(:exp) { 'unitsml(kg)' } + let(:expected_value) { 'kg' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #8 example" do - let(:exp) { "unitsml(m)" } - let(:expected_value) { "m" } + context 'contains Unitsml #8 example' do + let(:exp) { 'unitsml(m)' } + let(:expected_value) { 'm' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #9 example" do - let(:exp) { "unitsml(sqrt(Hz))" } - let(:expected_value) { "Hz0.5" } + context 'contains Unitsml #9 example' do + let(:exp) { 'unitsml(sqrt(Hz))' } + let(:expected_value) { 'Hz0.5' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #10 example" do - let(:exp) { "unitsml(g)" } - let(:expected_value) { "g" } + context 'contains Unitsml #10 example' do + let(:exp) { 'unitsml(g)' } + let(:expected_value) { 'g' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #11 example" do - let(:exp) { "unitsml(hp)" } - let(:expected_value) { "hp" } + context 'contains Unitsml #11 example' do + let(:exp) { 'unitsml(hp)' } + let(:expected_value) { 'hp' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #12 example" do - let(:exp) { "unitsml(kg*s^(((-2))))" } - let(:expected_value) { "kg⋅s(−2)" } + context 'contains Unitsml #12 example' do + let(:exp) { 'unitsml(kg*s^(((-2))))' } + let(:expected_value) { 'kg⋅s(−2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #13 example" do - let(:exp) { "unitsml(mbar)" } - let(:expected_value) { "mbar" } + context 'contains Unitsml #13 example' do + let(:exp) { 'unitsml(mbar)' } + let(:expected_value) { 'mbar' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #14 example" do - let(:exp) { "unitsml(p-)" } - let(:expected_value) { "p" } + context 'contains Unitsml #14 example' do + let(:exp) { 'unitsml(p-)' } + let(:expected_value) { 'p' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #15 example" do - let(:exp) { "unitsml(h-)" } - let(:expected_value) { "h" } + context 'contains Unitsml #15 example' do + let(:exp) { 'unitsml(h-)' } + let(:expected_value) { 'h' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #16 example" do - let(:exp) { "unitsml(da-)" } - let(:expected_value) { "da" } + context 'contains Unitsml #16 example' do + let(:exp) { 'unitsml(da-)' } + let(:expected_value) { 'da' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #17 example" do - let(:exp) { "unitsml(u-)" } - let(:expected_value) { "µ" } + context 'contains Unitsml #17 example' do + let(:exp) { 'unitsml(u-)' } + let(:expected_value) { 'µ' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #18 example" do - let(:exp) { "unitsml(A*C^3)" } - let(:expected_value) { "A⋅C3" } + context 'contains Unitsml #18 example' do + let(:exp) { 'unitsml(A*C^3)' } + let(:expected_value) { 'A⋅C3' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #19 example" do - let(:exp) { "unitsml(A/C^-3)" } - let(:expected_value) { "A⋅C3" } + context 'contains Unitsml #19 example' do + let(:exp) { 'unitsml(A/C^-3)' } + let(:expected_value) { 'A⋅C3' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #20 example" do - let(:exp) { "unitsml(J/kg*K)" } - let(:expected_value) { "J⋅kg−1⋅K−1" } + context 'contains Unitsml #20 example' do + let(:exp) { 'unitsml(J/kg*K)' } + let(:expected_value) { 'J⋅kg−1⋅K−1' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #21 example" do - let(:exp) { "unitsml(kg^-2)" } - let(:expected_value) { "kg−2" } + context 'contains Unitsml #21 example' do + let(:exp) { 'unitsml(kg^-2)' } + let(:expected_value) { 'kg−2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #22 example" do - let(:exp) { "unitsml(kg*s^-2)" } - let(:expected_value) { "kg⋅s−2" } + context 'contains Unitsml #22 example' do + let(:exp) { 'unitsml(kg*s^-2)' } + let(:expected_value) { 'kg⋅s−2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #23 example" do - let(:exp) { "unitsml(mW*cm^(-2))" } - let(:expected_value) { "mW⋅cm−2" } + context 'contains Unitsml #23 example' do + let(:exp) { 'unitsml(mW*cm^(-2))' } + let(:expected_value) { 'mW⋅cm−2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #24 example" do - let(:exp) { "unitsml(dim_Theta*dim_L^((((2)))))" } - let(:expected_value) { "𝝠⋅𝖫((2))" } + context 'contains Unitsml #24 example' do + let(:exp) { 'unitsml(dim_Theta*dim_L^((((2)))))' } + let(:expected_value) { '𝝠⋅𝖫((2))' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #25 example" do - let(:exp) { "unitsml(dim_Theta^10*dim_L^2)" } - let(:expected_value) { "𝝠10⋅𝖫2" } + context 'contains Unitsml #25 example' do + let(:exp) { 'unitsml(dim_Theta^10*dim_L^2)' } + let(:expected_value) { '𝝠10⋅𝖫2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #26 example" do - let(:exp) { "unitsml(Hz^10*darcy^100)" } - let(:expected_value) { "Hz10⋅d100" } + context 'contains Unitsml #26 example' do + let(:exp) { 'unitsml(Hz^10*darcy^100)' } + let(:expected_value) { 'Hz10⋅d100' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #27 example" do - let(:exp) { "unitsml(kcal_IT)" } - let(:expected_value) { "kcalIT" } + context 'contains Unitsml #27 example' do + let(:exp) { 'unitsml(kcal_IT)' } + let(:expected_value) { 'kcalIT' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #28 example" do - let(:exp) { "unitsml(kcal_IT^100)" } - let(:expected_value) { "kcalIT100" } + context 'contains Unitsml #28 example' do + let(:exp) { 'unitsml(kcal_IT^100)' } + let(:expected_value) { 'kcalIT100' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #29 example" do - let(:exp) { "unitsml(dim_Theta^10*((dim_L^2)))" } - let(:expected_value) { "𝝠10⋅(𝖫2)" } + context 'contains Unitsml #29 example' do + let(:exp) { 'unitsml(dim_Theta^10*((dim_L^2)))' } + let(:expected_value) { '𝝠10⋅(𝖫2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #30 example" do - let(:exp) { "unitsml(Hz^10*((darcy^100)))" } - let(:expected_value) { "Hz10⋅(d100)" } + context 'contains Unitsml #30 example' do + let(:exp) { 'unitsml(Hz^10*((darcy^100)))' } + let(:expected_value) { 'Hz10⋅(d100)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #31 example with explicit_parenthesis: false" do - let(:exp) { "unitsml(dim_Theta^10*((dim_L^2)))" } # Input with explicit parens - let(:expected_value) { "𝝠10⋅𝖫2" } + context 'contains Unitsml #31 example with explicit_parenthesis: false' do + let(:exp) { 'unitsml(dim_Theta^10*((dim_L^2)))' } # Input with explicit parens + let(:expected_value) { '𝝠10⋅𝖫2' } let(:options) { { explicit_parenthesis: false } } - it "returns parslet tree of parsed Unitsml string without explicit parentheses" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string without explicit parentheses' do + expect(formula).to be_xml_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)" } + 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 + 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" } + 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 + 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" } + 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 + 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" } + 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 + 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" } + 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 + 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" } + 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 + 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)" } + 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 + 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)" } + 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 + 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" } + 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 + 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) { "𝝠(𝞅)" } + 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 + 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) { "(𝝠)𝖫" } + 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 + 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) { "𝝠⋅𝖫" } + 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 + 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) { "𝞅(𝝠⋅𝖫)" } + 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 + 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) { "(𝞅(𝖨))((𝝠)𝖫)" } + 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 + 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) { "𝞅(𝖨)((𝝠)𝖫)" } + 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 + it 'matches the UnitsML to HTML converted value' do expect(formula).to eq(expected_value) end end diff --git a/spec/unitsml/conv/latex_spec.rb b/spec/unitsml/conv/latex_spec.rb index 6783b88..0c22774 100644 --- a/spec/unitsml/conv/latex_spec.rb +++ b/spec/unitsml/conv/latex_spec.rb @@ -1,425 +1,434 @@ -require "spec_helper" +# frozen_string_literal: true -RSpec.describe Unitsml::Parser do +require 'spec_helper' +RSpec.describe Unitsml::Parser do subject(:formula) do described_class.new(exp).parse.to_latex( respond_to?(:options) ? options : {} ) end - context "contains Unitsml #1 example" do - let(:exp) { "unitsml(mm*s^((-2)))" } - let(:expected_value) { "m\\ensuremath{\\mathrm{m}}/\\ensuremath{\\mathrm{s}}^(-2)" } + context 'contains Unitsml #1 example' do + let(:exp) { 'unitsml(mm*s^((-2)))' } + let(:expected_value) { 'm\\ensuremath{\\mathrm{m}}/\\ensuremath{\\mathrm{s}}^(-2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #2 example" do - let(:exp) { "unitsml(um)" } - let(:expected_value) { "$mu$\\ensuremath{\\mathrm{m}}" } + context 'contains Unitsml #2 example' do + let(:exp) { 'unitsml(um)' } + let(:expected_value) { '$mu$\\ensuremath{\\mathrm{m}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #3 example" do - let(:exp) { "unitsml(degK)" } - let(:expected_value) { "\\ensuremath{\\mathrm{^{\\circ}K}}" } + context 'contains Unitsml #3 example' do + let(:exp) { 'unitsml(degK)' } + let(:expected_value) { '\\ensuremath{\\mathrm{^{\\circ}K}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #4 example" do - let(:exp) { "unitsml(prime)" } + context 'contains Unitsml #4 example' do + let(:exp) { 'unitsml(prime)' } let(:expected_value) { "\\ensuremath{\\mathrm{'}}" } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #5 example" do - let(:exp) { "unitsml(rad)" } - let(:expected_value) { "\\ensuremath{\\mathrm{rad}}" } + context 'contains Unitsml #5 example' do + let(:exp) { 'unitsml(rad)' } + let(:expected_value) { '\\ensuremath{\\mathrm{rad}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #6 example" do - let(:exp) { "unitsml(Hz)" } - let(:expected_value) { "\\ensuremath{\\mathrm{Hz}}" } + context 'contains Unitsml #6 example' do + let(:exp) { 'unitsml(Hz)' } + let(:expected_value) { '\\ensuremath{\\mathrm{Hz}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #7 example" do - let(:exp) { "unitsml(kg)" } - let(:expected_value) { "k\\ensuremath{\\mathrm{g}}" } + context 'contains Unitsml #7 example' do + let(:exp) { 'unitsml(kg)' } + let(:expected_value) { 'k\\ensuremath{\\mathrm{g}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #8 example" do - let(:exp) { "unitsml(m)" } - let(:expected_value) { "\\ensuremath{\\mathrm{m}}" } + context 'contains Unitsml #8 example' do + let(:exp) { 'unitsml(m)' } + let(:expected_value) { '\\ensuremath{\\mathrm{m}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #9 example" do - let(:exp) { "unitsml(sqrt(Hz))" } - let(:expected_value) { "\\ensuremath{\\mathrm{Hz}}^0.5" } + context 'contains Unitsml #9 example' do + let(:exp) { 'unitsml(sqrt(Hz))' } + let(:expected_value) { '\\ensuremath{\\mathrm{Hz}}^0.5' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #10 example" do - let(:exp) { "unitsml(g)" } - let(:expected_value) { "\\ensuremath{\\mathrm{g}}" } + context 'contains Unitsml #10 example' do + let(:exp) { 'unitsml(g)' } + let(:expected_value) { '\\ensuremath{\\mathrm{g}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #11 example" do - let(:exp) { "unitsml(hp)" } - let(:expected_value) { "\\ensuremath{\\mathrm{hp}}" } + context 'contains Unitsml #11 example' do + let(:exp) { 'unitsml(hp)' } + let(:expected_value) { '\\ensuremath{\\mathrm{hp}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #12 example" do - let(:exp) { "unitsml(kg*s^((-2)))" } - let(:expected_value) { "k\\ensuremath{\\mathrm{g}}/\\ensuremath{\\mathrm{s}}^(-2)" } + context 'contains Unitsml #12 example' do + let(:exp) { 'unitsml(kg*s^((-2)))' } + let(:expected_value) { 'k\\ensuremath{\\mathrm{g}}/\\ensuremath{\\mathrm{s}}^(-2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #13 example" do - let(:exp) { "unitsml(mbar)" } - let(:expected_value) { "m\\ensuremath{\\mathrm{bar}}" } + context 'contains Unitsml #13 example' do + let(:exp) { 'unitsml(mbar)' } + let(:expected_value) { 'm\\ensuremath{\\mathrm{bar}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #14 example" do - let(:exp) { "unitsml(p-)" } - let(:expected_value) { "p" } + context 'contains Unitsml #14 example' do + let(:exp) { 'unitsml(p-)' } + let(:expected_value) { 'p' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #15 example" do - let(:exp) { "unitsml(h-)" } - let(:expected_value) { "h" } + context 'contains Unitsml #15 example' do + let(:exp) { 'unitsml(h-)' } + let(:expected_value) { 'h' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #16 example" do - let(:exp) { "unitsml(da-)" } - let(:expected_value) { "da" } + context 'contains Unitsml #16 example' do + let(:exp) { 'unitsml(da-)' } + let(:expected_value) { 'da' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #17 example" do - let(:exp) { "unitsml(u-)" } - let(:expected_value) { "$mu$" } + context 'contains Unitsml #17 example' do + let(:exp) { 'unitsml(u-)' } + let(:expected_value) { '$mu$' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #18 example" do - let(:exp) { "unitsml(A*C^3)" } - let(:expected_value) { "\\ensuremath{\\mathrm{A}}/\\ensuremath{\\mathrm{C}}^3" } + context 'contains Unitsml #18 example' do + let(:exp) { 'unitsml(A*C^3)' } + let(:expected_value) { '\\ensuremath{\\mathrm{A}}/\\ensuremath{\\mathrm{C}}^3' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #19 example" do - let(:exp) { "unitsml(A/C^-3)" } - let(:expected_value) { "\\ensuremath{\\mathrm{A}}/\\ensuremath{\\mathrm{C}}^3" } + context 'contains Unitsml #19 example' do + let(:exp) { 'unitsml(A/C^-3)' } + let(:expected_value) { '\\ensuremath{\\mathrm{A}}/\\ensuremath{\\mathrm{C}}^3' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #20 example" do - let(:exp) { "unitsml(J/kg*K)" } - let(:expected_value) { "\\ensuremath{\\mathrm{J}}/k\\ensuremath{\\mathrm{g}}^-1/\\ensuremath{\\mathrm{K}}^-1" } + context 'contains Unitsml #20 example' do + let(:exp) { 'unitsml(J/kg*K)' } + let(:expected_value) { '\\ensuremath{\\mathrm{J}}/k\\ensuremath{\\mathrm{g}}^-1/\\ensuremath{\\mathrm{K}}^-1' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #21 example" do - let(:exp) { "unitsml(kg^-2)" } - let(:expected_value) { "k\\ensuremath{\\mathrm{g}}^-2" } + context 'contains Unitsml #21 example' do + let(:exp) { 'unitsml(kg^-2)' } + let(:expected_value) { 'k\\ensuremath{\\mathrm{g}}^-2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #22 example" do - let(:exp) { "unitsml(kg*s^-2)" } - let(:expected_value) { "k\\ensuremath{\\mathrm{g}}/\\ensuremath{\\mathrm{s}}^-2" } + context 'contains Unitsml #22 example' do + let(:exp) { 'unitsml(kg*s^-2)' } + let(:expected_value) { 'k\\ensuremath{\\mathrm{g}}/\\ensuremath{\\mathrm{s}}^-2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #23 example" do - let(:exp) { "unitsml(mW*cm^(-2))" } - let(:expected_value) { "m\\ensuremath{\\mathrm{W}}/c\\ensuremath{\\mathrm{m}}^-2" } + context 'contains Unitsml #23 example' do + let(:exp) { 'unitsml(mW*cm^(-2))' } + let(:expected_value) { 'm\\ensuremath{\\mathrm{W}}/c\\ensuremath{\\mathrm{m}}^-2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #24 example" do - let(:exp) { "unitsml(dim_Theta*dim_L^((2)))" } - let(:expected_value) { "\\ensuremath{\\mathsf{\\Theta}}/\\ensuremath{\\mathsf{L}}^(2)" } + context 'contains Unitsml #24 example' do + let(:exp) { 'unitsml(dim_Theta*dim_L^((2)))' } + let(:expected_value) { '\\ensuremath{\\mathsf{\\Theta}}/\\ensuremath{\\mathsf{L}}^(2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #25 example" do - let(:exp) { "unitsml(dim_Theta^10*dim_L^((((2)))))" } - let(:expected_value) { "\\ensuremath{\\mathsf{\\Theta}}^10/\\ensuremath{\\mathsf{L}}^((2))" } + context 'contains Unitsml #25 example' do + let(:exp) { 'unitsml(dim_Theta^10*dim_L^((((2)))))' } + let(:expected_value) { '\\ensuremath{\\mathsf{\\Theta}}^10/\\ensuremath{\\mathsf{L}}^((2))' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #26 example" do - let(:exp) { "unitsml(Hz^10*darcy^100)" } - let(:expected_value) { "\\ensuremath{\\mathrm{Hz}}^10/\\ensuremath{\\mathrm{d}}^100" } + context 'contains Unitsml #26 example' do + let(:exp) { 'unitsml(Hz^10*darcy^100)' } + let(:expected_value) { '\\ensuremath{\\mathrm{Hz}}^10/\\ensuremath{\\mathrm{d}}^100' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #27 example" do - let(:exp) { "unitsml(kcal_IT)" } - let(:expected_value) { "k\\ensuremath{\\mathrm{cal_{IT}}}" } + context 'contains Unitsml #27 example' do + let(:exp) { 'unitsml(kcal_IT)' } + let(:expected_value) { 'k\\ensuremath{\\mathrm{cal_{IT}}}' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #28 example" do - let(:exp) { "unitsml(kcal_IT^100)" } - let(:expected_value) { "k\\ensuremath{\\mathrm{cal_{IT}}}^100" } + context 'contains Unitsml #28 example' do + let(:exp) { 'unitsml(kcal_IT^100)' } + let(:expected_value) { 'k\\ensuremath{\\mathrm{cal_{IT}}}^100' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #29 example" do - let(:exp) { "unitsml((((dim_Theta^10*(((dim_L^2)))))))" } - let(:expected_value) { "(\\ensuremath{\\mathsf{\\Theta}}^10/(\\ensuremath{\\mathsf{L}}^2))" } + context 'contains Unitsml #29 example' do + let(:exp) { 'unitsml((((dim_Theta^10*(((dim_L^2)))))))' } + let(:expected_value) { '(\\ensuremath{\\mathsf{\\Theta}}^10/(\\ensuremath{\\mathsf{L}}^2))' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #30 example" do - let(:exp) { "unitsml(((((Hz^10)*darcy^100))))" } - let(:expected_value) { "((\\ensuremath{\\mathrm{Hz}}^10)/\\ensuremath{\\mathrm{d}}^100)" } + context 'contains Unitsml #30 example' do + let(:exp) { 'unitsml(((((Hz^10)*darcy^100))))' } + let(:expected_value) { '((\\ensuremath{\\mathrm{Hz}}^10)/\\ensuremath{\\mathrm{d}}^100)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #30 example for explicit_parenthesis: false" do - let(:exp) { "unitsml(((Hz^10)*darcy^100))" } - let(:expected_value) { "\\ensuremath{\\mathrm{Hz}}^10/\\ensuremath{\\mathrm{d}}^100" } + context 'contains Unitsml #30 example for explicit_parenthesis: false' do + let(:exp) { 'unitsml(((Hz^10)*darcy^100))' } + let(:expected_value) { '\\ensuremath{\\mathrm{Hz}}^10/\\ensuremath{\\mathrm{d}}^100' } let(:options) { { explicit_parenthesis: false } } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_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}})" } + 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 + 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)" } + 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 + 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" } + 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 + 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" } + 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 + 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}}" } + 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 + 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}}" } + 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 + 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}})" } + 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 + 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}})" } + context 'implicit extender example #8' do + let(:exp) { 'unitsml((mol * K)(J*K))' } + let(:expected_value) do + '(\\ensuremath{\\mathrm{mol}}/\\ensuremath{\\mathrm{K}})(\\ensuremath{\\mathrm{J}}/\\ensuremath{\\mathrm{K}})' + end - it "matches the UnitsML to LaTeX converted value" do + 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}}" } + 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 + 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}})" } + 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 + 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}}" } + 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 + 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}}" } + 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 + 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}})" } + context 'implicit extender example #13' do + let(:exp) { 'unitsml(dim_phi (dim_Theta dim_L))' } + let(:expected_value) do + '\\ensuremath{\\mathsf{\\phi}}(\\ensuremath{\\mathsf{\\Theta}}/\\ensuremath{\\mathsf{L}})' + end - it "matches the UnitsML to LaTeX converted value" do + 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}})" } + context 'implicit extender example #14' do + let(:exp) { 'unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))' } + let(:expected_value) do + '(\\ensuremath{\\mathsf{\\phi}}(\\ensuremath{\\mathsf{I}}))((\\ensuremath{\\mathsf{\\Theta}})\\ensuremath{\\mathsf{L}})' + end - it "matches the UnitsML to LaTeX converted value" do + 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}})" } + context 'implicit extender example #15' do + let(:exp) { 'unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))' } + let(:expected_value) do + '\\ensuremath{\\mathsf{\\phi}}(\\ensuremath{\\mathsf{I}})((\\ensuremath{\\mathsf{\\Theta}})\\ensuremath{\\mathsf{L}})' + end - it "matches the UnitsML to LaTeX converted value" do + it 'matches the UnitsML to LaTeX converted value' do expect(formula).to eq(expected_value) end end diff --git a/spec/unitsml/conv/mathml_spec.rb b/spec/unitsml/conv/mathml_spec.rb index 83787a0..49190c0 100644 --- a/spec/unitsml/conv/mathml_spec.rb +++ b/spec/unitsml/conv/mathml_spec.rb @@ -1,14 +1,15 @@ -require "spec_helper" +# frozen_string_literal: true -RSpec.describe Unitsml::Parser do +require 'spec_helper' +RSpec.describe Unitsml::Parser do before(:all) { Lutaml::Model::Config.xml_adapter_type = :ox } subject(:formula) { described_class.new(exp).parse } subject(:mathml) { formula.to_mathml } - context "contains Unitsml #1 example" do - let(:exp) { "unitsml(mm*s^((-2)))" } + context 'contains Unitsml #1 example' do + let(:exp) { 'unitsml(mm*s^((-2)))' } let(:expected_value) do <<~MATHML @@ -29,13 +30,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #2 example" do - let(:exp) { "unitsml(um)" } + context 'contains Unitsml #2 example' do + let(:exp) { 'unitsml(um)' } let(:expected_value) do <<~MATHML @@ -44,13 +45,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #3 example" do - let(:exp) { "unitsml(degK)" } + context 'contains Unitsml #3 example' do + let(:exp) { 'unitsml(degK)' } let(:expected_value) do <<~MATHML @@ -59,13 +60,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #4 example" do - let(:exp) { "unitsml(prime)" } + context 'contains Unitsml #4 example' do + let(:exp) { 'unitsml(prime)' } let(:expected_value) do <<~MATHML @@ -74,13 +75,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #5 example" do - let(:exp) { "unitsml(rad)" } + context 'contains Unitsml #5 example' do + let(:exp) { 'unitsml(rad)' } let(:expected_value) do <<~MATHML @@ -89,13 +90,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #6 example" do - let(:exp) { "unitsml(Hz)" } + context 'contains Unitsml #6 example' do + let(:exp) { 'unitsml(Hz)' } let(:expected_value) do <<~MATHML @@ -104,13 +105,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #7 example" do - let(:exp) { "unitsml(kg)" } + context 'contains Unitsml #7 example' do + let(:exp) { 'unitsml(kg)' } let(:expected_value) do <<~MATHML @@ -119,13 +120,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #8 example" do - let(:exp) { "unitsml(m)" } + context 'contains Unitsml #8 example' do + let(:exp) { 'unitsml(m)' } let(:expected_value) do <<~MATHML @@ -134,13 +135,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #9 example" do - let(:exp) { "unitsml(sqrt(Hz))" } + context 'contains Unitsml #9 example' do + let(:exp) { 'unitsml(sqrt(Hz))' } let(:expected_value) do <<~MATHML @@ -152,13 +153,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #10 example" do - let(:exp) { "unitsml(g)" } + context 'contains Unitsml #10 example' do + let(:exp) { 'unitsml(g)' } let(:expected_value) do <<~MATHML @@ -167,13 +168,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #11 example" do - let(:exp) { "unitsml(hp)" } + context 'contains Unitsml #11 example' do + let(:exp) { 'unitsml(hp)' } let(:expected_value) do <<~MATHML @@ -182,13 +183,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #12 example" do - let(:exp) { "unitsml(kg*s^(-2))" } + context 'contains Unitsml #12 example' do + let(:exp) { 'unitsml(kg*s^(-2))' } let(:expected_value) do <<~MATHML @@ -205,13 +206,14 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #13 example" do - let(:exp) { "unitsml(mbar)" } + context 'contains Unitsml #13 example' do + let(:exp) { 'unitsml(mbar)' } let(:expected_value) do <<~MATHML @@ -220,13 +222,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #14 example" do - let(:exp) { "unitsml(p-)" } + context 'contains Unitsml #14 example' do + let(:exp) { 'unitsml(p-)' } let(:expected_value) do <<~MATHML @@ -235,13 +237,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #15 example" do - let(:exp) { "unitsml(h-)" } + context 'contains Unitsml #15 example' do + let(:exp) { 'unitsml(h-)' } let(:expected_value) do <<~MATHML @@ -250,13 +252,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #16 example" do - let(:exp) { "unitsml(da-)" } + context 'contains Unitsml #16 example' do + let(:exp) { 'unitsml(da-)' } let(:expected_value) do <<~MATHML @@ -265,13 +267,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #17 example" do - let(:exp) { "unitsml(u-)" } + context 'contains Unitsml #17 example' do + let(:exp) { 'unitsml(u-)' } let(:expected_value) do <<~MATHML @@ -280,13 +282,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #18 example" do - let(:exp) { "unitsml(A*C^3)" } + context 'contains Unitsml #18 example' do + let(:exp) { 'unitsml(A*C^3)' } let(:expected_value) do <<~MATHML @@ -300,13 +302,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #19 example" do - let(:exp) { "unitsml(A/C^-3)" } + context 'contains Unitsml #19 example' do + let(:exp) { 'unitsml(A/C^-3)' } let(:expected_value) do <<~MATHML @@ -320,13 +322,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #20 example" do - let(:exp) { "unitsml(J/kg*K)" } + context 'contains Unitsml #20 example' do + let(:exp) { 'unitsml(J/kg*K)' } let(:expected_value) do <<~MATHML @@ -351,13 +353,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #21 example" do - let(:exp) { "unitsml(kg^-2)" } + context 'contains Unitsml #21 example' do + let(:exp) { 'unitsml(kg^-2)' } let(:expected_value) do <<~MATHML @@ -372,13 +374,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #22 example" do - let(:exp) { "unitsml(kg*s^-2)" } + context 'contains Unitsml #22 example' do + let(:exp) { 'unitsml(kg*s^-2)' } let(:expected_value) do <<~MATHML @@ -395,13 +397,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #23 example" do - let(:exp) { "unitsml(mW*cm^(-2))" } + context 'contains Unitsml #23 example' do + let(:exp) { 'unitsml(mW*cm^(-2))' } let(:expected_value) do <<~MATHML @@ -418,13 +420,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #24 example" do - let(:exp) { "unitsml(dim_Theta*dim_L^((((2)))))" } + context 'contains Unitsml #24 example' do + let(:exp) { 'unitsml(dim_Theta*dim_L^((((2)))))' } let(:expected_value) do <<~MATHML @@ -448,13 +450,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #25 example" do - let(:exp) { "unitsml(dim_Theta^10*dim_L^(2))" } + context 'contains Unitsml #25 example' do + let(:exp) { 'unitsml(dim_Theta^10*dim_L^(2))' } let(:expected_value) do <<~MATHML @@ -476,13 +478,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #26 example" do - let(:exp) { "unitsml(Hz^10*darcy^100)" } + context 'contains Unitsml #26 example' do + let(:exp) { 'unitsml(Hz^10*darcy^100)' } let(:expected_value) do <<~MATHML @@ -499,13 +501,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #27 example" do - let(:exp) { "unitsml(R-)" } + context 'contains Unitsml #27 example' do + let(:exp) { 'unitsml(R-)' } let(:expected_value) do <<~MATHML @@ -514,13 +516,13 @@ MATHML end - it "returns parslet tree of parsed Unitsml string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #28 example" do - let(:exp) { "unitsml(Rm*A)" } + context 'contains Unitsml #28 example' do + let(:exp) { 'unitsml(Rm*A)' } let(:expected_value) do <<~MATHML @@ -552,21 +554,21 @@ MATHML end - it "matches Unitsml to MathML converted string with custom multiplier argument" do - expect(formula.to_mathml(multiplier: "X")).to be_equivalent_to(expected_value) + it 'matches Unitsml to MathML converted string with custom multiplier argument' do + expect(formula.to_mathml(multiplier: 'X')).to be_xml_equivalent_to(expected_value) end - it "matches Unitsml to MathML converted string with :space multiplier argument" do - expect(formula.to_mathml(multiplier: :space)).to be_equivalent_to(space_expected_value) + it 'matches Unitsml to MathML converted string with :space multiplier argument' do + expect(formula.to_mathml(multiplier: :space)).to be_xml_equivalent_to(space_expected_value) end - it "matches Unitsml to MathML converted string with :nospace multiplier argument" do - expect(formula.to_mathml(multiplier: :nospace)).to be_equivalent_to(nospace_expected_value) + it 'matches Unitsml to MathML converted string with :nospace multiplier argument' do + expect(formula.to_mathml(multiplier: :nospace)).to be_xml_equivalent_to(nospace_expected_value) end end - context "contains plurimath/plurimath#356 Unitsml #28 example" do - let(:exp) { "unitsml(kg*m^-1*s^-1*K^(((-1//2))))" } + context 'contains plurimath/plurimath#356 Unitsml #28 example' do + let(:exp) { 'unitsml(kg*m^-1*s^-1*K^(((-1//2))))' } let(:expected_value) do <<~MATHML @@ -603,13 +605,13 @@ MATHML end - it "matches MathML string" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches MathML string' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #29 example" do - let(:exp) { "unitsml(Rm*((A)))" } + context 'contains Unitsml #29 example' do + let(:exp) { 'unitsml(Rm*((A)))' } let(:expected_value) do <<~MATHML @@ -625,13 +627,13 @@ MATHML end - it "matches Unitsml to MathML converted string with custom multiplier argument" do - expect(formula.to_mathml(multiplier: "X")).to be_equivalent_to(expected_value) + it 'matches Unitsml to MathML converted string with custom multiplier argument' do + expect(formula.to_mathml(multiplier: 'X')).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #29 example" do - let(:exp) { "unitsml(Rm*((A)))" } + context 'contains Unitsml #29 example' do + let(:exp) { 'unitsml(Rm*((A)))' } let(:expected_value) do <<~MATHML @@ -643,14 +645,14 @@ MATHML end - it "matches Unitsml to MathML converted string with custom multiplier argument" do - expect(formula.to_mathml(multiplier: "X", explicit_parenthesis: false)).to be_equivalent_to(expected_value) + it 'matches Unitsml to MathML converted string with custom multiplier argument' do + expect(formula.to_mathml(multiplier: 'X', explicit_parenthesis: false)).to be_xml_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))" } + describe 'implicit extender' do + context 'implicit extender example #1 from issue#53' do + let(:exp) { 'unitsml(J(kg*K))' } let(:expected_value) do <<~MATHML @@ -658,21 +660,21 @@ ( kg - ) - K + K + ) MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #2 from issue#53" do - let(:exp) { "unitsml(J kg^-1 * K^((-1)))" } + context 'implicit extender example #2 from issue#53' do + let(:exp) { 'unitsml(J kg^-1 * K^((-1)))' } let(:expected_value) do <<~MATHML @@ -701,13 +703,13 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #3 from issue#53" do - let(:exp) { "unitsml(J/mol * K)" } + context 'implicit extender example #3 from issue#53' do + let(:exp) { 'unitsml(J/mol * K)' } let(:expected_value) do <<~MATHML @@ -732,13 +734,13 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #4 from issue#53" do - let(:exp) { "unitsml(J/(mol * K))" } + context 'implicit extender example #4 from issue#53' do + let(:exp) { 'unitsml(J/(mol * K))' } let(:expected_value) do <<~MATHML @@ -763,66 +765,66 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #5" do - let(:exp) { "unitsml((mol * K)J)" } + context 'implicit extender example #5' do + let(:exp) { 'unitsml((mol * K)J)' } let(:expected_value) do <<~MATHML ( mol - ) - K + K + ) J MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #6" do - let(:exp) { "unitsml((mol * K) J)" } + context 'implicit extender example #6' do + let(:exp) { 'unitsml((mol * K) J)' } let(:expected_value) do <<~MATHML ( mol - ) - K + K + ) J MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #7" do - let(:exp) { "unitsml((mol * K)(J))" } + context 'implicit extender example #7' do + let(:exp) { 'unitsml((mol * K)(J))' } let(:expected_value) do <<~MATHML ( mol - ) - K + K + ) ( @@ -833,41 +835,41 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #8" do - let(:exp) { "unitsml((mol * K)(J*K))" } + context 'implicit extender example #8' do + let(:exp) { 'unitsml((mol * K)(J*K))' } let(:expected_value) do <<~MATHML ( mol - ) - K + K + ) ( J - ) - K + K + ) MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #9" do - let(:exp) { "unitsml(E_erlang(mm)*kg)" } + context 'implicit extender example #9' do + let(:exp) { 'unitsml(E_erlang(mm)*kg)' } let(:expected_value) do <<~MATHML @@ -883,13 +885,13 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #10" do - let(:exp) { "unitsml(dim_Theta(dim_phi))" } + context 'implicit extender example #10' do + let(:exp) { 'unitsml(dim_Theta(dim_phi))' } let(:expected_value) do <<~MATHML @@ -903,13 +905,13 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #11" do - let(:exp) { "unitsml((dim_Theta)dim_L)" } + context 'implicit extender example #11' do + let(:exp) { 'unitsml((dim_Theta)dim_L)' } let(:expected_value) do <<~MATHML @@ -923,13 +925,13 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #12" do - let(:exp) { "unitsml(dim_Theta dim_L)" } + context 'implicit extender example #12' do + let(:exp) { 'unitsml(dim_Theta dim_L)' } let(:expected_value) do <<~MATHML @@ -940,13 +942,13 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #13" do - let(:exp) { "unitsml(dim_phi (dim_Theta dim_L))" } + context 'implicit extender example #13' do + let(:exp) { 'unitsml(dim_phi (dim_Theta dim_L))' } let(:expected_value) do <<~MATHML @@ -954,21 +956,21 @@ ( Θ - ) - L + L + ) MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #14" do - let(:exp) { "unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))" } + context 'implicit extender example #14' do + let(:exp) { 'unitsml((dim_phi(dim_I)) ((dim_Theta) dim_L))' } let(:expected_value) do <<~MATHML @@ -996,13 +998,13 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end - context "implicit extender example #15" do - let(:exp) { "unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))" } + context 'implicit extender example #15' do + let(:exp) { 'unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L))' } let(:expected_value) do <<~MATHML @@ -1026,8 +1028,8 @@ MATHML end - it "matches the UnitsML to MathML converted value" do - expect(mathml).to be_equivalent_to(expected_value) + it 'matches the UnitsML to MathML converted value' do + expect(mathml).to be_xml_equivalent_to(expected_value) end end end diff --git a/spec/unitsml/conv/plurimath_spec.rb b/spec/unitsml/conv/plurimath_spec.rb index 63be38d..507b213 100644 --- a/spec/unitsml/conv/plurimath_spec.rb +++ b/spec/unitsml/conv/plurimath_spec.rb @@ -1,778 +1,780 @@ -RSpec.describe Unitsml::Parser do +# frozen_string_literal: true +RSpec.describe Unitsml::Parser do subject(:formula) do described_class.new(exp).parse.to_plurimath( respond_to?(:options) ? options : {} ) end - context "when plurimath is not required/installed" do - let(:exp) { "unitsml(mm*s^-2)" } + context 'when plurimath is not required/installed' do + let(:exp) { 'unitsml(mm*s^-2)' } before do - allow_any_instance_of(Unitsml::Formula).to receive(:require).with("plurimath").and_raise(LoadError) + allow_any_instance_of(Unitsml::Formula).to receive(:require).with('plurimath').and_raise(LoadError) end - it "raises an error when trying to use Plurimath" do - expect { formula }.to raise_error(Unitsml::Errors::PlurimathLoadError, /\[unitsml\] Error: Failed to require 'plurimath'./) + it 'raises an error when trying to use Plurimath' do + expect do + formula + end.to raise_error(Unitsml::Errors::PlurimathLoadError, /\[unitsml\] Error: Failed to require 'plurimath'./) end end - context "Unitsml example contains prefix and units" do - let(:exp) { "unitsml(mm*s^((-2)))" } + context 'Unitsml example contains prefix and units' do + let(:exp) { 'unitsml(mm*s^((-2)))' } let(:expected_value) do Plurimath::Math::Formula.new([ - Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("mm"), - "normal" - ), - Plurimath::Math::Symbols::Cdot.new, - Plurimath::Math::Function::Power.new( - Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("s"), - "normal" - ), - Plurimath::Math::Function::Fenced.new( - Plurimath::Math::Symbols::Paren::Lround.new, - [ - Plurimath::Math::Formula.new([ - Plurimath::Math::Symbols::Minus.new, - Plurimath::Math::Number.new("2"), - ]), - ], - Plurimath::Math::Symbols::Paren::Rround.new, - ), - ) - ]) - end - - it "compares expected value with to_plurimath method output" do + Plurimath::Math::Function::FontStyle::Normal.new( + Plurimath::Math::Symbols::Symbol.new('mm'), + 'normal' + ), + Plurimath::Math::Symbols::Cdot.new, + Plurimath::Math::Function::Power.new( + Plurimath::Math::Function::FontStyle::Normal.new( + Plurimath::Math::Symbols::Symbol.new('s'), + 'normal' + ), + Plurimath::Math::Function::Fenced.new( + Plurimath::Math::Symbols::Paren::Lround.new, + [ + Plurimath::Math::Formula.new([ + Plurimath::Math::Symbols::Minus.new, + Plurimath::Math::Number.new('2') + ]) + ], + Plurimath::Math::Symbols::Paren::Rround.new + ) + ) + ]) + end + + it 'compares expected value with to_plurimath method output' do expect(formula).to eq(expected_value) end end - context "Unitsml example contains dimension only" do - let(:exp) { "unitsml(dim_L)" } + context 'Unitsml example contains dimension only' do + let(:exp) { 'unitsml(dim_L)' } let(:expected_value) do Plurimath::Math::Formula.new([ - Plurimath::Math::Function::FontStyle::SansSerif.new( - Plurimath::Math::Symbols::Symbol.new("L"), - "sans-serif", - ) - ]) + Plurimath::Math::Function::FontStyle::SansSerif.new( + Plurimath::Math::Symbols::Symbol.new('L'), + 'sans-serif' + ) + ]) end - it "compares expected value with to_plurimath method output" do + it 'compares expected value with to_plurimath method output' do expect(formula).to eq(expected_value) end end - context "Unitsml example contains prefix only" do - let(:exp) { "unitsml(k-)" } + context 'Unitsml example contains prefix only' do + let(:exp) { 'unitsml(k-)' } let(:expected_value) do Plurimath::Math::Formula.new([ - Plurimath::Math::Symbols::Symbol.new("k"), - ]) + Plurimath::Math::Symbols::Symbol.new('k') + ]) end - it "compares expected value with to_plurimath method output" do + it 'compares expected value with to_plurimath method output' do expect(formula).to eq(expected_value) end end - context "Unitsml example contains unit only" do - let(:exp) { "unitsml(g)" } + context 'Unitsml example contains unit only' do + let(:exp) { 'unitsml(g)' } let(:expected_value) do Plurimath::Math::Formula.new([ - Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("g"), - "normal", - ) - ]) + Plurimath::Math::Function::FontStyle::Normal.new( + Plurimath::Math::Symbols::Symbol.new('g'), + 'normal' + ) + ]) end - it "compares expected value with to_plurimath method output" do + it 'compares expected value with to_plurimath method output' do expect(formula).to eq(expected_value) end end context "Unitsml example contains 'um' crashing while LutaML-Model integration in Plurimath" do - let(:exp) { "unitsml(um)" } + let(:exp) { 'unitsml(um)' } let(:expected_value) do Plurimath::Math::Formula.new([ - Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("µm"), - "normal", - ) - ]) + Plurimath::Math::Function::FontStyle::Normal.new( + Plurimath::Math::Symbols::Symbol.new('µm'), + 'normal' + ) + ]) end - it "compares expected value with to_plurimath method output" do + it 'compares expected value with to_plurimath method output' do expect(formula).to eq(expected_value) end end - context "Unitsml example crashing in plurimath/plurimath#343" do - let(:exp) { "unitsml(kg^((-1))*m^((-3))*s^4*A^2)" } + context 'Unitsml example crashing in plurimath/plurimath#343' do + let(:exp) { 'unitsml(kg^((-1))*m^((-3))*s^4*A^2)' } let(:expected_value) do Plurimath::Math::Formula.new( [ Plurimath::Math::Function::Power.new( Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("kg"), - "normal", + Plurimath::Math::Symbols::Symbol.new('kg'), + 'normal' ), Plurimath::Math::Function::Fenced.new( Plurimath::Math::Symbols::Paren::Lround.new, [ Plurimath::Math::Formula.new([ - Plurimath::Math::Symbols::Minus.new, - Plurimath::Math::Number.new("1"), - ]), + Plurimath::Math::Symbols::Minus.new, + Plurimath::Math::Number.new('1') + ]) ], - Plurimath::Math::Symbols::Paren::Rround.new, - ), + Plurimath::Math::Symbols::Paren::Rround.new + ) ), Plurimath::Math::Symbols::Cdot.new, Plurimath::Math::Function::Power.new( Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("m"), - "normal", + Plurimath::Math::Symbols::Symbol.new('m'), + 'normal' ), Plurimath::Math::Function::Fenced.new( Plurimath::Math::Symbols::Paren::Lround.new, [ Plurimath::Math::Formula.new([ - Plurimath::Math::Symbols::Minus.new, - Plurimath::Math::Number.new("3"), - ]), + Plurimath::Math::Symbols::Minus.new, + Plurimath::Math::Number.new('3') + ]) ], - Plurimath::Math::Symbols::Paren::Rround.new, - ), + Plurimath::Math::Symbols::Paren::Rround.new + ) ), Plurimath::Math::Symbols::Cdot.new, Plurimath::Math::Function::Power.new( Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("s"), - "normal", + Plurimath::Math::Symbols::Symbol.new('s'), + 'normal' ), - Plurimath::Math::Number.new("4"), + Plurimath::Math::Number.new('4') ), Plurimath::Math::Symbols::Cdot.new, Plurimath::Math::Function::Power.new( Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("A"), - "normal", + Plurimath::Math::Symbols::Symbol.new('A'), + 'normal' ), - Plurimath::Math::Number.new("2"), - ), - ], + Plurimath::Math::Number.new('2') + ) + ] ) end - it "compares expected value with to_plurimath method output" do + it 'compares expected value with to_plurimath method output' do expect(formula).to eq(expected_value) end end - context "Unitsml example contains unit only wrapped in parentheses with default explicit_parenthesis: true" do - let(:exp) { "unitsml(((((g^((((3)))))))))" } + context 'Unitsml example contains unit only wrapped in parentheses with default explicit_parenthesis: true' do + let(:exp) { 'unitsml(((((g^((((3)))))))))' } let(:expected_value) do Plurimath::Math::Formula.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::Power.new( - Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("g"), - "normal", - ), - Plurimath::Math::Function::Fenced.new( - Plurimath::Math::Symbols::Paren::Lround.new, - [ - Plurimath::Math::Function::Fenced.new( - Plurimath::Math::Symbols::Paren::Lround.new, - [ - Plurimath::Math::Number.new("3"), - ], - Plurimath::Math::Symbols::Paren::Rround.new, - ), - ], - Plurimath::Math::Symbols::Paren::Rround.new, - ), - ), - ], - Plurimath::Math::Symbols::Paren::Rround.new, - ), - ], - Plurimath::Math::Symbols::Paren::Rround.new, - ) - ]) - end - - it "compares expected value with to_plurimath method output" do + 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::Power.new( + Plurimath::Math::Function::FontStyle::Normal.new( + Plurimath::Math::Symbols::Symbol.new('g'), + 'normal' + ), + Plurimath::Math::Function::Fenced.new( + Plurimath::Math::Symbols::Paren::Lround.new, + [ + Plurimath::Math::Function::Fenced.new( + Plurimath::Math::Symbols::Paren::Lround.new, + [ + Plurimath::Math::Number.new('3') + ], + Plurimath::Math::Symbols::Paren::Rround.new + ) + ], + Plurimath::Math::Symbols::Paren::Rround.new + ) + ) + ], + Plurimath::Math::Symbols::Paren::Rround.new + ) + ], + Plurimath::Math::Symbols::Paren::Rround.new + ) + ]) + end + + it 'compares expected value with to_plurimath method output' do expect(formula).to eq(expected_value) end end - context "Unitsml example contains unit only wrapped in parentheses with explicit_parenthesis: false" do - let(:exp) { "unitsml(((g)))" } + context 'Unitsml example contains unit only wrapped in parentheses with explicit_parenthesis: false' do + let(:exp) { 'unitsml(((g)))' } let(:expected_value) do Plurimath::Math::Formula.new([ - Plurimath::Math::Function::FontStyle::Normal.new( - Plurimath::Math::Symbols::Symbol.new("g"), - "normal", - ) - ]) + Plurimath::Math::Function::FontStyle::Normal.new( + Plurimath::Math::Symbols::Symbol.new('g'), + 'normal' + ) + ]) end let(:options) { { explicit_parenthesis: false } } - it "compares expected value with to_plurimath method output" do + it 'compares expected value with to_plurimath method output' 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))" } + 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, - ) - ]) + 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 + 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))))" } + 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::Function::Fenced.new( - Plurimath::Math::Symbols::Paren::Lround.new, - [ - Plurimath::Math::Formula.new([ - Plurimath::Math::Symbols::Minus.new, - Plurimath::Math::Number.new("1"), - ]), - ], - Plurimath::Math::Symbols::Paren::Rround.new, - ), - ), - 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::Function::Fenced.new( - Plurimath::Math::Symbols::Paren::Lround.new, - [ - Plurimath::Math::Formula.new([ - Plurimath::Math::Symbols::Minus.new, - Plurimath::Math::Number.new("1"), - ]), - ], - Plurimath::Math::Symbols::Paren::Rround.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::Function::Fenced.new( + Plurimath::Math::Symbols::Paren::Lround.new, + [ + Plurimath::Math::Formula.new([ + Plurimath::Math::Symbols::Minus.new, + Plurimath::Math::Number.new('1') + ]) + ], + Plurimath::Math::Symbols::Paren::Rround.new + ) + ), + 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::Function::Fenced.new( + Plurimath::Math::Symbols::Paren::Lround.new, + [ + Plurimath::Math::Formula.new([ + Plurimath::Math::Symbols::Minus.new, + Plurimath::Math::Number.new('1') + ]) + ], + Plurimath::Math::Symbols::Paren::Rround.new + ) + ) + ]) end - it "matches the UnitsML to UnicodeMath converted value" do + 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)" } + 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"), - ]), - ), - ]) + 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 + 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))" } + 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"), - ]), - ), - ]) + 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 + 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)" } + 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", - ), - ]) + 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 + 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)" } + 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", - ), - ]) + 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 + 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))" } + 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, - ), - ]) + 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 + 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))" } + 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, - ), - ]) + 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 + 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)" } + 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", - ), - ]) + 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 + 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))" } + 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, - ), - ]) + 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 + 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)" } + 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", - ), - ]) + 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 + 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)" } + 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", - ), - ]) + 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 + 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))" } + 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, - ), - ]) + 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 + 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))" } + 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, - ), - ]) + 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 + 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^((12))))" } + context 'implicit extender example #15' do + let(:exp) { 'unitsml(sqrt(dim_phi(dim_I)) ((dim_Theta) dim_L^((12))))' } 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::Power.new( - Plurimath::Math::Function::FontStyle::SansSerif.new( - Plurimath::Math::Symbols::Symbol.new("L"), - "sans-serif", - ), - Plurimath::Math::Function::Fenced.new( - Plurimath::Math::Symbols::Paren::Lround.new, - [ - Plurimath::Math::Number.new("12"), - ], - Plurimath::Math::Symbols::Paren::Rround.new, - ), - ), - ], - Plurimath::Math::Symbols::Paren::Rround.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::Power.new( + Plurimath::Math::Function::FontStyle::SansSerif.new( + Plurimath::Math::Symbols::Symbol.new('L'), + 'sans-serif' + ), + Plurimath::Math::Function::Fenced.new( + Plurimath::Math::Symbols::Paren::Lround.new, + [ + Plurimath::Math::Number.new('12') + ], + Plurimath::Math::Symbols::Paren::Rround.new + ) + ) + ], + Plurimath::Math::Symbols::Paren::Rround.new + ) + ]) end - it "matches the UnitsML to UnicodeMath converted value" do + it 'matches the UnitsML to UnicodeMath converted value' do expect(formula).to eq(expected_value) end end diff --git a/spec/unitsml/conv/unicode_spec.rb b/spec/unitsml/conv/unicode_spec.rb index c955f1c..b430e52 100644 --- a/spec/unitsml/conv/unicode_spec.rb +++ b/spec/unitsml/conv/unicode_spec.rb @@ -1,394 +1,395 @@ -require "spec_helper" +# frozen_string_literal: true -RSpec.describe Unitsml::Parser do +require 'spec_helper' +RSpec.describe Unitsml::Parser do subject(:formula) { described_class.new(exp).parse.to_unicode(respond_to?(:options) ? options : {}) } - context "contains Unitsml #1 example" do - let(:exp) { "unitsml(mm*s^((-2)))" } - let(:expected_value) { "mm·s^(-2)" } + context 'contains Unitsml #1 example' do + let(:exp) { 'unitsml(mm*s^((-2)))' } + let(:expected_value) { 'mm·s^(-2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #2 example" do - let(:exp) { "unitsml(um)" } - let(:expected_value) { "μm" } + context 'contains Unitsml #2 example' do + let(:exp) { 'unitsml(um)' } + let(:expected_value) { 'μm' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #3 example" do - let(:exp) { "unitsml(degK)" } - let(:expected_value) { "°K" } + context 'contains Unitsml #3 example' do + let(:exp) { 'unitsml(degK)' } + let(:expected_value) { '°K' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #4 example" do - let(:exp) { "unitsml(prime)" } - let(:expected_value) { "′" } + context 'contains Unitsml #4 example' do + let(:exp) { 'unitsml(prime)' } + let(:expected_value) { '′' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #5 example" do - let(:exp) { "unitsml(rad)" } - let(:expected_value) { "rad" } + context 'contains Unitsml #5 example' do + let(:exp) { 'unitsml(rad)' } + let(:expected_value) { 'rad' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #6 example" do - let(:exp) { "unitsml(Hz)" } - let(:expected_value) { "Hz" } + context 'contains Unitsml #6 example' do + let(:exp) { 'unitsml(Hz)' } + let(:expected_value) { 'Hz' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #7 example" do - let(:exp) { "unitsml(kg)" } - let(:expected_value) { "kg" } + context 'contains Unitsml #7 example' do + let(:exp) { 'unitsml(kg)' } + let(:expected_value) { 'kg' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #8 example" do - let(:exp) { "unitsml(m)" } - let(:expected_value) { "m" } + context 'contains Unitsml #8 example' do + let(:exp) { 'unitsml(m)' } + let(:expected_value) { 'm' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #9 example" do - let(:exp) { "unitsml(sqrt(Hz))" } - let(:expected_value) { "Hz^0.5" } + context 'contains Unitsml #9 example' do + let(:exp) { 'unitsml(sqrt(Hz))' } + let(:expected_value) { 'Hz^0.5' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #10 example" do - let(:exp) { "unitsml(g)" } - let(:expected_value) { "g" } + context 'contains Unitsml #10 example' do + let(:exp) { 'unitsml(g)' } + let(:expected_value) { 'g' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #11 example" do - let(:exp) { "unitsml(hp)" } - let(:expected_value) { "hp" } + context 'contains Unitsml #11 example' do + let(:exp) { 'unitsml(hp)' } + let(:expected_value) { 'hp' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #12 example" do - let(:exp) { "unitsml(kg*s^-2)" } - let(:expected_value) { "kg·s^-2" } + context 'contains Unitsml #12 example' do + let(:exp) { 'unitsml(kg*s^-2)' } + let(:expected_value) { 'kg·s^-2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #13 example" do - let(:exp) { "unitsml(mbar)" } - let(:expected_value) { "mbar" } + context 'contains Unitsml #13 example' do + let(:exp) { 'unitsml(mbar)' } + let(:expected_value) { 'mbar' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #14 example" do - let(:exp) { "unitsml(p-)" } - let(:expected_value) { "p" } + context 'contains Unitsml #14 example' do + let(:exp) { 'unitsml(p-)' } + let(:expected_value) { 'p' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #15 example" do - let(:exp) { "unitsml(h-)" } - let(:expected_value) { "h" } + context 'contains Unitsml #15 example' do + let(:exp) { 'unitsml(h-)' } + let(:expected_value) { 'h' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #16 example" do - let(:exp) { "unitsml(da-)" } - let(:expected_value) { "da" } + context 'contains Unitsml #16 example' do + let(:exp) { 'unitsml(da-)' } + let(:expected_value) { 'da' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #17 example" do - let(:exp) { "unitsml(u-)" } - let(:expected_value) { "μ" } + context 'contains Unitsml #17 example' do + let(:exp) { 'unitsml(u-)' } + let(:expected_value) { 'μ' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #18 example" do - let(:exp) { "unitsml(A*C^3)" } - let(:expected_value) { "A·C^3" } + context 'contains Unitsml #18 example' do + let(:exp) { 'unitsml(A*C^3)' } + let(:expected_value) { 'A·C^3' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #19 example" do - let(:exp) { "unitsml(A/C^-3)" } - let(:expected_value) { "A/C^3" } + context 'contains Unitsml #19 example' do + let(:exp) { 'unitsml(A/C^-3)' } + let(:expected_value) { 'A/C^3' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #20 example" do - let(:exp) { "unitsml(J/kg*K)" } - let(:expected_value) { "J/kg^-1·K^-1" } + context 'contains Unitsml #20 example' do + let(:exp) { 'unitsml(J/kg*K)' } + let(:expected_value) { 'J/kg^-1·K^-1' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #21 example" do - let(:exp) { "unitsml(kg^-2)" } - let(:expected_value) { "kg^-2" } + context 'contains Unitsml #21 example' do + let(:exp) { 'unitsml(kg^-2)' } + let(:expected_value) { 'kg^-2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #22 example" do - let(:exp) { "unitsml(kg*s^-2)" } - let(:expected_value) { "kg·s^-2" } + context 'contains Unitsml #22 example' do + let(:exp) { 'unitsml(kg*s^-2)' } + let(:expected_value) { 'kg·s^-2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #23 example" do - let(:exp) { "unitsml(mW*cm^(-2))" } - let(:expected_value) { "mW·cm^-2" } + context 'contains Unitsml #23 example' do + let(:exp) { 'unitsml(mW*cm^(-2))' } + let(:expected_value) { 'mW·cm^-2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #24 example" do - let(:exp) { "unitsml(dim_Theta*dim_L^2)" } - let(:expected_value) { "𝝧·𝖫^2" } + context 'contains Unitsml #24 example' do + let(:exp) { 'unitsml(dim_Theta*dim_L^2)' } + let(:expected_value) { '𝝧·𝖫^2' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #25 example" do - let(:exp) { "unitsml(dim_Theta^10*dim_L^((2)))" } - let(:expected_value) { "𝝧^10·𝖫^(2)" } + context 'contains Unitsml #25 example' do + let(:exp) { 'unitsml(dim_Theta^10*dim_L^((2)))' } + let(:expected_value) { '𝝧^10·𝖫^(2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #26 example" do - let(:exp) { "unitsml(Hz^10*darcy^100)" } - let(:expected_value) { "Hz^10·d^100" } + context 'contains Unitsml #26 example' do + let(:exp) { 'unitsml(Hz^10*darcy^100)' } + let(:expected_value) { 'Hz^10·d^100' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #27 example" do - let(:exp) { "unitsml(((Hz^10))*darcy^((((100)))))" } - let(:expected_value) { "(Hz^10)·d^((100))" } + context 'contains Unitsml #27 example' do + let(:exp) { 'unitsml(((Hz^10))*darcy^((((100)))))' } + let(:expected_value) { '(Hz^10)·d^((100))' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #27 example with explicit_parenthesis: false" do - let(:exp) { "unitsml((Hz^10)*darcy^((((100)))))" } - let(:expected_value) { "Hz^10·d^100" } + context 'contains Unitsml #27 example with explicit_parenthesis: false' do + let(:exp) { 'unitsml((Hz^10)*darcy^((((100)))))' } + let(:expected_value) { 'Hz^10·d^100' } let(:options) { { explicit_parenthesis: false } } - it "returns parslet tree of parsed Unitsml string" do - expect(formula).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula).to be_xml_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)" } + 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 + 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" } + 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 + 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" } + 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 + 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" } + 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 + 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" } + 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 + 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" } + 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 + 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)" } + 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 + 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)" } + 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 + 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" } + 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 + 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) { "𝝧(𝞅)" } + 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 + 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) { "(𝝧)𝖫" } + 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 + 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) { "𝝧 𝖫" } + 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 + 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) { "𝞅(𝝧 𝖫)" } + 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 + 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) { "(𝞅(𝖨))((𝝧)𝖫)" } + 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 + 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) { "𝞅(𝖨)((𝝧)𝖫)" } + 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 + it 'matches the UnitsML to UnicodeMath converted value' do expect(formula).to eq(expected_value) end end diff --git a/spec/unitsml/conv/xml_spec.rb b/spec/unitsml/conv/xml_spec.rb index cab60fa..4d62880 100644 --- a/spec/unitsml/conv/xml_spec.rb +++ b/spec/unitsml/conv/xml_spec.rb @@ -1,17 +1,18 @@ -require "spec_helper" +# frozen_string_literal: true -RSpec.describe Unitsml::Parser do +require 'spec_helper' +RSpec.describe Unitsml::Parser do before(:all) { Lutaml::Model::Config.xml_adapter_type = :ox } subject(:formula) { described_class.new(exp).parse } - context "contains Unitsml #1 example" do - let(:exp) { "unitsml(mm*s^((-2)))" } + context 'contains Unitsml #1 example' do + let(:exp) { 'unitsml(mm*s^((-2)))' } let(:expected_value) do <<~XML - + mm*s^-2 mm⋅s(−2) @@ -52,17 +53,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #2 example" do - let(:exp) { "unitsml(um, name: micro meter)" } + context 'contains Unitsml #2 example' do + let(:exp) { 'unitsml(um, name: micro meter)' } let(:expected_value) do <<~XML - + micro meter µm @@ -74,7 +75,6 @@ - micro u @@ -83,24 +83,23 @@ µ - XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #3 example" do - let(:exp) { "unitsml(degK)" } + context 'contains Unitsml #3 example' do + let(:exp) { 'unitsml(degK)' } let(:expected_value) do <<~XML - + kelvin °K @@ -115,23 +114,23 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #4 example" do - let(:exp) { "unitsml(prime)" } + context 'contains Unitsml #4 example' do + let(:exp) { 'unitsml(prime)' } let(:expected_value) do <<~XML - + arcminute - - - + + + @@ -139,23 +138,23 @@ - plane angle - angle + plane angle + angle XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #5 example" do - let(:exp) { "unitsml(rad)" } + context 'contains Unitsml #5 example' do + let(:exp) { 'unitsml(rad)' } let(:expected_value) do <<~XML - + radian rad @@ -175,17 +174,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #6 example" do - let(:exp) { "unitsml(Hz)" } + context 'contains Unitsml #6 example' do + let(:exp) { 'unitsml(Hz)' } let(:expected_value) do <<~XML - + hertz Hz @@ -204,22 +203,22 @@ - frequency + frequency XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #7 example" do - let(:exp) { "unitsml(kg, name: custom kilogram)" } + context 'contains Unitsml #7 example' do + let(:exp) { 'unitsml(kg, name: custom kilogram)' } let(:expected_value) do <<~XML - + custom kilogram kg @@ -245,22 +244,22 @@ - mass + mass XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #8 example" do - let(:exp) { "unitsml(m)" } + context 'contains Unitsml #8 example' do + let(:exp) { 'unitsml(m)' } let(:expected_value) do <<~XML - + metre m @@ -276,17 +275,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #9 example" do - let(:exp) { "unitsml(sqrt(Hz))" } + context 'contains Unitsml #9 example' do + let(:exp) { 'unitsml(sqrt(Hz))' } let(:expected_value) do <<~XML - + Hz^0.5 Hz0.5 @@ -305,17 +304,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #10 example" do - let(:exp) { "unitsml(g)" } + context 'contains Unitsml #10 example' do + let(:exp) { 'unitsml(g)' } let(:expected_value) do <<~XML - + gram g @@ -330,22 +329,22 @@ - mass + mass XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #11 example" do - let(:exp) { "unitsml(hp)" } + context 'contains Unitsml #11 example' do + let(:exp) { 'unitsml(hp)' } let(:expected_value) do <<~XML - + horsepower hp @@ -362,22 +361,22 @@ - power + power XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #12 example" do - let(:exp) { "unitsml(kg*s^-2)" } + context 'contains Unitsml #12 example' do + let(:exp) { 'unitsml(kg*s^-2)' } let(:expected_value) do <<~XML - + kg*s^-2 kg⋅s−2 @@ -414,17 +413,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #13 example" do - let(:exp) { "unitsml(mbar)" } + context 'contains Unitsml #13 example' do + let(:exp) { 'unitsml(mbar)' } let(:expected_value) do <<~XML - + millibar mbar @@ -453,13 +452,13 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #14 example" do - let(:exp) { "unitsml(d-)" } + context 'contains Unitsml #14 example' do + let(:exp) { 'unitsml(d-)' } let(:expected_value) do <<~XML @@ -475,19 +474,19 @@ - time - duration + time + duration XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #15 example" do - let(:exp) { "unitsml(h-)" } + context 'contains Unitsml #15 example' do + let(:exp) { 'unitsml(h-)' } let(:expected_value) do <<~XML @@ -503,19 +502,19 @@ - time - duration + time + duration XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #16 example" do - let(:exp) { "unitsml(da-)" } + context 'contains Unitsml #16 example' do + let(:exp) { 'unitsml(da-)' } let(:expected_value) do <<~XML @@ -528,13 +527,13 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #17 example" do - let(:exp) { "unitsml(u-)" } + context 'contains Unitsml #17 example' do + let(:exp) { 'unitsml(u-)' } let(:expected_value) do <<~XML @@ -550,22 +549,22 @@ - mass + mass XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #18 example" do - let(:exp) { "unitsml(A*C^3)" } + context 'contains Unitsml #18 example' do + let(:exp) { 'unitsml(A*C^3)' } let(:expected_value) do <<~XML - + A*C^3 A⋅C3 @@ -591,17 +590,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #19 example" do - let(:exp) { "unitsml(A/C^-3)" } + context 'contains Unitsml #19 example' do + let(:exp) { 'unitsml(A/C^-3)' } let(:expected_value) do <<~XML - + A*C^3 A⋅C3 @@ -627,17 +626,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #20 example" do - let(:exp) { "unitsml(J/kg*K)" } + context 'contains Unitsml #20 example' do + let(:exp) { 'unitsml(J/kg*K)' } let(:expected_value) do <<~XML - + joule per kilogram kelvin J⋅kg−1⋅K−1 @@ -691,17 +690,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #21 example" do - let(:exp) { "unitsml(kg^-2)" } + context 'contains Unitsml #21 example' do + let(:exp) { 'unitsml(kg^-2)' } let(:expected_value) do <<~XML - + kg^-2 kg−2 @@ -734,17 +733,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #22 example" do - let(:exp) { "unitsml(kg*s^-2)" } + context 'contains Unitsml #22 example' do + let(:exp) { 'unitsml(kg*s^-2)' } let(:expected_value) do <<~XML - + kg*s^-2 kg⋅s−2 @@ -781,17 +780,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #23 example" do - let(:exp) { "unitsml(mW*cm^(-2))" } + context 'contains Unitsml #23 example' do + let(:exp) { 'unitsml(mW*cm^(-2))' } let(:expected_value) do <<~XML - + mW*cm^-2 mW⋅cm−2 @@ -831,13 +830,13 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #24 example" do - let(:exp) { "unitsml(dim_Theta*dim_L^((2)))" } + context 'contains Unitsml #24 example' do + let(:exp) { 'unitsml(dim_Theta*dim_L^((2)))' } let(:expected_value) do <<~XML @@ -847,13 +846,13 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #25 example" do - let(:exp) { "unitsml(dim_Theta^10*dim_L^2)" } + context 'contains Unitsml #25 example' do + let(:exp) { 'unitsml(dim_Theta^10*dim_L^2)' } let(:expected_value) do <<~XML @@ -863,18 +862,18 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #26 example" do - let(:exp) { "unitsml(Hz^10*darcy^100)" } + context 'contains Unitsml #26 example' do + let(:exp) { 'unitsml(Hz^10*darcy^100)' } let(:expected_value) do <<~XML - - + + Hz^10*darcy^100 Hz10⋅d100 @@ -898,13 +897,13 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #27 example" do - let(:exp) { "unitsml(sqrt(dim_Theta))" } + context 'contains Unitsml #27 example' do + let(:exp) { 'unitsml(sqrt(dim_Theta))' } let(:expected_value) do <<~XML @@ -913,17 +912,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #28 example" do - let(:exp) { "unitsml(sqrt(mm))" } + context 'contains Unitsml #28 example' do + let(:exp) { 'unitsml(sqrt(mm))' } let(:expected_value) do <<~XML - + mm^0.5 mm0.5 @@ -953,17 +952,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #29 example" do - let(:exp) { "unitsml(GHz//V)" } + context 'contains Unitsml #29 example' do + let(:exp) { 'unitsml(GHz//V)' } let(:expected_value) do <<~XML - + GHz*V^-1 GHz⋅V−1 @@ -1002,17 +1001,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #30 example" do - let(:exp) { "unitsml(m^(-2))" } + context 'contains Unitsml #30 example' do + let(:exp) { 'unitsml(m^(-2))' } let(:expected_value) do <<~XML - + meter to the power minus two m−2 @@ -1037,22 +1036,22 @@ - fluence + fluence XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #31 example" do - let(:exp) { "unitsml(cd*sr*m^(-2),symbol:cd cdot sr cdot m^(-2))" } + context 'contains Unitsml #31 example' do + let(:exp) { 'unitsml(cd*sr*m^(-2),symbol:cd cdot sr cdot m^(-2))' } let(:expected_value) do <<~XML - + cd*sr*m^-2 cd⋅sr⋅m−2 @@ -1084,17 +1083,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #32 example" do - let(:exp) { "unitsml(mOhm)" } + context 'contains Unitsml #32 example' do + let(:exp) { 'unitsml(mOhm)' } let(:expected_value) do <<~XML - + mOhm mΩ @@ -1124,55 +1123,55 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #33 example from plurimath/plurimath#321" do - let(:exp) { "unitsml(m*kg^-2)" } + context 'contains Unitsml #33 example from plurimath/plurimath#321' do + let(:exp) { 'unitsml(m*kg^-2)' } let(:space_expected_value) do <<~XML - - - m*kg^-2 - m kg−2 - - - m - - - kg - - - 2 - - - - - - - - - - - kilo - k - k - k - k - - - - - + + + m*kg^-2 + m kg−2 + + + m + + + kg + + + 2 + + + + + + + + + + + kilo + k + k + k + k + + + + + XML end let(:nospace_expected_value) do <<~XML - + m*kg^-2 m⁢kg−2 @@ -1210,7 +1209,7 @@ let(:custom_expected_value) do <<~XML - + m*kg^-2 mXkg−2 @@ -1245,25 +1244,25 @@ XML end - it "matches Unitsml to MathML converted string with :space multiplier argument" do - expect(formula.to_xml(multiplier: :space)).to be_equivalent_to(space_expected_value) + it 'matches Unitsml to MathML converted string with :space multiplier argument' do + expect(formula.to_xml(multiplier: :space)).to be_xml_equivalent_to(space_expected_value) end - it "matches Unitsml to MathML converted string with :nospace multiplier argument" do - expect(formula.to_xml(multiplier: :nospace)).to be_equivalent_to(nospace_expected_value) + it 'matches Unitsml to MathML converted string with :nospace multiplier argument' do + expect(formula.to_xml(multiplier: :nospace)).to be_xml_equivalent_to(nospace_expected_value) end - it "matches Unitsml to MathML converted string with custom multiplier argument" do - expect(formula.to_xml(multiplier: "X")).to be_equivalent_to(custom_expected_value) + it 'matches Unitsml to MathML converted string with custom multiplier argument' do + expect(formula.to_xml(multiplier: 'X')).to be_xml_equivalent_to(custom_expected_value) end end - context "contains Unitsml #34 example" do - let(:exp) { "unitsml((((m^-2))))" } + context 'contains Unitsml #34 example' do + let(:exp) { 'unitsml((((m^-2))))' } let(:expected_value) do <<~XML - + meter to the power minus two (m−2) @@ -1292,18 +1291,18 @@ - fluence + fluence XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #35 example" do - let(:exp) { "unitsml((dim_Theta^10)*dim_L^2)" } + context 'contains Unitsml #35 example' do + let(:exp) { 'unitsml((dim_Theta^10)*dim_L^2)' } let(:expected_value) do <<~XML @@ -1313,17 +1312,17 @@ XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #36 example" do - let(:exp) { "unitsml((m^((-2))))" } + context 'contains Unitsml #36 example' do + let(:exp) { 'unitsml((m^((-2))))' } let(:expected_value) do <<~XML - + meter to the power minus two m−2 @@ -1348,28 +1347,28 @@ - fluence + fluence XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml(explicit_parenthesis: false)).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml(explicit_parenthesis: false)).to be_xml_equivalent_to(expected_value) end end - context "contains Unitsml #37 example" do - let(:exp) { "unitsml(sqrt((dim_Theta)))" } + context 'contains Unitsml #37 example' do + let(:exp) { 'unitsml(sqrt((dim_Theta)))' } let(:expected_value) do <<~XML - + XML end - it "returns parslet tree of parsed Unitsml string" do - expect(formula.to_xml(explicit_parenthesis: false)).to be_equivalent_to(expected_value) + it 'returns parslet tree of parsed Unitsml string' do + expect(formula.to_xml(explicit_parenthesis: false)).to be_xml_equivalent_to(expected_value) end end end diff --git a/spec/unitsml/parse_spec.rb b/spec/unitsml/parse_spec.rb index d892d58..a744bf7 100644 --- a/spec/unitsml/parse_spec.rb +++ b/spec/unitsml/parse_spec.rb @@ -1,299 +1,300 @@ -require "spec_helper" +# frozen_string_literal: true -RSpec.describe Unitsml::Parse do +require 'spec_helper' +RSpec.describe Unitsml::Parse do subject(:formula) { described_class.new.parse(exp.match(/unitsml\((.*)\)/)[1]) } - context "contains Unitsml #1 example" do - let(:exp) { "unitsml(mm*s^-2)" } + context 'contains Unitsml #1 example' do + let(:exp) { 'unitsml(mm*s^-2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("m") - expect(formula[:unit]).to eq("m") - expect(formula[:extender]).to eq("*") - expect(formula[:sequence][:unit]).to eq("s") - expect(formula[:sequence][:power_numerator][:integer]).to eq("-2") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('m') + expect(formula[:unit]).to eq('m') + expect(formula[:extender]).to eq('*') + expect(formula[:sequence][:unit]).to eq('s') + expect(formula[:sequence][:power_numerator][:integer]).to eq('-2') end end - context "contains Unitsml #2 example" do - let(:exp) { "unitsml(um)" } + context 'contains Unitsml #2 example' do + let(:exp) { 'unitsml(um)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("u") - expect(formula[:unit]).to eq("m") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('u') + expect(formula[:unit]).to eq('m') end end - context "contains Unitsml #3 example" do - let(:exp) { "unitsml(degK)" } + context 'contains Unitsml #3 example' do + let(:exp) { 'unitsml(degK)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:unit]).to eq("degK") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:unit]).to eq('degK') end end - context "contains Unitsml #4 example" do - let(:exp) { "unitsml(prime)" } + context 'contains Unitsml #4 example' do + let(:exp) { 'unitsml(prime)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:unit]).to eq("prime") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:unit]).to eq('prime') end end - context "contains Unitsml #5 example" do - let(:exp) { "unitsml(rad)" } + context 'contains Unitsml #5 example' do + let(:exp) { 'unitsml(rad)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:unit]).to eq("rad") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:unit]).to eq('rad') end end - context "contains Unitsml #6 example" do - let(:exp) { "unitsml(Hz)" } + context 'contains Unitsml #6 example' do + let(:exp) { 'unitsml(Hz)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:unit]).to eq("Hz") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:unit]).to eq('Hz') end end - context "contains Unitsml #7 example" do - let(:exp) { "unitsml(kg)" } + context 'contains Unitsml #7 example' do + let(:exp) { 'unitsml(kg)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("k") - expect(formula[:unit]).to eq("g") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('k') + expect(formula[:unit]).to eq('g') end end - context "contains Unitsml #8 example" do - let(:exp) { "unitsml(m)" } + context 'contains Unitsml #8 example' do + let(:exp) { 'unitsml(m)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:unit]).to eq("m") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:unit]).to eq('m') end end - context "contains Unitsml #9 example" do - let(:exp) { "unitsml(sqrt(Hz))" } + context 'contains Unitsml #9 example' do + let(:exp) { 'unitsml(sqrt(Hz))' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:sqrt][:unit]).to eq("Hz") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:sqrt][:unit]).to eq('Hz') end end - context "contains Unitsml #10 example" do - let(:exp) { "unitsml(kg)" } + context 'contains Unitsml #10 example' do + let(:exp) { 'unitsml(kg)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("k") - expect(formula[:unit]).to eq("g") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('k') + expect(formula[:unit]).to eq('g') end end - context "contains Unitsml #11 example" do - let(:exp) { "unitsml(g)" } + context 'contains Unitsml #11 example' do + let(:exp) { 'unitsml(g)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:unit]).to eq("g") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:unit]).to eq('g') end end - context "contains Unitsml #11 example" do - let(:exp) { "unitsml(hp)" } + context 'contains Unitsml #11 example' do + let(:exp) { 'unitsml(hp)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:unit]).to eq("hp") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:unit]).to eq('hp') end end - context "contains Unitsml #12 example" do - let(:exp) { "unitsml(kg*s^-2)" } + context 'contains Unitsml #12 example' do + let(:exp) { 'unitsml(kg*s^-2)' } - it "returns parslet tree of parsed Unitsml string" do + it 'returns parslet tree of parsed Unitsml string' do sequence = formula[:sequence] - expect(formula[:prefix]).to eq("k") - expect(formula[:unit]).to eq("g") - expect(formula[:extender]).to eq("*") - expect(sequence[:unit]).to eq("s") - expect(sequence[:power_numerator][:integer]).to eq("-2") + expect(formula[:prefix]).to eq('k') + expect(formula[:unit]).to eq('g') + expect(formula[:extender]).to eq('*') + expect(sequence[:unit]).to eq('s') + expect(sequence[:power_numerator][:integer]).to eq('-2') end end - context "contains Unitsml #13 example" do - let(:exp) { "unitsml(degK)" } + context 'contains Unitsml #13 example' do + let(:exp) { 'unitsml(degK)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:unit]).to eq("degK") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:unit]).to eq('degK') end end - context "contains Unitsml #14 example" do - let(:exp) { "unitsml(mbar)" } + context 'contains Unitsml #14 example' do + let(:exp) { 'unitsml(mbar)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("m") - expect(formula[:unit]).to eq("bar") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('m') + expect(formula[:unit]).to eq('bar') end end - context "contains Unitsml #15 example" do - let(:exp) { "unitsml(p-)" } + context 'contains Unitsml #15 example' do + let(:exp) { 'unitsml(p-)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("p") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('p') end end - context "contains Unitsml #16 example" do - let(:exp) { "unitsml(h-)" } + context 'contains Unitsml #16 example' do + let(:exp) { 'unitsml(h-)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("h") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('h') end end - context "contains Unitsml #17 example" do - let(:exp) { "unitsml(da-)" } + context 'contains Unitsml #17 example' do + let(:exp) { 'unitsml(da-)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("da") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('da') end end - context "contains Unitsml #18 example" do - let(:exp) { "unitsml(u-)" } + context 'contains Unitsml #18 example' do + let(:exp) { 'unitsml(u-)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("u") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('u') end end - context "contains Unitsml #19 example" do - let(:exp) { "unitsml(A*C^3)" } + context 'contains Unitsml #19 example' do + let(:exp) { 'unitsml(A*C^3)' } - it "returns parslet tree of parsed Unitsml string" do + it 'returns parslet tree of parsed Unitsml string' do sequence = formula[:sequence] - expect(formula[:unit]).to eq("A") - expect(formula[:extender]).to eq("*") - expect(sequence[:unit]).to eq("C") - expect(sequence[:power_numerator][:integer]).to eq("3") + expect(formula[:unit]).to eq('A') + expect(formula[:extender]).to eq('*') + expect(sequence[:unit]).to eq('C') + expect(sequence[:power_numerator][:integer]).to eq('3') end end - context "contains Unitsml #20 example" do - let(:exp) { "unitsml(A/C^-3)" } + context 'contains Unitsml #20 example' do + let(:exp) { 'unitsml(A/C^-3)' } - it "returns parslet tree of parsed Unitsml string" do + it 'returns parslet tree of parsed Unitsml string' do sequence = formula[:sequence] - expect(formula[:unit]).to eq("A") - expect(formula[:extender]).to eq("/") - expect(sequence[:unit]).to eq("C") - expect(sequence[:power_numerator][:integer]).to eq("-3") + expect(formula[:unit]).to eq('A') + expect(formula[:extender]).to eq('/') + expect(sequence[:unit]).to eq('C') + expect(sequence[:power_numerator][:integer]).to eq('-3') end end - context "contains Unitsml #21 example" do - let(:exp) { "unitsml(J/kg*K)" } + context 'contains Unitsml #21 example' do + let(:exp) { 'unitsml(J/kg*K)' } - it "returns parslet tree of parsed Unitsml string" do + it 'returns parslet tree of parsed Unitsml string' do sequence = formula[:sequence] - expect(formula[:unit]).to eq("J") - expect(formula[:extender]).to eq("/") - expect(sequence[:prefix]).to eq("k") - expect(sequence[:unit]).to eq("g") - expect(sequence[:extender]).to eq("*") - expect(sequence[:sequence][:unit]).to eq("K") + expect(formula[:unit]).to eq('J') + expect(formula[:extender]).to eq('/') + expect(sequence[:prefix]).to eq('k') + expect(sequence[:unit]).to eq('g') + expect(sequence[:extender]).to eq('*') + expect(sequence[:sequence][:unit]).to eq('K') end end - context "contains Unitsml #22 example" do - let(:exp) { "unitsml(kg^-2)" } + context 'contains Unitsml #22 example' do + let(:exp) { 'unitsml(kg^-2)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:prefix]).to eq("k") - expect(formula[:unit]).to eq("g") - expect(formula[:power_numerator][:integer]).to eq("-2") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:prefix]).to eq('k') + expect(formula[:unit]).to eq('g') + expect(formula[:power_numerator][:integer]).to eq('-2') end end - context "contains Unitsml #23 example" do - let(:exp) { "unitsml(que?)" } + context 'contains Unitsml #23 example' do + let(:exp) { 'unitsml(que?)' } - it "returns parslet tree of parsed Unitsml string" do - expect{formula}.to raise_error(Parslet::ParseFailed) + it 'returns parslet tree of parsed Unitsml string' do + expect { formula }.to raise_error(Parslet::ParseFailed) end end - context "contains Unitsml #24 example" do - let(:exp) { "unitsml(kg*s^-2)" } + context 'contains Unitsml #24 example' do + let(:exp) { 'unitsml(kg*s^-2)' } - it "returns parslet tree of parsed Unitsml string" do + it 'returns parslet tree of parsed Unitsml string' do sequence = formula[:sequence] - expect(formula[:prefix]).to eq("k") - expect(formula[:unit]).to eq("g") - expect(formula[:extender]).to eq("*") - expect(sequence[:unit]).to eq("s") - expect(sequence[:power_numerator][:integer]).to eq("-2") + expect(formula[:prefix]).to eq('k') + expect(formula[:unit]).to eq('g') + expect(formula[:extender]).to eq('*') + expect(sequence[:unit]).to eq('s') + expect(sequence[:power_numerator][:integer]).to eq('-2') end end - context "contains Unitsml #25 example" do - let(:exp) { "unitsml(mW*cm^(-2))" } + context 'contains Unitsml #25 example' do + let(:exp) { 'unitsml(mW*cm^(-2))' } - it "returns parslet tree of parsed Unitsml string" do + it 'returns parslet tree of parsed Unitsml string' do sequence = formula[:sequence] - expect(formula[:prefix]).to eq("m") - expect(formula[:unit]).to eq("W") - expect(formula[:extender]).to eq("*") - expect(sequence[:prefix]).to eq("c") - expect(sequence[:unit]).to eq("m") - expect(sequence[:power_numerator][:int_exp][:integer]).to eq("-2") + expect(formula[:prefix]).to eq('m') + expect(formula[:unit]).to eq('W') + expect(formula[:extender]).to eq('*') + expect(sequence[:prefix]).to eq('c') + expect(sequence[:unit]).to eq('m') + expect(sequence[:power_numerator][:int_exp][:integer]).to eq('-2') end end - context "contains Unitsml #26 example" do - let(:exp) { "unitsml(dim_Theta*dim_L^2)" } + context 'contains Unitsml #26 example' do + let(:exp) { 'unitsml(dim_Theta*dim_L^2)' } - it "returns parslet tree of parsed Unitsml string" do + it 'returns parslet tree of parsed Unitsml string' do sequence = formula[:sequence] - expect(formula[:dimension]).to eq("dim_Theta") - expect(formula[:extender]).to eq("*") - expect(sequence[:dimension]).to eq("dim_L") - expect(sequence[:power_numerator][:integer]).to eq("2") + expect(formula[:dimension]).to eq('dim_Theta') + expect(formula[:extender]).to eq('*') + expect(sequence[:dimension]).to eq('dim_L') + expect(sequence[:power_numerator][:integer]).to eq('2') end end - context "contains Unitsml #27 example" do - let(:exp) { "unitsml(dim_Theta^10*dim_L^2)" } + context 'contains Unitsml #27 example' do + let(:exp) { 'unitsml(dim_Theta^10*dim_L^2)' } - it "returns parslet tree of parsed Unitsml string" do + it 'returns parslet tree of parsed Unitsml string' do sequence = formula[:sequence] - expect(formula[:dimension]).to eq("dim_Theta") - expect(formula[:power_numerator][:integer]).to eq("10") - expect(formula[:extender]).to eq("*") - expect(sequence[:dimension]).to eq("dim_L") - expect(sequence[:power_numerator][:integer]).to eq("2") + expect(formula[:dimension]).to eq('dim_Theta') + expect(formula[:power_numerator][:integer]).to eq('10') + expect(formula[:extender]).to eq('*') + expect(sequence[:dimension]).to eq('dim_L') + expect(sequence[:power_numerator][:integer]).to eq('2') end end - context "contains Unitsml #28 example" do - let(:exp) { "unitsml(Hz^10*darcy^100)" } + context 'contains Unitsml #28 example' do + let(:exp) { 'unitsml(Hz^10*darcy^100)' } - it "returns parslet tree of parsed Unitsml string" do - expect(formula[:unit]).to eq("Hz") - expect(formula[:power_numerator][:integer]).to eq("10") - expect(formula[:extender]).to eq("*") - expect(formula[:sequence][:unit]).to eq("darcy") - expect(formula[:sequence][:power_numerator][:integer]).to eq("100") + it 'returns parslet tree of parsed Unitsml string' do + expect(formula[:unit]).to eq('Hz') + expect(formula[:power_numerator][:integer]).to eq('10') + expect(formula[:extender]).to eq('*') + expect(formula[:sequence][:unit]).to eq('darcy') + expect(formula[:sequence][:power_numerator][:integer]).to eq('100') end end end diff --git a/spec/unitsml/parser_spec.rb b/spec/unitsml/parser_spec.rb index 16dbe6b..0490aaf 100644 --- a/spec/unitsml/parser_spec.rb +++ b/spec/unitsml/parser_spec.rb @@ -1,1360 +1,1361 @@ -require "spec_helper" +# frozen_string_literal: true -RSpec.describe Unitsml::Parser do +require 'spec_helper' +RSpec.describe Unitsml::Parser do subject(:formula) { described_class.new(exp).parse } - context "contains Unitsml #1 example" do - let(:exp) { "unitsml(K/(kg*m))" } + context 'contains Unitsml #1 example' do + let(:exp) { 'unitsml(K/(kg*m))' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("K"), - Unitsml::Extender.new("/"), + Unitsml::Unit.new('K'), + Unitsml::Extender.new('/'), Unitsml::Formula.new([ - Unitsml::Unit.new( - "g", - Unitsml::Number.new("-1"), - prefix: Unitsml::Prefix.new("k"), - ), - Unitsml::Extender.new("*"), - Unitsml::Unit.new( - "m", - Unitsml::Number.new("-1"), - ), - ]) + Unitsml::Unit.new( + 'g', + Unitsml::Number.new('-1'), + prefix: Unitsml::Prefix.new('k') + ), + Unitsml::Extender.new('*'), + Unitsml::Unit.new( + 'm', + Unitsml::Number.new('-1') + ) + ]) ], explicit_value: nil, - norm_text: "K/(kg*m)", - orig_text: "K/(kg*m)", - root: true, + norm_text: 'K/(kg*m)', + orig_text: 'K/(kg*m)', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #2 example' do + let(:exp) { 'unitsml(m, quantity: NISTq103)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("m"), + Unitsml::Unit.new('m') ], - explicit_value: { quantity: "NISTq103" }, - norm_text: "m", - orig_text: "m, quantity: NISTq103", - root: true, + explicit_value: { quantity: 'NISTq103' }, + norm_text: 'm', + orig_text: 'm, quantity: NISTq103', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #3 example' do + let(:exp) { 'unitsml(cal_th/cm^2, name: langley)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("cal_th"), - Unitsml::Extender.new("/"), + Unitsml::Unit.new('cal_th'), + Unitsml::Extender.new('/'), Unitsml::Unit.new( - "m", - Unitsml::Number.new("-2"), - prefix: Unitsml::Prefix.new("c"), - ), + 'm', + Unitsml::Number.new('-2'), + prefix: Unitsml::Prefix.new('c') + ) ], - explicit_value: { name: "langley" }, - norm_text: "cal_th/cm^2", - orig_text: "cal_th/cm^2, name: langley", - root: true, + explicit_value: { name: 'langley' }, + norm_text: 'cal_th/cm^2', + orig_text: 'cal_th/cm^2, name: langley', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #4 example' do + let(:exp) { 'unitsml(m, symbol: La)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("m"), + Unitsml::Unit.new('m') ], - explicit_value: { symbol: "La" }, - norm_text: "m", - orig_text: "m, symbol: La", - root: true, + explicit_value: { symbol: 'La' }, + norm_text: 'm', + orig_text: 'm, symbol: La', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #5 example' do + let(:exp) { 'unitsml(cm*s^-2, symbol: cm cdot s^-2)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("c")), - Unitsml::Extender.new("*"), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('c')), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "s", - Unitsml::Number.new("-2"), - ), + 's', + Unitsml::Number.new('-2') + ) ], - explicit_value: { symbol: "cm cdot s^-2" }, + explicit_value: { symbol: 'cm cdot s^-2' }, root: true, - orig_text: "cm*s^-2, symbol: cm cdot s^-2", - norm_text: "cm*s^-2" + 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 + 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)" } + context 'contains Unitsml #6 example' do + let(:exp) { 'unitsml(cm*s^-2, multiplier: xx)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("c")), - Unitsml::Extender.new("*"), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('c')), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "s", - Unitsml::Number.new("-2"), - ), + 's', + Unitsml::Number.new('-2') + ) ], - explicit_value: { multiplier: "xx" }, - norm_text: "cm*s^-2", - orig_text: "cm*s^-2, multiplier: xx", - root: true, + explicit_value: { multiplier: 'xx' }, + norm_text: 'cm*s^-2', + orig_text: 'cm*s^-2, multiplier: xx', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #7 example' do + let(:exp) { 'unitsml(mm*s^-2)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), - Unitsml::Extender.new("*"), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "s", - Unitsml::Number.new("-2"), - ), + 's', + Unitsml::Number.new('-2') + ) ], root: true, - orig_text: "mm*s^-2", - norm_text: "mm*s^-2", + orig_text: 'mm*s^-2', + norm_text: 'mm*s^-2' ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #8 example' do + let(:exp) { 'unitsml(um)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("u")), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('u')) ], - norm_text: "um", - orig_text: "um", - root: true, + norm_text: 'um', + orig_text: 'um', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #9 example' do + let(:exp) { 'unitsml(degK)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("degK"), + Unitsml::Unit.new('degK') ], - norm_text: "degK", - orig_text: "degK", - root: true, + norm_text: 'degK', + orig_text: 'degK', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #10 example' do + let(:exp) { 'unitsml(prime)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("prime"), + Unitsml::Unit.new('prime') ], - norm_text: "prime", - orig_text: "prime", - root: true, + norm_text: 'prime', + orig_text: 'prime', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #11 example' do + let(:exp) { 'unitsml(rad)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("rad"), + Unitsml::Unit.new('rad') ], - norm_text: "rad", - orig_text: "rad", - root: true, + norm_text: 'rad', + orig_text: 'rad', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #12 example' do + let(:exp) { 'unitsml(Hz)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("Hz"), + Unitsml::Unit.new('Hz') ], - norm_text: "Hz", - orig_text: "Hz", - root: true, + norm_text: 'Hz', + orig_text: 'Hz', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #13 example' do + let(:exp) { 'unitsml(kg)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("g", prefix: Unitsml::Prefix.new("k")), + Unitsml::Unit.new('g', prefix: Unitsml::Prefix.new('k')) ], - norm_text: "kg", - orig_text: "kg", - root: true, + norm_text: 'kg', + orig_text: 'kg', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #14 example' do + let(:exp) { 'unitsml(m)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("m"), + Unitsml::Unit.new('m') ], - norm_text: "m", - orig_text: "m", - root: true, + norm_text: 'm', + orig_text: 'm', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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))" } + context 'contains Unitsml #15 example' do + let(:exp) { 'unitsml(sqrt(Hz))' } let(:expected_value) do Unitsml::Formula.new( [ Unitsml::Sqrt.new( Unitsml::Unit.new( - "Hz", - Unitsml::Number.new("0.5"), - ), - ), + 'Hz', + Unitsml::Number.new('0.5') + ) + ) ], - norm_text: "sqrt(Hz)", - orig_text: "sqrt(Hz)", - root: true, + norm_text: 'sqrt(Hz)', + orig_text: 'sqrt(Hz)', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #16 example' do + let(:exp) { 'unitsml(g)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("g"), + Unitsml::Unit.new('g') ], - norm_text: "g", - orig_text: "g", - root: true, + norm_text: 'g', + orig_text: 'g', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #17 example' do + let(:exp) { 'unitsml(hp)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("hp"), + Unitsml::Unit.new('hp') ], - norm_text: "hp", - orig_text: "hp", - root: true, + norm_text: 'hp', + orig_text: 'hp', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #18 example' do + let(:exp) { 'unitsml(kg*s^-2)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("g", prefix: Unitsml::Prefix.new("k")), - Unitsml::Extender.new("*"), + Unitsml::Unit.new('g', prefix: Unitsml::Prefix.new('k')), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "s", - Unitsml::Number.new("-2"), - ), + 's', + Unitsml::Number.new('-2') + ) ], - norm_text: "kg*s^-2", - orig_text: "kg*s^-2", - root: true, + norm_text: 'kg*s^-2', + orig_text: 'kg*s^-2', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #19 example' do + let(:exp) { 'unitsml(mbar)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("bar", prefix: Unitsml::Prefix.new("m")) + Unitsml::Unit.new('bar', prefix: Unitsml::Prefix.new('m')) ], - norm_text: "mbar", - orig_text: "mbar", - root: true, + norm_text: 'mbar', + orig_text: 'mbar', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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-)" } + context 'contains Unitsml #20 example' do + let(:exp) { 'unitsml(p-)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Prefix.new("p", true) + Unitsml::Prefix.new('p', true) ], - norm_text: "p-", - orig_text: "p-", - root: true, + norm_text: 'p-', + orig_text: 'p-', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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-)" } + context 'contains Unitsml #21 example' do + let(:exp) { 'unitsml(h-)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Prefix.new("h", true) + Unitsml::Prefix.new('h', true) ], - norm_text: "h-", - orig_text: "h-", - root: true, + norm_text: 'h-', + orig_text: 'h-', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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-)" } + context 'contains Unitsml #22 example' do + let(:exp) { 'unitsml(da-)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Prefix.new("da", true) + Unitsml::Prefix.new('da', true) ], - norm_text: "da-", - orig_text: "da-", - root: true, + norm_text: 'da-', + orig_text: 'da-', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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-)" } + context 'contains Unitsml #23 example' do + let(:exp) { 'unitsml(u-)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Prefix.new("u", true) + Unitsml::Prefix.new('u', true) ], - norm_text: "u-", - orig_text: "u-", - root: true, + norm_text: 'u-', + orig_text: 'u-', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #24 example' do + let(:exp) { 'unitsml(A*C^3)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("A"), - Unitsml::Extender.new("*"), + Unitsml::Unit.new('A'), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "C", - Unitsml::Number.new("3"), - ), + 'C', + Unitsml::Number.new('3') + ) ], - norm_text: "A*C^3", - orig_text: "A*C^3", - root: true, + norm_text: 'A*C^3', + orig_text: 'A*C^3', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #25 example' do + let(:exp) { 'unitsml(A/C^-3)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("A"), - Unitsml::Extender.new("/"), + Unitsml::Unit.new('A'), + Unitsml::Extender.new('/'), Unitsml::Unit.new( - "C", - Unitsml::Number.new("3"), - ), + 'C', + Unitsml::Number.new('3') + ) ], - norm_text: "A/C^-3", - orig_text: "A/C^-3", - root: true, + norm_text: 'A/C^-3', + orig_text: 'A/C^-3', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #26 example' do + let(:exp) { 'unitsml(J/kg*K)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("J"), - Unitsml::Extender.new("/"), + Unitsml::Unit.new('J'), + Unitsml::Extender.new('/'), Unitsml::Formula.new([ - Unitsml::Unit.new( - "g", - Unitsml::Number.new("-1"), - prefix: Unitsml::Prefix.new("k"), - ), - Unitsml::Extender.new("*"), - Unitsml::Unit.new( - "K", - Unitsml::Number.new("-1"), - ), - ]) + Unitsml::Unit.new( + 'g', + Unitsml::Number.new('-1'), + prefix: Unitsml::Prefix.new('k') + ), + Unitsml::Extender.new('*'), + Unitsml::Unit.new( + 'K', + Unitsml::Number.new('-1') + ) + ]) ], - norm_text: "J/kg*K", - orig_text: "J/kg*K", - root: true, + norm_text: 'J/kg*K', + orig_text: 'J/kg*K', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #27 example' do + let(:exp) { 'unitsml(kg^-2)' } let(:expected_value) do Unitsml::Formula.new( [ Unitsml::Unit.new( - "g", - Unitsml::Number.new("-2"), - prefix: Unitsml::Prefix.new("k"), - ), + 'g', + Unitsml::Number.new('-2'), + prefix: Unitsml::Prefix.new('k') + ) ], - norm_text: "kg^-2", - orig_text: "kg^-2", - root: true, + norm_text: 'kg^-2', + orig_text: 'kg^-2', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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))" } + context 'contains Unitsml #28 example' do + let(:exp) { 'unitsml(mW*cm^(-2))' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("W", prefix: Unitsml::Prefix.new("m")), - Unitsml::Extender.new("*"), + Unitsml::Unit.new('W', prefix: Unitsml::Prefix.new('m')), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "m", - Unitsml::Number.new("-2"), - prefix: Unitsml::Prefix.new("c"), - ), + 'm', + Unitsml::Number.new('-2'), + prefix: Unitsml::Prefix.new('c') + ) ], - norm_text: "mW*cm(-2)", - orig_text: "mW*cm(-2)", - root: true, + norm_text: 'mW*cm(-2)', + orig_text: 'mW*cm(-2)', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #29 example' do + let(:exp) { 'unitsml(dim_Theta*dim_L^2)' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Dimension.new("dim_Theta"), - Unitsml::Extender.new("*"), + Unitsml::Dimension.new('dim_Theta'), + Unitsml::Extender.new('*'), Unitsml::Dimension.new( - "dim_L", - Unitsml::Number.new("2"), - ), + 'dim_L', + Unitsml::Number.new('2') + ) ], - norm_text: "dim_Theta*dim_L^2", - orig_text: "dim_Theta*dim_L^2", - root: true, + norm_text: 'dim_Theta*dim_L^2', + orig_text: 'dim_Theta*dim_L^2', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #30 example' do + let(:exp) { 'unitsml(dim_Theta^10*dim_L^2)' } let(:expected_value) do Unitsml::Formula.new( [ Unitsml::Dimension.new( - "dim_Theta", - Unitsml::Number.new("10"), + 'dim_Theta', + Unitsml::Number.new('10') ), - Unitsml::Extender.new("*"), + Unitsml::Extender.new('*'), Unitsml::Dimension.new( - "dim_L", - Unitsml::Number.new("2"), - ), + 'dim_L', + Unitsml::Number.new('2') + ) ], - norm_text: "dim_Theta^10*dim_L^2", - orig_text: "dim_Theta^10*dim_L^2", - root: true, + norm_text: 'dim_Theta^10*dim_L^2', + orig_text: 'dim_Theta^10*dim_L^2', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #31 example' do + let(:exp) { 'unitsml(Hz^10*darcy^-100)' } let(:expected_value) do Unitsml::Formula.new( [ Unitsml::Unit.new( - "Hz", - Unitsml::Number.new("10"), + 'Hz', + Unitsml::Number.new('10') ), - Unitsml::Extender.new("*"), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "darcy", - Unitsml::Number.new("-100"), - ), + 'darcy', + Unitsml::Number.new('-100') + ) ], - norm_text: "Hz^10*darcy^-100", - orig_text: "Hz^10*darcy^-100", - root: true, + norm_text: 'Hz^10*darcy^-100', + orig_text: 'Hz^10*darcy^-100', + root: true ) end - it "returns parslet tree of parsed Unitsml string" do + 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))" } + context 'contains Unitsml #32 example from metanorma/bipm-si-brochure#245' do + let(:exp) { 'unitsml(W*m^(−2))' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("W"), - Unitsml::Extender.new("*"), + Unitsml::Unit.new('W'), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "m", - Unitsml::Number.new("-2"), - ), + 'm', + Unitsml::Number.new('-2') + ) ], - norm_text: "W*m^(-2)", - orig_text: "W*m^(-2)", - root: true, + norm_text: 'W*m^(-2)', + orig_text: 'W*m^(-2)', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)))" } + context 'contains Unitsml #33 example' do + let(:exp) { 'unitsml(((mm*mm)))' } let(:expected_value) do Unitsml::Formula.new( [ Unitsml::Fenced.new( - "(", + '(', Unitsml::Formula.new([ - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), - Unitsml::Extender.new("*"), - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), - ]), - ")", - ), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')), + Unitsml::Extender.new('*'), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')) + ]), + ')' + ) ], - norm_text: "((mm*mm))", - orig_text: "((mm*mm))", - root: true, + norm_text: '((mm*mm))', + orig_text: '((mm*mm))', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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" } + context 'contains Unitsml #34 example' do + let(:exp) { '((mm*mm))*mm' } let(:expected_value) do Unitsml::Formula.new( [ Unitsml::Fenced.new( - "(", + '(', Unitsml::Formula.new([ - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), - Unitsml::Extender.new("*"), - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), - ]), - ")", + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')), + Unitsml::Extender.new('*'), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')) + ]), + ')' ), - Unitsml::Extender.new("*"), - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), + Unitsml::Extender.new('*'), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')) ], - norm_text: "((mm*mm))*mm", - orig_text: "((mm*mm))*mm", - root: true, + norm_text: '((mm*mm))*mm', + orig_text: '((mm*mm))*mm', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)))" } + context 'contains Unitsml #35 example' do + let(:exp) { '(mm*mm)*(((mm*m)))' } let(:expected_value) do Unitsml::Formula.new( [ Unitsml::Formula.new([ - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), - Unitsml::Extender.new("*"), - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), - ]), - Unitsml::Extender.new("*"), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')), + Unitsml::Extender.new('*'), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')) + ]), + Unitsml::Extender.new('*'), Unitsml::Fenced.new( - "(", + '(', Unitsml::Formula.new( [ - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), - Unitsml::Extender.new("*"), - Unitsml::Unit.new("m"), + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')), + Unitsml::Extender.new('*'), + Unitsml::Unit.new('m') ] ), - ")", - ), + ')' + ) ], - norm_text: "(mm*mm)*(mm*m)", - orig_text: "(mm*mm)*(mm*m)", - root: true, + norm_text: '(mm*mm)*(mm*m)', + orig_text: '(mm*mm)*(mm*m)', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #36 example' do + let(:exp) { '((dim_Theta))*dim_N*(dim_J*dim_Theta)' } let(:expected_value) do Unitsml::Formula.new( [ Unitsml::Fenced.new( - "(", - Unitsml::Dimension.new("dim_Theta"), - ")", + '(', + Unitsml::Dimension.new('dim_Theta'), + ')' ), - Unitsml::Extender.new("*"), + Unitsml::Extender.new('*'), Unitsml::Formula.new([ - Unitsml::Dimension.new("dim_N"), - Unitsml::Extender.new("*"), - Unitsml::Formula.new([ - Unitsml::Dimension.new("dim_J"), - Unitsml::Extender.new("*"), - Unitsml::Dimension.new("dim_Theta"), - ]), - ]) + Unitsml::Dimension.new('dim_N'), + Unitsml::Extender.new('*'), + Unitsml::Formula.new([ + Unitsml::Dimension.new('dim_J'), + Unitsml::Extender.new('*'), + Unitsml::Dimension.new('dim_Theta') + ]) + ]) ], - norm_text: "((dim_Theta))*dim_N*(dim_J*dim_Theta)", - orig_text: "((dim_Theta))*dim_N*(dim_J*dim_Theta)", - root: true, + norm_text: '((dim_Theta))*dim_N*(dim_J*dim_Theta)', + orig_text: '((dim_Theta))*dim_N*(dim_J*dim_Theta)', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)" } + context 'contains Unitsml #37 example' do + let(:exp) { '((dim_Theta^12))*dim_N^12*(dim_J^10*dim_Theta^10)' } let(:expected_value) do Unitsml::Formula.new( [ Unitsml::Fenced.new( - "(", + '(', Unitsml::Dimension.new( - "dim_Theta", - Unitsml::Number.new("12"), + 'dim_Theta', + Unitsml::Number.new('12') ), - ")", + ')' ), - Unitsml::Extender.new("*"), + Unitsml::Extender.new('*'), Unitsml::Formula.new([ - Unitsml::Dimension.new( - "dim_N", - Unitsml::Number.new("12"), - ), - Unitsml::Extender.new("*"), - Unitsml::Formula.new([ - Unitsml::Dimension.new( - "dim_J", - Unitsml::Number.new("10"), - ), - Unitsml::Extender.new("*"), - Unitsml::Dimension.new( - "dim_Theta", - Unitsml::Number.new("10"), - ), - ]), - ]) + Unitsml::Dimension.new( + 'dim_N', + Unitsml::Number.new('12') + ), + Unitsml::Extender.new('*'), + Unitsml::Formula.new([ + Unitsml::Dimension.new( + 'dim_J', + Unitsml::Number.new('10') + ), + Unitsml::Extender.new('*'), + Unitsml::Dimension.new( + 'dim_Theta', + Unitsml::Number.new('10') + ) + ]) + ]) ], - norm_text: "((dim_Theta^12))*dim_N^12*(dim_J^10*dim_Theta^10)", - orig_text: "((dim_Theta^12))*dim_N^12*(dim_J^10*dim_Theta^10)", - root: true, + norm_text: '((dim_Theta^12))*dim_N^12*(dim_J^10*dim_Theta^10)', + 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 + 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)))" } + context 'contains Unitsml #38 example from unitsml/unitsml-ruby#43' do + let(:exp) { 'unitsml(J/((A*m)))' } let(:expected_value) do Unitsml::Formula.new( [ - Unitsml::Unit.new("J"), - Unitsml::Extender.new("/"), + Unitsml::Unit.new('J'), + Unitsml::Extender.new('/'), Unitsml::Fenced.new( - "(", + '(', Unitsml::Formula.new([ - Unitsml::Unit.new( - "A", - Unitsml::Number.new("-1"), - ), - Unitsml::Extender.new("*"), - Unitsml::Unit.new( - "m", - Unitsml::Number.new("-1"), - ), - ]), - ")", - ), + Unitsml::Unit.new( + 'A', + Unitsml::Number.new('-1') + ), + Unitsml::Extender.new('*'), + Unitsml::Unit.new( + 'm', + Unitsml::Number.new('-1') + ) + ]), + ')' + ) ], - norm_text: "J/((A*m))", - orig_text: "J/((A*m))", - root: true, + norm_text: 'J/((A*m))', + orig_text: 'J/((A*m))', + root: true ) end - it "matches Unitsml::Formula of processed Unitsml string" do + 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))" } + 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::Unit.new('J'), Unitsml::Fenced.new( - "(", + '(', Unitsml::Formula.new( [ Unitsml::Unit.new( - "g", - prefix: Unitsml::Prefix.new("k"), + 'g', + prefix: Unitsml::Prefix.new('k') ), - Unitsml::Extender.new("*"), - Unitsml::Unit.new("K"), - ], + Unitsml::Extender.new('*'), + Unitsml::Unit.new('K') + ] ), - ")", + ')' ) ], - norm_text: "J(kg*K)", - orig_text: "J(kg*K)", - root: true, + norm_text: 'J(kg*K)', + orig_text: 'J(kg*K)', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)" } + 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('J'), + Unitsml::Extender.new(' '), Unitsml::Unit.new( - "g", - Unitsml::Number.new("-1"), - prefix: Unitsml::Prefix.new("k"), - ), - ], + 'g', + Unitsml::Number.new('-1'), + prefix: Unitsml::Prefix.new('k') + ) + ] ), - Unitsml::Extender.new("*"), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "K", - Unitsml::Number.new("-1"), - ), + 'K', + Unitsml::Number.new('-1') + ) ], - norm_text: "J kg^-1 * K^-1", - orig_text: "J kg^-1 * K^-1", - root: true, + 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 + 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)" } + 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::Unit.new('J'), + Unitsml::Extender.new('/'), Unitsml::Formula.new( [ Unitsml::Unit.new( - "mol", - Unitsml::Number.new("-1"), + 'mol', + Unitsml::Number.new('-1') ), - Unitsml::Extender.new("*"), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "K", - Unitsml::Number.new("-1"), - ), - ], - ), + 'K', + Unitsml::Number.new('-1') + ) + ] + ) ], - norm_text: "J/mol * K", - orig_text: "J/mol * K", - root: true, + norm_text: 'J/mol * K', + orig_text: 'J/mol * K', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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))" } + 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::Unit.new('J'), + Unitsml::Extender.new('/'), Unitsml::Formula.new( [ Unitsml::Unit.new( - "mol", - Unitsml::Number.new("-1"), + 'mol', + Unitsml::Number.new('-1') ), - Unitsml::Extender.new("*"), + Unitsml::Extender.new('*'), Unitsml::Unit.new( - "K", - Unitsml::Number.new("-1"), - ), - ], - ), + 'K', + Unitsml::Number.new('-1') + ) + ] + ) ], - norm_text: "J/(mol * K)", - orig_text: "J/(mol * K)", - root: true, + norm_text: 'J/(mol * K)', + orig_text: 'J/(mol * K)', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)" } + 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('mol'), + Unitsml::Extender.new('*'), + Unitsml::Unit.new('K') + ] ), - ")", + ')' ), - Unitsml::Unit.new("J"), + Unitsml::Unit.new('J') ], - norm_text: "(mol * K)J", - orig_text: "(mol * K)J", - root: true, + norm_text: '(mol * K)J', + orig_text: '(mol * K)J', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)" } + 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('mol'), + Unitsml::Extender.new('*'), + Unitsml::Unit.new('K') + ] ), - ")", + ')' ), - Unitsml::Unit.new("J"), + Unitsml::Unit.new('J') ], - norm_text: "(mol * K) J", - orig_text: "(mol * K) J", - root: true, + norm_text: '(mol * K) J', + orig_text: '(mol * K) J', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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))" } + 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::Unit.new('mol'), + Unitsml::Extender.new('*'), + Unitsml::Unit.new('K') + ] ), - ")", + ')' ), Unitsml::Fenced.new( - "(", - Unitsml::Unit.new("J"), - ")", + '(', + Unitsml::Unit.new('J'), + ')' ) ], - orig_text: "(mol * K)(J)", - norm_text: "(mol * K)(J)", - root: true, + orig_text: '(mol * K)(J)', + norm_text: '(mol * K)(J)', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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))" } + 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::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"), - ], + 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, + orig_text: '(mol * K)(J*K)', + norm_text: '(mol * K)(J*K)', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)" } + 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::Unit.new('E_erlang'), Unitsml::Fenced.new( - "(", - Unitsml::Unit.new("m", prefix: Unitsml::Prefix.new("m")), - ")", - ), - ], + '(', + Unitsml::Unit.new('m', prefix: Unitsml::Prefix.new('m')), + ')' + ) + ] ), - Unitsml::Extender.new("*"), - Unitsml::Unit.new("g", prefix: Unitsml::Prefix.new("k")), + 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, + orig_text: 'E_erlang(mm)*kg', + norm_text: 'E_erlang(mm)*kg', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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))" } + 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::Dimension.new('dim_Theta'), Unitsml::Fenced.new( - "(", - Unitsml::Dimension.new("dim_phi"), - ")", - ), + '(', + Unitsml::Dimension.new('dim_phi'), + ')' + ) ], - orig_text: "dim_Theta(dim_phi)", - norm_text: "dim_Theta(dim_phi)", - root: true, + orig_text: 'dim_Theta(dim_phi)', + norm_text: 'dim_Theta(dim_phi)', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)" } + 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_Theta'), + ')' ), - Unitsml::Dimension.new("dim_L"), + Unitsml::Dimension.new('dim_L') ], - orig_text: "dim_Theta(dim_L)", - norm_text: "dim_Theta(dim_L)", - root: true, + orig_text: 'dim_Theta(dim_L)', + norm_text: 'dim_Theta(dim_L)', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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)" } + 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"), + 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, + orig_text: 'dim_Theta dim_L', + norm_text: 'dim_Theta dim_L', + root: true ) end - it "returns Unitsml::Formula of parsed Unitsml string" do + 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))" } + 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::Dimension.new('dim_phi'), Unitsml::Fenced.new( - "(", + '(', Unitsml::Formula.new( [ - Unitsml::Dimension.new("dim_Theta"), - Unitsml::Extender.new(" "), - Unitsml::Dimension.new("dim_L"), - ], + 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, + 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 + 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))" } + 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::Dimension.new('dim_phi'), Unitsml::Fenced.new( - "(", - Unitsml::Dimension.new("dim_I"), - ")", - ), - ], + '(', + Unitsml::Dimension.new('dim_I'), + ')' + ) + ] ), - ")", + ')' ), Unitsml::Fenced.new( - "(", + '(', Unitsml::Formula.new( [ Unitsml::Fenced.new( - "(", - Unitsml::Dimension.new("dim_Theta"), - ")", + '(', + Unitsml::Dimension.new('dim_Theta'), + ')' ), - Unitsml::Dimension.new("dim_L"), - ], + 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, + 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 + 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))" } + 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::Dimension.new('dim_phi'), Unitsml::Fenced.new( - "(", - Unitsml::Dimension.new("dim_I"), - ")", - ), - ], - ), + '(', + Unitsml::Dimension.new('dim_I'), + ')' + ) + ] + ) ), Unitsml::Fenced.new( - "(", + '(', Unitsml::Formula.new( [ Unitsml::Fenced.new( - "(", - Unitsml::Dimension.new("dim_Theta"), - ")", + '(', + Unitsml::Dimension.new('dim_Theta'), + ')' ), - Unitsml::Dimension.new("dim_L"), - ], + 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, + 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 + it 'returns Unitsml::Formula of parsed Unitsml string' do expect(formula).to eq(expected_value) end end diff --git a/spec/unitsml_spec.rb b/spec/unitsml_spec.rb index 77fb592..aae9e7f 100644 --- a/spec/unitsml_spec.rb +++ b/spec/unitsml_spec.rb @@ -1,5 +1,7 @@ +# frozen_string_literal: true + RSpec.describe Unitsml do - it "has a version number" do + it 'has a version number' do expect(Unitsml::VERSION).not_to be nil end end diff --git a/unitsdb b/unitsdb index af28b69..94d9e13 160000 --- a/unitsdb +++ b/unitsdb @@ -1 +1 @@ -Subproject commit af28b69a7e7579cc4d65062b5f54cd94b0499eca +Subproject commit 94d9e13f663c0883e3fa973a52afdb4b55e4a0ea diff --git a/unitsml.gemspec b/unitsml.gemspec index 856f593..2961fdc 100644 --- a/unitsml.gemspec +++ b/unitsml.gemspec @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require_relative 'lib/unitsml/version' Gem::Specification.new do |spec| @@ -28,8 +30,8 @@ Gem::Specification.new do |spec| spec.require_paths = ['lib', 'unitsdb/**/*.yaml'] spec.add_dependency 'htmlentities' + spec.add_dependency 'lutaml-model', '~> 0.8.0' spec.add_dependency 'mml' spec.add_dependency 'parslet' spec.add_dependency 'unitsdb', '~> 2.0' - spec.add_dependency 'lutaml-model', '~> 0.7.6' end