auom 0.0.3
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.
- data/.gitignore +3 -0
- data/.rspec +1 -0
- data/.travis.yml +13 -0
- data/Gemfile +10 -0
- data/Gemfile.devtools +52 -0
- data/Guardfile +8 -0
- data/LICENSE +20 -0
- data/README.md +92 -0
- data/Rakefile +5 -0
- data/TODO +3 -0
- data/auom.gemspec +21 -0
- data/config/flay.yml +3 -0
- data/config/flog.yml +2 -0
- data/config/heckle.yml +9 -0
- data/config/roodi.yml +20 -0
- data/config/site.reek +95 -0
- data/config/yardstick.yml +2 -0
- data/lib/auom.rb +287 -0
- data/lib/auom/algebra.rb +129 -0
- data/lib/auom/equalization.rb +90 -0
- data/lib/auom/inspection.rb +103 -0
- data/lib/auom/version.rb +3 -0
- data/spec/rcov.opts +7 -0
- data/spec/shared/command_method_behavior.rb +7 -0
- data/spec/shared/each_method_behaviour.rb +15 -0
- data/spec/shared/hash_method_behavior.rb +17 -0
- data/spec/shared/idempotent_method_behavior.rb +7 -0
- data/spec/shared/incompatible_operation_behavior.rb +5 -0
- data/spec/shared/invertible_method_behaviour.rb +9 -0
- data/spec/shared/operation_behavior.rb +12 -0
- data/spec/shared/sunits_shared.rb +6 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/unit/auom/add_spec.rb +0 -0
- data/spec/unit/auom/algebra/add_spec.rb +59 -0
- data/spec/unit/auom/algebra/divide_spec.rb +74 -0
- data/spec/unit/auom/algebra/multiply_spec.rb +74 -0
- data/spec/unit/auom/algebra/substract_spec.rb +59 -0
- data/spec/unit/auom/equalization/eql_spec.rb +40 -0
- data/spec/unit/auom/equalization/equal_value_spec.rb +57 -0
- data/spec/unit/auom/equalization/hash_spec.rb +13 -0
- data/spec/unit/auom/inspection/class_methods/prettify_unit_part_spec.rb +27 -0
- data/spec/unit/auom/inspection/inspect_spec.rb +41 -0
- data/spec/unit/auom/unit/class_methods/convert_spec.rb +35 -0
- data/spec/unit/auom/unit/class_methods/lookup_spec.rb +21 -0
- data/spec/unit/auom/unit/class_methods/new_spec.rb +156 -0
- data/spec/unit/auom/unit/class_methods/try_convert_spec.rb +31 -0
- data/spec/unit/auom/unit/class_methods/units_spec.rb +11 -0
- data/spec/unit/auom/unit/denominators_spec.rb +16 -0
- data/spec/unit/auom/unit/numerators_spec.rb +16 -0
- data/spec/unit/auom/unit/scalar_spec.rb +16 -0
- data/spec/unit/auom/unit/unit_spec.rb +16 -0
- data/spec/unit/auom/unit/unitless_spec.rb +18 -0
- metadata +164 -0
File without changes
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AUOM::Algebra,'#add' do
|
4
|
+
subject { object.add(operand) }
|
5
|
+
|
6
|
+
let(:object) { AUOM::Unit.new(*arguments) }
|
7
|
+
|
8
|
+
context 'when unit is unitless' do
|
9
|
+
let(:arguments) { [1] }
|
10
|
+
|
11
|
+
context 'and operand is a Fixnum' do
|
12
|
+
let(:operand) { 1 }
|
13
|
+
|
14
|
+
it_should_behave_like 'an operation'
|
15
|
+
|
16
|
+
it { should eql(AUOM::Unit.new(2)) }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'and operand is a unitless unit' do
|
20
|
+
let(:operand) { AUOM::Unit.new(1) }
|
21
|
+
|
22
|
+
it { should eql(AUOM::Unit.new(2)) }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'and operand is a unitful unit' do
|
26
|
+
let(:operand) { AUOM::Unit.new(1,:meter) }
|
27
|
+
|
28
|
+
it_should_behave_like 'an incompatible operation'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when unit is unitful' do
|
33
|
+
let(:arguments) { [1,:meter] }
|
34
|
+
|
35
|
+
context 'and operand is a Fixnum' do
|
36
|
+
let(:operand) { 1 }
|
37
|
+
|
38
|
+
it_should_behave_like 'an incompatible operation'
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'and operand is a unitless unit' do
|
42
|
+
let(:operand) { AUOM::Unit.new(1) }
|
43
|
+
|
44
|
+
it_should_behave_like 'an incompatible operation'
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'and operand is a incompatible unit' do
|
48
|
+
let(:operand) { AUOM::Unit.new(1,:euro) }
|
49
|
+
|
50
|
+
it_should_behave_like 'an incompatible operation'
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'and operand is a compatible unit' do
|
54
|
+
let(:operand) { AUOM::Unit.new(1,:meter) }
|
55
|
+
|
56
|
+
it { should eql(AUOM::Unit.new(2,:meter)) }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AUOM::Algebra,'#divide' do
|
4
|
+
subject { object.divide(operand) }
|
5
|
+
|
6
|
+
let(:object) { AUOM::Unit.new(*arguments) }
|
7
|
+
|
8
|
+
context 'with unitless unit' do
|
9
|
+
let(:arguments) { [2] }
|
10
|
+
|
11
|
+
context 'when operand is a fixnum' do
|
12
|
+
let(:operand) { 1 }
|
13
|
+
|
14
|
+
it_should_behave_like 'an operation'
|
15
|
+
|
16
|
+
it { should eql(AUOM::Unit.new(2)) }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when operand is a unitless unit' do
|
20
|
+
let(:operand) { AUOM::Unit.new(1) }
|
21
|
+
|
22
|
+
it_should_behave_like 'an operation'
|
23
|
+
|
24
|
+
it { should eql(AUOM::Unit.new(2)) }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when operand is a unitful unit' do
|
28
|
+
let(:operand) { AUOM::Unit.new(1,:meter) }
|
29
|
+
|
30
|
+
it_should_behave_like 'an operation'
|
31
|
+
|
32
|
+
it { should eql(AUOM::Unit.new(2,[],:meter)) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with unitful unit' do
|
37
|
+
let(:arguments) { [2,:meter] }
|
38
|
+
|
39
|
+
context 'when operand is a fixnum' do
|
40
|
+
let(:operand) { 1 }
|
41
|
+
|
42
|
+
it_should_behave_like 'an operation'
|
43
|
+
|
44
|
+
it { should eql(AUOM::Unit.new(2,:meter)) }
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'when operand is a unitless unit' do
|
48
|
+
let(:operand) { AUOM::Unit.new(1) }
|
49
|
+
|
50
|
+
it_should_behave_like 'an operation'
|
51
|
+
|
52
|
+
it { should eql(AUOM::Unit.new(2,:meter)) }
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'when operand is a unitful unit' do
|
56
|
+
|
57
|
+
context 'and units NOT cancle each other' do
|
58
|
+
let(:operand) { AUOM::Unit.new(1,:euro) }
|
59
|
+
|
60
|
+
it_should_behave_like 'an operation'
|
61
|
+
|
62
|
+
it { should eql(AUOM::Unit.new(2,:meter,:euro)) }
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'and untis cancle each other' do
|
66
|
+
let(:operand) { AUOM::Unit.new(1,:meter) }
|
67
|
+
|
68
|
+
it_should_behave_like 'an operation'
|
69
|
+
|
70
|
+
it { should eql(AUOM::Unit.new(2)) }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AUOM::Algebra,'#multiply' do
|
4
|
+
subject { object.multiply(operand) }
|
5
|
+
|
6
|
+
let(:object) { AUOM::Unit.new(*arguments) }
|
7
|
+
|
8
|
+
context 'with unitless unit' do
|
9
|
+
let(:arguments) { [1] }
|
10
|
+
|
11
|
+
context 'when operand is a fixnum' do
|
12
|
+
let(:operand) { 2 }
|
13
|
+
|
14
|
+
it_should_behave_like 'an operation'
|
15
|
+
|
16
|
+
it { should eql(AUOM::Unit.new(2)) }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when operand is a unitless unit' do
|
20
|
+
let(:operand) { AUOM::Unit.new(2) }
|
21
|
+
|
22
|
+
it_should_behave_like 'an operation'
|
23
|
+
|
24
|
+
it { should eql(AUOM::Unit.new(2)) }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when operand is a unitful unit' do
|
28
|
+
let(:operand) { AUOM::Unit.new(2,:meter) }
|
29
|
+
|
30
|
+
it_should_behave_like 'an operation'
|
31
|
+
|
32
|
+
it { should eql(AUOM::Unit.new(2,:meter)) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with unitful unit' do
|
37
|
+
let(:arguments) { [1,:meter] }
|
38
|
+
|
39
|
+
context 'when operand is a fixnum' do
|
40
|
+
let(:operand) { 2 }
|
41
|
+
|
42
|
+
it_should_behave_like 'an operation'
|
43
|
+
|
44
|
+
it { should eql(AUOM::Unit.new(2,:meter)) }
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'when operand is a unitless unit' do
|
48
|
+
let(:operand) { AUOM::Unit.new(2) }
|
49
|
+
|
50
|
+
it_should_behave_like 'an operation'
|
51
|
+
|
52
|
+
it { should eql(AUOM::Unit.new(2,:meter)) }
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'when operand is a unitful unit' do
|
56
|
+
|
57
|
+
context 'and units NOT cancle each other' do
|
58
|
+
let(:operand) { AUOM::Unit.new(2,:meter) }
|
59
|
+
|
60
|
+
it_should_behave_like 'an operation'
|
61
|
+
|
62
|
+
it { should eql(AUOM::Unit.new(2,[:meter,:meter])) }
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'and units cancle each other' do
|
66
|
+
let(:operand) { AUOM::Unit.new(2,[],:meter) }
|
67
|
+
|
68
|
+
it_should_behave_like 'an operation'
|
69
|
+
|
70
|
+
it { should eql(AUOM::Unit.new(2)) }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AUOM::Algebra,'#substract' do
|
4
|
+
subject { object.substract(operand) }
|
5
|
+
|
6
|
+
let(:object) { AUOM::Unit.new(*arguments) }
|
7
|
+
|
8
|
+
context 'when unit is unitless' do
|
9
|
+
let(:arguments) { [1] }
|
10
|
+
|
11
|
+
context 'and operand is a Fixnum' do
|
12
|
+
let(:operand) { 1 }
|
13
|
+
|
14
|
+
it_should_behave_like 'an operation'
|
15
|
+
|
16
|
+
it { should eql(AUOM::Unit.new(0)) }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'and operand is a unitless unit' do
|
20
|
+
let(:operand) { AUOM::Unit.new(1) }
|
21
|
+
|
22
|
+
it { should eql(AUOM::Unit.new(0)) }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'and operand is a unitful unit' do
|
26
|
+
let(:operand) { AUOM::Unit.new(1,:meter) }
|
27
|
+
|
28
|
+
it_should_behave_like 'an incompatible operation'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when unit is unitful' do
|
33
|
+
let(:arguments) { [1,:meter] }
|
34
|
+
|
35
|
+
context 'and operand is a Fixnum' do
|
36
|
+
let(:operand) { 1 }
|
37
|
+
|
38
|
+
it_should_behave_like 'an incompatible operation'
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'and operand is a unitless unit' do
|
42
|
+
let(:operand) { AUOM::Unit.new(1) }
|
43
|
+
|
44
|
+
it_should_behave_like 'an incompatible operation'
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'and operand is a incompatible unit' do
|
48
|
+
let(:operand) { AUOM::Unit.new(1,:euro) }
|
49
|
+
|
50
|
+
it_should_behave_like 'an incompatible operation'
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'and operand is a compatible unit' do
|
54
|
+
let(:operand) { AUOM::Unit.new(1,:meter) }
|
55
|
+
|
56
|
+
it { should eql(AUOM::Unit.new(0,:meter)) }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AUOM::Equalization,'#eql?' do
|
4
|
+
subject { object.eql?(other) }
|
5
|
+
|
6
|
+
let(:object) { AUOM::Unit.new(1,:meter) }
|
7
|
+
|
8
|
+
context 'when is other kind of object' do
|
9
|
+
let(:other) { Object.new }
|
10
|
+
|
11
|
+
it { should be(false) }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'when is same kind of object' do
|
15
|
+
let(:other) { AUOM::Unit.new(scalar,*unit) }
|
16
|
+
|
17
|
+
let(:scalar) { 1 }
|
18
|
+
let(:unit) { [:meter] }
|
19
|
+
|
20
|
+
context 'and scalar and unit are the same' do
|
21
|
+
it { should be(true) }
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'and scalar is differend' do
|
25
|
+
let(:scalar) { 2 }
|
26
|
+
it { should be(false) }
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'and unit is differend' do
|
30
|
+
let(:unit) { [:euro] }
|
31
|
+
it { should be(false) }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'and scalar and unit is differend' do
|
35
|
+
let(:scalar) { 2 }
|
36
|
+
let(:unit) { [:euro] }
|
37
|
+
it { should be(false) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AUOM::Equalization,'#==' do
|
4
|
+
subject { object == other }
|
5
|
+
|
6
|
+
let(:object) { AUOM::Unit.new(1,:meter) }
|
7
|
+
|
8
|
+
context 'when is other kind of object' do
|
9
|
+
|
10
|
+
context 'that cannot be converted' do
|
11
|
+
let(:other) { Object.new }
|
12
|
+
|
13
|
+
it { should be(false) }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'that can be converted' do
|
17
|
+
let(:other) { 1 }
|
18
|
+
|
19
|
+
context 'and does not have the same values' do
|
20
|
+
it { should be(false) }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'and does have the same values' do
|
24
|
+
let(:other) { 1 }
|
25
|
+
let(:object) { AUOM::Unit.new(1) }
|
26
|
+
it { should be(true) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when is same kind of object' do
|
32
|
+
let(:other) { AUOM::Unit.new(scalar,*unit) }
|
33
|
+
|
34
|
+
let(:scalar) { 1 }
|
35
|
+
let(:unit) { [:meter] }
|
36
|
+
|
37
|
+
context 'and scalar and unit are the same' do
|
38
|
+
it { should be(true) }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'and scalar is differend' do
|
42
|
+
let(:scalar) { 2 }
|
43
|
+
it { should be(false) }
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'and unit is differend' do
|
47
|
+
let(:unit) { [:euro] }
|
48
|
+
it { should be(false) }
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'and scalar and unit is differend' do
|
52
|
+
let(:scalar) { 2 }
|
53
|
+
let(:unit) { [:euro] }
|
54
|
+
it { should be(false) }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AUOM::Equalization, '#hash' do
|
4
|
+
subject { object.hash }
|
5
|
+
|
6
|
+
let(:object) { AUOM::Unit.new(1) }
|
7
|
+
|
8
|
+
it { should be_a(Fixnum) }
|
9
|
+
|
10
|
+
it_should_behave_like 'an idempotent method'
|
11
|
+
|
12
|
+
it { should be(Rational(1).hash ^ [[],[]].hash) }
|
13
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AUOM::Inspection,'.prettify_unit_part' do
|
4
|
+
subject { object.prettify_unit_part(part) }
|
5
|
+
|
6
|
+
let(:object) { AUOM::Inspection }
|
7
|
+
|
8
|
+
context 'with simple part' do
|
9
|
+
let(:part) { [:meter] }
|
10
|
+
it { should eql('meter') }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'with mixed part' do
|
14
|
+
let(:part) { [:meter,:euro] }
|
15
|
+
it { should eql('euro*meter') }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'with complex part' do
|
19
|
+
let(:part) { [:meter,:meter,:euro] }
|
20
|
+
it { should eql('meter^2*euro') }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with very complex part' do
|
24
|
+
let(:part) { [:meter,:meter,:euro,:euro,:kilogramm] }
|
25
|
+
it { should eql('euro^2*meter^2*kilogramm') }
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AUOM::Inspection,'#inspect' do
|
4
|
+
subject { object.inspect }
|
5
|
+
|
6
|
+
let(:object) { AUOM::Unit.new(scalar,*unit) }
|
7
|
+
let(:unit) { [] }
|
8
|
+
|
9
|
+
context 'when scalar is exact in decimal' do
|
10
|
+
let(:scalar) { 1 }
|
11
|
+
|
12
|
+
it { should eql("<AUOM::Unit @scalar=1>") }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when scalar is NOT exact in decimal' do
|
16
|
+
let(:scalar) { Rational(1,3) }
|
17
|
+
|
18
|
+
it { should eql("<AUOM::Unit @scalar=~0.3333>") }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when has only numerator' do
|
22
|
+
let(:scalar) { Rational(1,3) }
|
23
|
+
let(:unit) { [:meter] }
|
24
|
+
|
25
|
+
it { should eql("<AUOM::Unit @scalar=~0.3333 meter>") }
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when has only denominator' do
|
29
|
+
let(:scalar) { Rational(1,3) }
|
30
|
+
let(:unit) { [[],:meter] }
|
31
|
+
|
32
|
+
it { should eql("<AUOM::Unit @scalar=~0.3333 1/meter>") }
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when has numerator and denominator' do
|
36
|
+
let(:scalar) { Rational(1,3) }
|
37
|
+
let(:unit) { [:euro,:meter] }
|
38
|
+
|
39
|
+
it { should eql("<AUOM::Unit @scalar=~0.3333 euro/meter>") }
|
40
|
+
end
|
41
|
+
end
|