unitwise 0.1.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 +7 -0
- data/.gitignore +17 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +110 -0
- data/Rakefile +21 -0
- data/data/base_unit.yaml +43 -0
- data/data/derived_unit.yaml +3394 -0
- data/data/prefix.yaml +121 -0
- data/lib/unitwise.rb +25 -0
- data/lib/unitwise/atom.rb +84 -0
- data/lib/unitwise/base.rb +45 -0
- data/lib/unitwise/composable.rb +25 -0
- data/lib/unitwise/errors.rb +7 -0
- data/lib/unitwise/expression.rb +25 -0
- data/lib/unitwise/expression/composer.rb +41 -0
- data/lib/unitwise/expression/decomposer.rb +42 -0
- data/lib/unitwise/expression/matcher.rb +41 -0
- data/lib/unitwise/expression/parser.rb +53 -0
- data/lib/unitwise/expression/transformer.rb +22 -0
- data/lib/unitwise/ext.rb +2 -0
- data/lib/unitwise/ext/numeric.rb +13 -0
- data/lib/unitwise/ext/string.rb +5 -0
- data/lib/unitwise/function.rb +51 -0
- data/lib/unitwise/functional.rb +21 -0
- data/lib/unitwise/measurement.rb +89 -0
- data/lib/unitwise/prefix.rb +17 -0
- data/lib/unitwise/scale.rb +61 -0
- data/lib/unitwise/standard.rb +26 -0
- data/lib/unitwise/standard/base.rb +73 -0
- data/lib/unitwise/standard/base_unit.rb +21 -0
- data/lib/unitwise/standard/derived_unit.rb +49 -0
- data/lib/unitwise/standard/extras.rb +17 -0
- data/lib/unitwise/standard/function.rb +35 -0
- data/lib/unitwise/standard/prefix.rb +17 -0
- data/lib/unitwise/standard/scale.rb +25 -0
- data/lib/unitwise/term.rb +106 -0
- data/lib/unitwise/unit.rb +89 -0
- data/lib/unitwise/version.rb +3 -0
- data/test/test_helper.rb +7 -0
- data/test/unitwise/atom_test.rb +122 -0
- data/test/unitwise/base_test.rb +6 -0
- data/test/unitwise/expression/decomposer_test.rb +36 -0
- data/test/unitwise/expression/matcher_test.rb +42 -0
- data/test/unitwise/expression/parser_test.rb +91 -0
- data/test/unitwise/ext/numeric_test.rb +46 -0
- data/test/unitwise/ext/string_test.rb +13 -0
- data/test/unitwise/function_test.rb +42 -0
- data/test/unitwise/measurement_test.rb +168 -0
- data/test/unitwise/prefix_test.rb +25 -0
- data/test/unitwise/term_test.rb +44 -0
- data/test/unitwise/unit_test.rb +57 -0
- data/test/unitwise_test.rb +7 -0
- data/unitwise.gemspec +28 -0
- metadata +213 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Unitwise::Prefix do
|
4
|
+
subject { Unitwise::Prefix }
|
5
|
+
let(:m) { Unitwise::Prefix.find('m')}
|
6
|
+
describe "::data" do
|
7
|
+
it "should be an Array" do
|
8
|
+
subject.data.must_be_instance_of Array
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "::all" do
|
13
|
+
it "should be an array of prefixes" do
|
14
|
+
subject.all.must_be_instance_of Array
|
15
|
+
subject.all.sample.must_be_instance_of Unitwise::Prefix
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#scalar" do
|
20
|
+
it "should be a number" do
|
21
|
+
m.scalar.must_equal 0.001
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Unitwise::Term do
|
4
|
+
describe "instance" do
|
5
|
+
subject { Unitwise::Term.new(atom_code: 'J', prefix_code: 'k')}
|
6
|
+
describe "#atom" do
|
7
|
+
it "should be an atom" do
|
8
|
+
subject.atom.must_be_instance_of Unitwise::Atom
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#prefix" do
|
13
|
+
it "should be a prefix" do
|
14
|
+
subject.prefix.must_be_instance_of Unitwise::Prefix
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#exponent" do
|
19
|
+
it "should be an integer" do
|
20
|
+
subject.exponent.must_equal 1
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#root_terms" do
|
25
|
+
it "should be an array of terms" do
|
26
|
+
subject.root_terms.must_be_kind_of Array
|
27
|
+
subject.root_terms.sample.must_be_instance_of Unitwise::Term
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#composition" do
|
32
|
+
it "should be a Multiset" do
|
33
|
+
subject.composition.must_be_instance_of SignedMultiset
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#scale" do
|
38
|
+
it "should return value relative to terminal atoms" do
|
39
|
+
subject.scalar.must_equal 1000000.0
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Unitwise::Unit do
|
4
|
+
|
5
|
+
let(:ms2) { Unitwise::Unit.new("m/s2") }
|
6
|
+
let(:kg) { Unitwise::Unit.new("kg") }
|
7
|
+
let(:psi) { Unitwise::Unit.new("[psi]")}
|
8
|
+
let(:deg) { Unitwise::Unit.new("deg")}
|
9
|
+
|
10
|
+
|
11
|
+
describe "#terms" do
|
12
|
+
it "must be a collection of terms" do
|
13
|
+
ms2.must_respond_to :terms
|
14
|
+
ms2.terms.must_be_kind_of Enumerable
|
15
|
+
ms2.terms.sample.must_be_instance_of Unitwise::Term
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#root_terms" do
|
20
|
+
it "must be an array of Terms" do
|
21
|
+
ms2.must_respond_to :terms
|
22
|
+
ms2.root_terms.must_be_kind_of Array
|
23
|
+
ms2.root_terms.sample.must_be_instance_of Unitwise::Term
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#scalar" do
|
28
|
+
it "must return value relative to terminal atoms" do
|
29
|
+
ms2.must_respond_to :scalar
|
30
|
+
ms2.scalar.must_equal 1
|
31
|
+
psi.scalar.must_equal 6894757.293168359
|
32
|
+
deg.scalar.must_equal 0.017453292519943295
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#composition" do
|
37
|
+
it "must be a multiset" do
|
38
|
+
ms2.must_respond_to :terms
|
39
|
+
ms2.composition.must_be_instance_of SignedMultiset
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#*" do
|
44
|
+
it "should multiply units" do
|
45
|
+
mult = kg * ms2
|
46
|
+
mult.expression.to_s.must_equal "kg.m/s2"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#/" do
|
51
|
+
it "should divide units" do
|
52
|
+
div = kg / ms2
|
53
|
+
div.expression.to_s.must_equal "kg.s2/m"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
data/unitwise.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'unitwise/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "unitwise"
|
8
|
+
gem.version = Unitwise::VERSION
|
9
|
+
gem.authors = ["Josh Lewis"]
|
10
|
+
gem.email = ["josh.w.lewis@gmail.com"]
|
11
|
+
gem.description = %q{Ruby implementation of the Unified Code for Units of Measure (UCUM)}
|
12
|
+
gem.summary = %q{Unitwise is a library for performing mathematical operations and conversions on all units defined by the Unified Code for Units of Measure(UCUM).}
|
13
|
+
gem.homepage = "http://github.com/joshwlewis/unitwise"
|
14
|
+
gem.license = "MIT"
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split($/)
|
17
|
+
gem.test_files = gem.files.grep(%r{^test/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency "signed_multiset"
|
21
|
+
gem.add_dependency "parslet"
|
22
|
+
|
23
|
+
gem.add_development_dependency "minitest"
|
24
|
+
gem.add_development_dependency "rake"
|
25
|
+
gem.add_development_dependency "nori"
|
26
|
+
gem.add_development_dependency "nokogiri"
|
27
|
+
gem.add_development_dependency "coveralls"
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,213 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: unitwise
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Josh Lewis
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: signed_multiset
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: parslet
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: nori
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: nokogiri
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Ruby implementation of the Unified Code for Units of Measure (UCUM)
|
112
|
+
email:
|
113
|
+
- josh.w.lewis@gmail.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- .gitignore
|
119
|
+
- .ruby-version
|
120
|
+
- .travis.yml
|
121
|
+
- Gemfile
|
122
|
+
- LICENSE.txt
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- data/base_unit.yaml
|
126
|
+
- data/derived_unit.yaml
|
127
|
+
- data/prefix.yaml
|
128
|
+
- lib/unitwise.rb
|
129
|
+
- lib/unitwise/atom.rb
|
130
|
+
- lib/unitwise/base.rb
|
131
|
+
- lib/unitwise/composable.rb
|
132
|
+
- lib/unitwise/errors.rb
|
133
|
+
- lib/unitwise/expression.rb
|
134
|
+
- lib/unitwise/expression/composer.rb
|
135
|
+
- lib/unitwise/expression/decomposer.rb
|
136
|
+
- lib/unitwise/expression/matcher.rb
|
137
|
+
- lib/unitwise/expression/parser.rb
|
138
|
+
- lib/unitwise/expression/transformer.rb
|
139
|
+
- lib/unitwise/ext.rb
|
140
|
+
- lib/unitwise/ext/numeric.rb
|
141
|
+
- lib/unitwise/ext/string.rb
|
142
|
+
- lib/unitwise/function.rb
|
143
|
+
- lib/unitwise/functional.rb
|
144
|
+
- lib/unitwise/measurement.rb
|
145
|
+
- lib/unitwise/prefix.rb
|
146
|
+
- lib/unitwise/scale.rb
|
147
|
+
- lib/unitwise/standard.rb
|
148
|
+
- lib/unitwise/standard/base.rb
|
149
|
+
- lib/unitwise/standard/base_unit.rb
|
150
|
+
- lib/unitwise/standard/derived_unit.rb
|
151
|
+
- lib/unitwise/standard/extras.rb
|
152
|
+
- lib/unitwise/standard/function.rb
|
153
|
+
- lib/unitwise/standard/prefix.rb
|
154
|
+
- lib/unitwise/standard/scale.rb
|
155
|
+
- lib/unitwise/term.rb
|
156
|
+
- lib/unitwise/unit.rb
|
157
|
+
- lib/unitwise/version.rb
|
158
|
+
- test/test_helper.rb
|
159
|
+
- test/unitwise/atom_test.rb
|
160
|
+
- test/unitwise/base_test.rb
|
161
|
+
- test/unitwise/expression/decomposer_test.rb
|
162
|
+
- test/unitwise/expression/matcher_test.rb
|
163
|
+
- test/unitwise/expression/parser_test.rb
|
164
|
+
- test/unitwise/ext/numeric_test.rb
|
165
|
+
- test/unitwise/ext/string_test.rb
|
166
|
+
- test/unitwise/function_test.rb
|
167
|
+
- test/unitwise/measurement_test.rb
|
168
|
+
- test/unitwise/prefix_test.rb
|
169
|
+
- test/unitwise/term_test.rb
|
170
|
+
- test/unitwise/unit_test.rb
|
171
|
+
- test/unitwise_test.rb
|
172
|
+
- unitwise.gemspec
|
173
|
+
homepage: http://github.com/joshwlewis/unitwise
|
174
|
+
licenses:
|
175
|
+
- MIT
|
176
|
+
metadata: {}
|
177
|
+
post_install_message:
|
178
|
+
rdoc_options: []
|
179
|
+
require_paths:
|
180
|
+
- lib
|
181
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - '>='
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0'
|
186
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
188
|
+
- - '>='
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: '0'
|
191
|
+
requirements: []
|
192
|
+
rubyforge_project:
|
193
|
+
rubygems_version: 2.0.2
|
194
|
+
signing_key:
|
195
|
+
specification_version: 4
|
196
|
+
summary: Unitwise is a library for performing mathematical operations and conversions
|
197
|
+
on all units defined by the Unified Code for Units of Measure(UCUM).
|
198
|
+
test_files:
|
199
|
+
- test/test_helper.rb
|
200
|
+
- test/unitwise/atom_test.rb
|
201
|
+
- test/unitwise/base_test.rb
|
202
|
+
- test/unitwise/expression/decomposer_test.rb
|
203
|
+
- test/unitwise/expression/matcher_test.rb
|
204
|
+
- test/unitwise/expression/parser_test.rb
|
205
|
+
- test/unitwise/ext/numeric_test.rb
|
206
|
+
- test/unitwise/ext/string_test.rb
|
207
|
+
- test/unitwise/function_test.rb
|
208
|
+
- test/unitwise/measurement_test.rb
|
209
|
+
- test/unitwise/prefix_test.rb
|
210
|
+
- test/unitwise/term_test.rb
|
211
|
+
- test/unitwise/unit_test.rb
|
212
|
+
- test/unitwise_test.rb
|
213
|
+
has_rdoc:
|