master
1require "spec_helper"
2
3describe Quantity do
4 describe "#to" do
5 it "converts lbs to kgs" do
6 lbs = Quantity.new(135.0, :lbs)
7 expect(lbs.to(:kg).to_f.round(1)).to eql(61.2)
8 end
9
10 it "converts kgs to kgs" do
11 kgs = Quantity.new(135.0, :kgs)
12 expect(kgs.to(:kgs).to_f).to eql(135.0)
13 end
14
15 it "converts kgs to lbs" do
16 kgs = Quantity.new(61.2, :kgs)
17 expect(kgs.to(:lbs).to_f.round(0)).to eql(135)
18 end
19
20 it "converts lbs to lbs" do
21 lbs = Quantity.new(135.0, :lbs)
22 expect(lbs.to(:lbs).to_f).to eql(135.0)
23 end
24 end
25
26 describe "#eql?" do
27 it "is equal when both are lbs" do
28 quantity = Quantity.new(135.0, :lbs)
29 other = Quantity.new(135.0, :lbs)
30 expect(quantity).to eql(other)
31 end
32
33 it "is equal when both are kgs" do
34 quantity = Quantity.new(61.2, :kgs)
35 other = Quantity.new(61.2, :kgs)
36 expect(quantity).to eql(other)
37 end
38
39 it "is equal when different units" do
40 quantity = Quantity.new(135.0, :lbs)
41 other = Quantity.new(61.2, :kgs)
42 expect(quantity).to eql(other)
43 end
44
45 it "is equal to a float" do
46 quantity = Quantity.new(135.0, :lbs)
47 expect(quantity).to eql(135.0)
48 end
49
50 it "is not equal" do
51 quantity = Quantity.new(135.0, :lbs)
52 other = Quantity.new(135.2, :lbs)
53 expect(quantity).to_not eql(other)
54 end
55 end
56
57 describe "#+" do
58 it "adds lbs to lbs" do
59 quantity = Quantity.new(135.0, :lbs)
60 other = Quantity.new(135.0, :lbs)
61 expect(quantity + other).to eql(Quantity.new(270.0, :lbs))
62 end
63
64 it "adds kgs to lbs" do
65 quantity = Quantity.new(135.0, :lbs)
66 other = Quantity.new(61.2, :kg)
67 expect(quantity + other).to eql(Quantity.new(270.0, :lbs))
68 end
69
70 it "adds lbs to kgs" do
71 quantity = Quantity.new(61.2, :kg)
72 other = Quantity.new(135.0, :lbs)
73 expect(quantity + other).to eql(Quantity.new(122.4, :kg))
74 end
75
76 it "adds a float to lbs" do
77 quantity = Quantity.new(135.0, :lbs)
78 other = 135.0
79 expect(quantity + other).to eql(Quantity.new(270.0, :lbs))
80 end
81 end
82
83 describe "#-" do
84 it "subtracts lbs from lbs" do
85 quantity = Quantity.new(135.0, :lbs)
86 other = Quantity.new(135.0, :lbs)
87 expect(quantity - other).to eql(Quantity.new(0.0, :lbs))
88 end
89
90 it "subtracts kgs from lbs" do
91 quantity = Quantity.new(135.0, :lbs)
92 other = Quantity.new(61.2, :kg)
93 expect(quantity - other).to eql(Quantity.new(0.0, :lbs))
94 end
95
96 it "subtracts lbs from kgs" do
97 quantity = Quantity.new(61.2, :kg)
98 other = Quantity.new(135.0, :lbs)
99 expect(quantity - other).to eql(Quantity.new(0.0, :kg))
100 end
101
102 it "subtracts a float from lbs" do
103 quantity = Quantity.new(135.0, :lbs)
104 other = 135.0
105 expect(quantity - other).to eql(Quantity.new(0.0, :lbs))
106 end
107 end
108
109 describe "#/" do
110 it "divides lbs from lbs" do
111 quantity = Quantity.new(135.0, :lbs)
112 other = Quantity.new(135.0, :lbs)
113 expect(quantity / other).to eql(Quantity.new(1.0, :lbs))
114 end
115
116 it "divides kgs from lbs" do
117 quantity = Quantity.new(135.0, :lbs)
118 other = Quantity.new(61.2, :kg)
119 expect(quantity / other).to eql(Quantity.new(1.0, :lbs))
120 end
121
122 it "divides lbs from kgs" do
123 quantity = Quantity.new(61.2, :kg)
124 other = Quantity.new(135.0, :lbs)
125 expect(quantity / other).to eql(Quantity.new(1.0, :kg))
126 end
127
128 it "divides a float from lbs" do
129 quantity = Quantity.new(135.0, :lbs)
130 other = 135.0
131 expect(quantity / other).to eql(Quantity.new(1.0, :lbs))
132 end
133 end
134
135 describe "#*" do
136 it "multiples lbs with lbs" do
137 quantity = Quantity.new(135.0, :lbs)
138 other = Quantity.new(135.0, :lbs)
139 expect(quantity * other).to eql(Quantity.new(18_225.0, :lbs))
140 end
141
142 it "multiples a float with lbs" do
143 quantity = Quantity.new(135.0, :lbs)
144 other = 135.0
145 expect(quantity * other).to eql(Quantity.new(18_225.0, :lbs))
146 end
147 end
148
149 describe "#>" do
150 it "compares lbs with lbs" do
151 quantity = Quantity.new(135.1, :lbs)
152 other = Quantity.new(135.0, :lbs)
153 expect(quantity).to be > other
154 expect(other).to_not be > quantity
155 end
156 end
157
158 describe "#>=" do
159 it "compares lbs with lbs" do
160 quantity = Quantity.new(135.2, :lbs)
161 other = Quantity.new(135.0, :lbs)
162 expect(quantity).to be >= quantity
163 expect(quantity).to be >= other
164 expect(other).to_not be >= quantity
165 end
166 end
167
168 describe "#<" do
169 it "compares lbs with lbs" do
170 quantity = Quantity.new(135.1, :lbs)
171 other = Quantity.new(135.0, :lbs)
172 expect(quantity).to_not be < other
173 expect(other).to be < quantity
174 end
175 end
176
177 describe "#to_json" do
178 it 'format the amount and unit to json' do
179 expect(100.lbs.to_json).to eql({
180 amount: 100.0,
181 unit: 'lbs',
182 }.to_json)
183 end
184 end
185end