unitwise 2.0.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +5 -10
- data/CHANGELOG.md +38 -0
- data/Gemfile +1 -5
- data/README.md +33 -4
- data/data/base_unit.yaml +2 -2
- data/data/derived_unit.yaml +359 -321
- data/data/prefix.yaml +25 -25
- data/lib/unitwise/atom.rb +33 -4
- data/lib/unitwise/errors.rb +5 -2
- data/lib/unitwise/expression/decomposer.rb +21 -9
- data/lib/unitwise/expression/matcher.rb +3 -8
- data/lib/unitwise/expression/parser.rb +11 -4
- data/lib/unitwise/functional.rb +8 -0
- data/lib/unitwise/measurement.rb +1 -5
- data/lib/unitwise/number.rb +62 -0
- data/lib/unitwise/prefix.rb +0 -6
- data/lib/unitwise/scale.rb +2 -16
- data/lib/unitwise/standard/function.rb +2 -2
- data/lib/unitwise/standard/prefix.rb +4 -3
- data/lib/unitwise/standard/scale.rb +2 -2
- data/lib/unitwise/term.rb +2 -2
- data/lib/unitwise/unit.rb +3 -3
- data/lib/unitwise/version.rb +1 -1
- data/lib/unitwise.rb +14 -1
- data/test/support/scale_tests.rb +16 -22
- data/test/test_helper.rb +1 -2
- data/test/unitwise/atom_test.rb +38 -2
- data/test/unitwise/expression/matcher_test.rb +3 -3
- data/test/unitwise/functional_test.rb +1 -1
- data/test/unitwise/measurement_test.rb +8 -1
- data/test/unitwise/number_test.rb +52 -0
- data/test/unitwise_test.rb +21 -1
- metadata +6 -3
data/test/unitwise/atom_test.rb
CHANGED
@@ -31,7 +31,7 @@ describe Unitwise::Atom do
|
|
31
31
|
let(:joule) { Unitwise::Atom.find("J")}
|
32
32
|
describe "#scale" do
|
33
33
|
it "must be nil for base atoms" do
|
34
|
-
second.scale.
|
34
|
+
second.scale.must_be_nil
|
35
35
|
end
|
36
36
|
it "sould be a Scale object for derived atoms" do
|
37
37
|
yard.scale.must_be_instance_of Unitwise::Scale
|
@@ -126,4 +126,40 @@ describe Unitwise::Atom do
|
|
126
126
|
second.frozen?.must_equal true
|
127
127
|
end
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
|
+
describe "validate!" do
|
131
|
+
it "returns true for a valid atom" do
|
132
|
+
atom = Unitwise::Atom.new(
|
133
|
+
primary_code: "warp",
|
134
|
+
secondary_code: "[warp]",
|
135
|
+
names: ["Warp", "Warp Factor"],
|
136
|
+
scale: {
|
137
|
+
value: 1,
|
138
|
+
unit_code: "[c]"
|
139
|
+
}
|
140
|
+
)
|
141
|
+
|
142
|
+
atom.validate!.must_equal true
|
143
|
+
end
|
144
|
+
|
145
|
+
it "returns an error for an atom with missing properties" do
|
146
|
+
atom = Unitwise::Atom.new(names: "hot dog")
|
147
|
+
|
148
|
+
assert_raises { atom.validate! }
|
149
|
+
end
|
150
|
+
|
151
|
+
it "returns an error for an atom that doesn't resolve" do
|
152
|
+
atom = Unitwise::Atom.new(
|
153
|
+
primary_code: "feels",
|
154
|
+
secondary_code: "FEELS",
|
155
|
+
names: ["feels"],
|
156
|
+
scale: {
|
157
|
+
value: 1,
|
158
|
+
unit_code: "hearts"
|
159
|
+
}
|
160
|
+
)
|
161
|
+
|
162
|
+
assert_raises { atom.validate! }
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
@@ -15,8 +15,8 @@ describe Unitwise::Expression::Matcher do
|
|
15
15
|
it "must be an Alternative list of names" do
|
16
16
|
subject.must_be_instance_of Parslet::Atoms::Alternative
|
17
17
|
end
|
18
|
-
it "must parse '
|
19
|
-
subject.parse('
|
18
|
+
it "must parse 'joule'" do
|
19
|
+
subject.parse('joule').must_equal('joule')
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -39,4 +39,4 @@ describe Unitwise::Expression::Matcher do
|
|
39
39
|
subject.parse('h').must_equal('h')
|
40
40
|
end
|
41
41
|
end
|
42
|
-
end
|
42
|
+
end
|
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
describe Unitwise::Functional do
|
4
4
|
subject { Unitwise::Functional }
|
5
|
-
%w{cel degf hpX hpC tan100 ph ld ln lg 2lg}.each do |function|
|
5
|
+
%w{cel degf degre hpX hpC tan100 ph ld ln lg 2lg}.each do |function|
|
6
6
|
describe function do
|
7
7
|
it 'should convert back and forth' do
|
8
8
|
number = rand(1000) / 1000.0
|
@@ -37,6 +37,13 @@ describe Unitwise::Measurement do
|
|
37
37
|
it "must convert to a unit of another measurement" do
|
38
38
|
mph.convert_to(kmh).value.must_almost_equal(96.56064)
|
39
39
|
end
|
40
|
+
it "must convert to and from another unit without losing precision" do
|
41
|
+
circle = Unitwise::Measurement.new(1, "circle")
|
42
|
+
circle.to_degree.to_circle.must_equal circle
|
43
|
+
|
44
|
+
meter = Unitwise::Measurement.new(10, "meter")
|
45
|
+
meter.to_mile.to_meter.must_equal meter
|
46
|
+
end
|
40
47
|
end
|
41
48
|
|
42
49
|
describe "#*" do
|
@@ -238,4 +245,4 @@ describe Unitwise::Measurement do
|
|
238
245
|
end
|
239
246
|
end
|
240
247
|
|
241
|
-
end
|
248
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Unitwise::Number do
|
4
|
+
describe ".simplify" do
|
5
|
+
it "simplifies to an Integer" do
|
6
|
+
[2, 2.0, BigDecimal.new(2), Rational(2, 1), '2', '2.0'].each do |n|
|
7
|
+
assert_equal Unitwise::Number.simplify(n), 2
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
it "simplifies to a Float" do
|
12
|
+
[2.25, BigDecimal.new('2.25'), Rational(9, 4), '2.25'].each do |n|
|
13
|
+
assert_equal Unitwise::Number.simplify(n), 2.25
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "doesn't simplify complex BigDecimals" do
|
18
|
+
s = "1234567890.0123456789"
|
19
|
+
d = BigDecimal.new(s)
|
20
|
+
[s, d].each do |n|
|
21
|
+
assert_equal Unitwise::Number.simplify(n), d
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it "doesn't simplify complex Rationals" do
|
26
|
+
r = Rational(22, 7)
|
27
|
+
assert_equal Unitwise::Number.simplify(r), r
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe ".coefficify" do
|
32
|
+
it "converts integer values to Integers" do
|
33
|
+
[1, 1.0, "1.0", "1"].each do |n|
|
34
|
+
assert Unitwise::Number.coefficify(n).eql?(1)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it "converts decimal values to BigDecimals" do
|
39
|
+
[1.5, "1.5", "1.50", "0.15e1"].each do |n|
|
40
|
+
assert Unitwise::Number.coefficify(n).eql?(BigDecimal.new("1.5"))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe ".rationalize" do
|
46
|
+
it "coerces numbers to rationals" do
|
47
|
+
[1.5, "1.5", BigDecimal.new("1.5")].each do |n|
|
48
|
+
assert_equal Unitwise::Number.rationalize(n), Rational(3, 2)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/test/unitwise_test.rb
CHANGED
@@ -28,8 +28,28 @@ describe Unitwise do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
describe 'register' do
|
32
|
+
it 'should allow custom units to be registered' do
|
33
|
+
josh = {
|
34
|
+
names: ["Josh W Lewis", "joshwlewis"],
|
35
|
+
symbol: "JWL",
|
36
|
+
primary_code: "jwl",
|
37
|
+
secondary_code: "jwl",
|
38
|
+
scale: {
|
39
|
+
value: 71.875,
|
40
|
+
unit_code: "[in_i]"
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
Unitwise.register(josh)
|
45
|
+
|
46
|
+
joshes = Unitwise(1, 'mile').to_jwl
|
47
|
+
|
48
|
+
joshes.to_i.must_equal(881)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
31
52
|
it "should have a path" do
|
32
53
|
Unitwise.path.must_match(/unitwise$/)
|
33
54
|
end
|
34
|
-
|
35
55
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unitwise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lewis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: liner
|
@@ -167,6 +167,7 @@ files:
|
|
167
167
|
- lib/unitwise/expression/transformer.rb
|
168
168
|
- lib/unitwise/functional.rb
|
169
169
|
- lib/unitwise/measurement.rb
|
170
|
+
- lib/unitwise/number.rb
|
170
171
|
- lib/unitwise/prefix.rb
|
171
172
|
- lib/unitwise/scale.rb
|
172
173
|
- lib/unitwise/search.rb
|
@@ -190,6 +191,7 @@ files:
|
|
190
191
|
- test/unitwise/expression/parser_test.rb
|
191
192
|
- test/unitwise/functional_test.rb
|
192
193
|
- test/unitwise/measurement_test.rb
|
194
|
+
- test/unitwise/number_test.rb
|
193
195
|
- test/unitwise/prefix_test.rb
|
194
196
|
- test/unitwise/scale_test.rb
|
195
197
|
- test/unitwise/search_test.rb
|
@@ -217,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
219
|
version: '0'
|
218
220
|
requirements: []
|
219
221
|
rubyforge_project:
|
220
|
-
rubygems_version: 2.
|
222
|
+
rubygems_version: 2.6.11
|
221
223
|
signing_key:
|
222
224
|
specification_version: 4
|
223
225
|
summary: Convert between and perform mathematical operations on physical quantities
|
@@ -232,6 +234,7 @@ test_files:
|
|
232
234
|
- test/unitwise/expression/parser_test.rb
|
233
235
|
- test/unitwise/functional_test.rb
|
234
236
|
- test/unitwise/measurement_test.rb
|
237
|
+
- test/unitwise/number_test.rb
|
235
238
|
- test/unitwise/prefix_test.rb
|
236
239
|
- test/unitwise/scale_test.rb
|
237
240
|
- test/unitwise/search_test.rb
|