|
| 1 | +# frozen_string_literal: true |
| 2 | +Measured::Temperature = Measured.build do |
| 3 | + unit :C, aliases: [:c, :celsius] |
| 4 | + |
| 5 | + unit :K, value: [ |
| 6 | + { |
| 7 | + conversion: ->(k) { k - BigDecimal('273.15') }, |
| 8 | + reverse_conversion: ->(c) { c + BigDecimal('273.15') }, |
| 9 | + description: 'celsius + 273.15' |
| 10 | + }, 'C'], aliases: [:k, :kelvin] |
| 11 | + |
| 12 | + unit :F, value: [ |
| 13 | + { |
| 14 | + conversion: ->(f) { (f-32) * Rational(5,9) }, |
| 15 | + reverse_conversion: ->(c) { c * Rational(9,5) + 32 }, |
| 16 | + description: '9 * celsius / 5 + 32' |
| 17 | + }, 'C'], aliases: [:f, :farenheit] |
| 18 | +end |
| 19 | + |
| 20 | +require "test_helper" |
| 21 | + |
| 22 | +class Measured::TemperatureTest < ActiveSupport::TestCase |
| 23 | + test ".unit_names should be the list of base unit names" do |
| 24 | + expected_units = %w(C F K) |
| 25 | + assert_equal expected_units.sort, Measured::Temperature.unit_names |
| 26 | + end |
| 27 | + |
| 28 | + test ".name" do |
| 29 | + assert_equal "temperature", Measured::Temperature.name |
| 30 | + end |
| 31 | + |
| 32 | + test "Measured::Temperature() delegates automatically to .new" do |
| 33 | + assert_equal Measured::Temperature.new(1, :C), Measured::Temperature(1, :C) |
| 34 | + end |
| 35 | + |
| 36 | + test ".convert_to from C to K" do |
| 37 | + assert_exact_conversion Measured::Temperature, "0 C", "273.15 K" |
| 38 | + assert_exact_conversion Measured::Temperature, "10 C", "283.15 K" |
| 39 | + end |
| 40 | + |
| 41 | + test ".convert_to from C to F" do |
| 42 | + assert_exact_conversion Measured::Temperature, "45 C", "113 F" |
| 43 | + assert_exact_conversion Measured::Temperature, "0 C", "32 F" |
| 44 | + end |
| 45 | + |
| 46 | + test ".convert_to from F to C" do |
| 47 | + assert_exact_conversion Measured::Temperature, "113 F", "45 C" |
| 48 | + assert_exact_conversion Measured::Temperature, "32 F", "0 C" |
| 49 | + end |
| 50 | + |
| 51 | + test ".convert_to from F to K" do |
| 52 | + assert_exact_conversion Measured::Temperature, "32 F", "273.15 K" |
| 53 | + end |
| 54 | + |
| 55 | + test ".convert_to from K to C" do |
| 56 | + assert_exact_conversion Measured::Temperature, "273.15 K", "0 C" |
| 57 | + assert_exact_conversion Measured::Temperature, "0 K", "-273.15 C" |
| 58 | + end |
| 59 | + |
| 60 | + test ".convert_to from K to F" do |
| 61 | + assert_exact_conversion Measured::Temperature, "0 K", "-459.67 F" |
| 62 | + end |
| 63 | +end |
0 commit comments