fixed_point 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.md +1 -2
- data/Rakefile +3 -8
- data/lib/fixed_point.rb +1 -1
- data/lib/fixed_point/number.rb +78 -30
- data/spec/fixed_point_hex_spec.rb +201 -0
- data/spec/fixed_point_spec.rb +62 -62
- metadata +3 -2
data/HISTORY.md
CHANGED
data/Rakefile
CHANGED
@@ -24,11 +24,6 @@ namespace :deploy do
|
|
24
24
|
line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
|
25
25
|
end
|
26
26
|
|
27
|
-
#Dir.chdir( './lib/')
|
28
|
-
#puts require NAME
|
29
|
-
#Dir.chdir( './../')
|
30
|
-
|
31
|
-
|
32
27
|
desc 'Run Spec'
|
33
28
|
#file_list = FileList['spec/*_spec.rb']
|
34
29
|
html_path = "spec_results.html"
|
@@ -69,7 +64,7 @@ namespace :deploy do
|
|
69
64
|
|
70
65
|
task :push_gem do
|
71
66
|
puts "Pushing Gem #{name}-#{version}"
|
72
|
-
|
67
|
+
`gem push #{name}-#{version}.gem`
|
73
68
|
unless $?.success?
|
74
69
|
$stderr.puts "Gem Push Failed"
|
75
70
|
exit -1
|
@@ -78,7 +73,7 @@ namespace :deploy do
|
|
78
73
|
|
79
74
|
task :create_git_tag do
|
80
75
|
puts "Tagging #{name}-#{version}"
|
81
|
-
|
76
|
+
`git tag -a #{version} -m 'Tagging gem release #{version}'`
|
82
77
|
unless $?.success?
|
83
78
|
$stderr.puts "Tagging Git Failed"
|
84
79
|
exit -1
|
@@ -87,7 +82,7 @@ namespace :deploy do
|
|
87
82
|
|
88
83
|
task :push_tag do
|
89
84
|
puts "Push Tag #{version}"
|
90
|
-
|
85
|
+
`git push origin #{version}`
|
91
86
|
unless $?.success?
|
92
87
|
$stderr.puts "Pushing Git Tag Failed"
|
93
88
|
exit -1
|
data/lib/fixed_point.rb
CHANGED
data/lib/fixed_point/number.rb
CHANGED
@@ -154,45 +154,59 @@ module FixedPoint
|
|
154
154
|
# Do not change the Signed format as can not detect that from bit pattern
|
155
155
|
@format = Format.new(@format.signed, int_bits, frac_bits)
|
156
156
|
|
157
|
-
|
158
|
-
### Routine to generate source from binary
|
159
|
-
###########################
|
160
|
-
@source = 0.0
|
161
|
-
index = 0
|
162
|
-
set_int.reverse.each_char do |x|
|
163
|
-
if x == "1"
|
164
|
-
#If input is signed then MSB is negative
|
165
|
-
if ((index + 1) == @format.int_bits) and (@format.signed?)
|
166
|
-
@source = @source + -2**index
|
167
|
-
else
|
168
|
-
@source = @source + 2**index
|
169
|
-
end
|
170
|
-
end
|
171
|
-
index = index + 1
|
172
|
-
end
|
173
|
-
|
174
|
-
index = 1
|
175
|
-
set_frac.each_char do |x|
|
176
|
-
if x == "1"
|
177
|
-
@source = @source + 2**-index
|
178
|
-
end
|
179
|
-
index = index + 1
|
180
|
-
end
|
181
|
-
################################
|
157
|
+
@source = binary_to_float( set_int, set_frac)
|
182
158
|
|
183
159
|
## Set the Quantised value
|
184
160
|
@quantised = @source
|
185
161
|
|
186
162
|
return binary
|
187
163
|
else
|
188
|
-
puts "ERROR invalid input
|
164
|
+
$stderr.puts "ERROR invalid binary input \(#{text}\)"
|
189
165
|
return nil
|
190
166
|
end
|
191
167
|
end
|
192
168
|
|
169
|
+
## TODO this feature for version 0.2.1
|
193
170
|
def hex=( text )
|
194
|
-
|
195
|
-
## Strip leading
|
171
|
+
## Hex numbers do not get delimited
|
172
|
+
## TODO Strip leading \d+'h (Verilog denominator)
|
173
|
+
|
174
|
+
if text.match(/(0x)?([0-9a-fA-F]*)/ )
|
175
|
+
# Convert Hex to integer
|
176
|
+
# integer to binary string
|
177
|
+
binary_bits = $2.to_i(16).to_s(2)
|
178
|
+
|
179
|
+
#Ensure min length (for reliability manipulating string)
|
180
|
+
binary_bits = binary_bits.rjust(text.size*4, '0')
|
181
|
+
|
182
|
+
if @format.frac_bits > 0
|
183
|
+
set_frac = binary_bits[-@format.frac_bits, @format.frac_bits]
|
184
|
+
else
|
185
|
+
set_frac = ""
|
186
|
+
end
|
187
|
+
|
188
|
+
set_int = binary_bits[-(@format.width)..-(@format.frac_bits+1)]
|
189
|
+
|
190
|
+
## Was the input word length too Long
|
191
|
+
oversized_bits = binary_bits.size - @format.width
|
192
|
+
if oversized_bits > 0
|
193
|
+
# give a semantic name to the discarded bits
|
194
|
+
discarded_bits = binary_bits[0,oversized_bits]
|
195
|
+
|
196
|
+
#If data (mix of 1 and 0) contained in the discarded bits raise Error
|
197
|
+
unless all_bits_the_same discarded_bits
|
198
|
+
$stderr.puts %{Error using hex=#{text}, format is #{@format.width}, truncated data is #{discarded_bits}
|
199
|
+
The MSBs seem to contain data they are not just 0 or 1 padded}
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
@source = binary_to_float( set_int, set_frac )
|
204
|
+
@quantised = @source
|
205
|
+
|
206
|
+
else
|
207
|
+
$stderr.puts "ERROR invalid hex input \(#{text}\)"
|
208
|
+
return nil
|
209
|
+
end
|
196
210
|
end
|
197
211
|
|
198
212
|
|
@@ -206,6 +220,14 @@ module FixedPoint
|
|
206
220
|
|
207
221
|
private
|
208
222
|
|
223
|
+
def all_bits_the_same( bin_string )
|
224
|
+
word = bin_string.split('')
|
225
|
+
all_one = word.all?{|x| x == '1' }
|
226
|
+
all_zero = word.all?{|x| x == '0' }
|
227
|
+
return (all_one || all_zero)
|
228
|
+
end
|
229
|
+
|
230
|
+
|
209
231
|
def check_for_overflow_underflow( source, format)
|
210
232
|
overflow = false
|
211
233
|
underflow = false
|
@@ -299,13 +321,39 @@ module FixedPoint
|
|
299
321
|
|
300
322
|
|
301
323
|
|
324
|
+
##
|
325
|
+
def binary_to_float(int_part, frac_part )
|
326
|
+
index = 0
|
327
|
+
value = 0.0
|
328
|
+
int_part.reverse.each_char do |x|
|
329
|
+
if x == "1"
|
330
|
+
#If input is signed then MSB is negative
|
331
|
+
if ((index + 1) == @format.int_bits) and (@format.signed?)
|
332
|
+
value = value + -2**index
|
333
|
+
else
|
334
|
+
value = value + 2**index
|
335
|
+
end
|
336
|
+
end
|
337
|
+
index = index + 1
|
338
|
+
end
|
339
|
+
|
340
|
+
index = 1
|
341
|
+
frac_part.each_char do |x|
|
342
|
+
if x == "1"
|
343
|
+
value = value + 2**-index
|
344
|
+
end
|
345
|
+
index = index + 1
|
346
|
+
end
|
347
|
+
|
348
|
+
return value
|
349
|
+
end
|
302
350
|
|
303
351
|
|
304
|
-
## Taking
|
352
|
+
## Taking method out until covered by tests
|
305
353
|
#def normalised
|
306
354
|
# #This use to be only for positive numbers
|
307
355
|
#
|
308
|
-
# # This function
|
356
|
+
# # This function shifts the fixedpoint number
|
309
357
|
# # so it can be represented as an integer.
|
310
358
|
# return Integer((@quantised)*(2**@format.frac_bits))
|
311
359
|
#end
|
@@ -0,0 +1,201 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FixedPoint do
|
4
|
+
it "Create 4 bit hex 7" do
|
5
|
+
format = FixedPoint::Fixdt.new(0, 4, 0)
|
6
|
+
fixt = FixedPoint::Number.new(0, format)
|
7
|
+
|
8
|
+
fixt.hex = "7"
|
9
|
+
fixt.source.should == 7.0
|
10
|
+
fixt.to_f.should == 7.0
|
11
|
+
fixt.to_s.should == "7.0"
|
12
|
+
fixt.to_i.should == 7
|
13
|
+
fixt.frac.should == 0.0
|
14
|
+
fixt.to_h.should == "7"
|
15
|
+
fixt.to_b.should == "0111"
|
16
|
+
fixt.overflow?.should == false
|
17
|
+
fixt.underflow?.should == false
|
18
|
+
end
|
19
|
+
|
20
|
+
it "Create 4 bit hex F" do
|
21
|
+
format = FixedPoint::Fixdt.new(0, 4, 0)
|
22
|
+
fixt = FixedPoint::Number.new(0, format)
|
23
|
+
|
24
|
+
fixt.hex = "F"
|
25
|
+
fixt.source.should == 15.0
|
26
|
+
fixt.to_f.should == 15.0
|
27
|
+
fixt.to_s.should == "15.0"
|
28
|
+
fixt.to_i.should == 15
|
29
|
+
fixt.frac.should == 0.0
|
30
|
+
fixt.to_h.should == "f"
|
31
|
+
fixt.to_b.should == "1111"
|
32
|
+
fixt.overflow?.should == false
|
33
|
+
fixt.underflow?.should == false
|
34
|
+
end
|
35
|
+
|
36
|
+
it "Create 4 bit hex F Signed" do
|
37
|
+
format = FixedPoint::Fixdt.new(1, 4, 0)
|
38
|
+
fixt = FixedPoint::Number.new(0, format)
|
39
|
+
|
40
|
+
fixt.hex = "F"
|
41
|
+
fixt.source.should == -1.0
|
42
|
+
fixt.to_f.should == -1.0
|
43
|
+
fixt.to_s.should == "-1.0"
|
44
|
+
fixt.to_i.should == -1
|
45
|
+
fixt.frac.should == 0.0
|
46
|
+
fixt.to_h.should == "f"
|
47
|
+
fixt.to_b.should == "1111"
|
48
|
+
fixt.overflow?.should == false
|
49
|
+
fixt.underflow?.should == false
|
50
|
+
end
|
51
|
+
|
52
|
+
it "Create 4 bit hex F Signed" do
|
53
|
+
format = FixedPoint::Fixdt.new(1, 4, 0)
|
54
|
+
fixt = FixedPoint::Number.new(0, format)
|
55
|
+
|
56
|
+
fixt.hex = "F"
|
57
|
+
fixt.source.should == -1.0
|
58
|
+
fixt.to_f.should == -1.0
|
59
|
+
fixt.to_s.should == "-1.0"
|
60
|
+
fixt.to_i.should == -1
|
61
|
+
fixt.frac.should == 0.0
|
62
|
+
fixt.to_h.should == "f"
|
63
|
+
fixt.to_b.should == "1111"
|
64
|
+
fixt.overflow?.should == false
|
65
|
+
fixt.underflow?.should == false
|
66
|
+
end
|
67
|
+
|
68
|
+
it "Create 8 bit Signed hex f0 [1,4,4] = -1.0" do
|
69
|
+
format = FixedPoint::Format.new(1, 4, 4)
|
70
|
+
fixt = FixedPoint::Number.new(0, format)
|
71
|
+
|
72
|
+
fixt.hex = "f0"
|
73
|
+
fixt.source.should == -1.0
|
74
|
+
fixt.to_f.should == -1.0
|
75
|
+
fixt.to_s.should == "-1.0"
|
76
|
+
fixt.to_i.should == -1
|
77
|
+
fixt.frac.should == 0.0
|
78
|
+
fixt.to_h.should == "f0"
|
79
|
+
fixt.to_b.should == "1111.0000"
|
80
|
+
fixt.overflow?.should == false
|
81
|
+
fixt.underflow?.should == false
|
82
|
+
end
|
83
|
+
|
84
|
+
it "hex= should ignore msb past word length" do
|
85
|
+
format = FixedPoint::Format.new(1, 4, 4)
|
86
|
+
fixt = FixedPoint::Number.new(0, format)
|
87
|
+
|
88
|
+
fixt.hex = "f80"
|
89
|
+
fixt.source.should == -8.0
|
90
|
+
fixt.to_f.should == -8.0
|
91
|
+
fixt.to_s.should == "-8.0"
|
92
|
+
fixt.to_i.should == -8
|
93
|
+
fixt.frac.should == 0.0
|
94
|
+
fixt.to_h.should == "80"
|
95
|
+
fixt.to_b.should == "1000.0000"
|
96
|
+
fixt.overflow?.should == false
|
97
|
+
fixt.underflow?.should == false
|
98
|
+
end
|
99
|
+
|
100
|
+
it "hex= should ignore truncated MSBs, 0 padded" do
|
101
|
+
format = FixedPoint::Format.new(0, 6, 0)
|
102
|
+
fixt = FixedPoint::Number.new(0, format)
|
103
|
+
|
104
|
+
fixt.hex = "00"
|
105
|
+
fixt.source.should == 0.0
|
106
|
+
fixt.to_f.should == 0.0
|
107
|
+
fixt.to_s.should == "0.0"
|
108
|
+
fixt.to_i.should == 0
|
109
|
+
fixt.frac.should == 0.0
|
110
|
+
fixt.to_h.should == "00"
|
111
|
+
fixt.to_b.should == "000000"
|
112
|
+
fixt.overflow?.should == false
|
113
|
+
fixt.underflow?.should == false
|
114
|
+
end
|
115
|
+
it "hex= should ignore truncated MSBs, 1 padded" do
|
116
|
+
format = FixedPoint::Format.new(0, 6, 0)
|
117
|
+
fixt = FixedPoint::Number.new(0, format)
|
118
|
+
|
119
|
+
fixt.hex = "C0"
|
120
|
+
fixt.source.should == 0.0
|
121
|
+
fixt.to_f.should == 0.0
|
122
|
+
fixt.to_s.should == "0.0"
|
123
|
+
fixt.to_i.should == 0
|
124
|
+
fixt.frac.should == 0.0
|
125
|
+
fixt.to_h.should == "00"
|
126
|
+
fixt.to_b.should == "000000"
|
127
|
+
fixt.overflow?.should == false
|
128
|
+
fixt.underflow?.should == false
|
129
|
+
end
|
130
|
+
|
131
|
+
it "hex= should catch data in truncated MSBs" do
|
132
|
+
format = FixedPoint::Format.new(0, 6, 0)
|
133
|
+
fixt = FixedPoint::Number.new(0, format)
|
134
|
+
|
135
|
+
error = %{Error using hex=40, format is 6, truncated data is 01\n The MSBs seem to contain data they are not just 0 or 1 padded}
|
136
|
+
$stderr.should_receive(:puts).with( error )
|
137
|
+
fixt.hex = "40"
|
138
|
+
|
139
|
+
fixt.source.should == 0.0
|
140
|
+
fixt.to_f.should == 0.0
|
141
|
+
fixt.to_s.should == "0.0"
|
142
|
+
fixt.to_i.should == 0
|
143
|
+
fixt.frac.should == 0.0
|
144
|
+
fixt.to_h.should == "00"
|
145
|
+
fixt.to_b.should == "000000"
|
146
|
+
fixt.overflow?.should == false
|
147
|
+
fixt.underflow?.should == false
|
148
|
+
end
|
149
|
+
|
150
|
+
#it "hex= should catch data in truncated MSBs" do
|
151
|
+
# format = FixedPoint::Format.new(0, 6, 0)
|
152
|
+
# fixt = FixedPoint::Number.new(0, format)
|
153
|
+
#
|
154
|
+
# error = %{Error using hex=80, format is 6, truncated data is 10\n The MSBs seem to contain data they are not just 0 or 1 padded}
|
155
|
+
# $stderr.should_receive(:puts).with( error )
|
156
|
+
# fixt.hex = "80"
|
157
|
+
|
158
|
+
# fixt.source.should == 0.0
|
159
|
+
# fixt.to_f.should == 0.0
|
160
|
+
# fixt.to_s.should == "0.0"
|
161
|
+
# fixt.to_i.should == 0
|
162
|
+
# fixt.frac.should == 0.0
|
163
|
+
# fixt.to_h.should == "00"
|
164
|
+
# fixt.to_b.should == "000000"
|
165
|
+
# fixt.overflow?.should == false
|
166
|
+
# fixt.underflow?.should == false
|
167
|
+
#end
|
168
|
+
|
169
|
+
it "Bin= check 0x removal " do
|
170
|
+
format = FixedPoint::Format.new(1, 4, 4)
|
171
|
+
fixt = FixedPoint::Number.new(0, format)
|
172
|
+
|
173
|
+
fixt.hex = "0xf0"
|
174
|
+
fixt.source.should == -1.0
|
175
|
+
fixt.to_f.should == -1.0
|
176
|
+
fixt.to_s.should == "-1.0"
|
177
|
+
fixt.to_i.should == -1
|
178
|
+
fixt.frac.should == 0.0
|
179
|
+
fixt.to_h.should == "f0"
|
180
|
+
fixt.to_b.should == "1111.0000"
|
181
|
+
fixt.overflow?.should == false
|
182
|
+
fixt.underflow?.should == false
|
183
|
+
end
|
184
|
+
|
185
|
+
it "Bin= check 0x removal " do
|
186
|
+
format = FixedPoint::Format.new(1, 4, 4)
|
187
|
+
fixt = FixedPoint::Number.new(0, format)
|
188
|
+
|
189
|
+
fixt.hex = "0xf1"
|
190
|
+
fixt.source.should == -0.9375
|
191
|
+
fixt.to_f.should == -0.9375
|
192
|
+
fixt.to_s.should == "-0.9375"
|
193
|
+
fixt.to_i.should == 0
|
194
|
+
fixt.frac.should == -0.9375
|
195
|
+
fixt.to_h.should == "f1"
|
196
|
+
fixt.to_b.should == "1111.0001"
|
197
|
+
fixt.overflow?.should == false
|
198
|
+
fixt.underflow?.should == false
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
data/spec/fixed_point_spec.rb
CHANGED
@@ -21,83 +21,83 @@ describe FixedPoint do
|
|
21
21
|
fixt.frac.should == 0.0
|
22
22
|
fixt.to_h.should == "00000000"
|
23
23
|
fixt.to_b.should == "000000000000.00000000000000000000"
|
24
|
-
end
|
24
|
+
end
|
25
25
|
|
26
|
-
it "Integers 0 " do
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
fixt.source.should == 7.0
|
31
|
-
fixt.to_f.should == 7.0
|
32
|
-
fixt.to_s.should == "7.0"
|
33
|
-
fixt.to_i.should == 7
|
34
|
-
fixt.frac.should == 0.0
|
35
|
-
fixt.to_h.should == "07"
|
36
|
-
fixt.to_b.should == "00000111"
|
37
|
-
end
|
26
|
+
it "Integers 0 " do
|
27
|
+
format = FixedPoint::Format.new(1,8,0)
|
28
|
+
fixt = FixedPoint::Number.new(7.0, format, "_")
|
38
29
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
fixt.frac.should == 0.0
|
48
|
-
fixt.to_h.should == "00000000"
|
49
|
-
fixt.to_b.should == "000000000000_00000000000000000000"
|
50
|
-
end
|
30
|
+
fixt.source.should == 7.0
|
31
|
+
fixt.to_f.should == 7.0
|
32
|
+
fixt.to_s.should == "7.0"
|
33
|
+
fixt.to_i.should == 7
|
34
|
+
fixt.frac.should == 0.0
|
35
|
+
fixt.to_h.should == "07"
|
36
|
+
fixt.to_b.should == "00000111"
|
37
|
+
end
|
51
38
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
format = FixedPoint::Format.new(1, int_bits, x)
|
56
|
-
fixt = FixedPoint::Number.new(0, format)
|
57
|
-
#fixt = FixedPoint::Number.new(0,1,int_bits,x)
|
39
|
+
it "Different Decimal Mark _ instead of ." do
|
40
|
+
format = FixedPoint::Format.new(1,12,20)
|
41
|
+
fixt = FixedPoint::Number.new(0, format, "_")
|
58
42
|
|
59
43
|
fixt.source.should == 0.0
|
60
44
|
fixt.to_f.should == 0.0
|
61
45
|
fixt.to_s.should == "0.0"
|
62
46
|
fixt.to_i.should == 0
|
63
47
|
fixt.frac.should == 0.0
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
hex_length.times { hex += "0" }
|
68
|
-
fixt.to_h.should == hex
|
69
|
-
#Calculate binary fractional length and fill with 0's
|
70
|
-
lsbs = ""
|
71
|
-
x.times { lsbs += "0" }
|
72
|
-
fixt.to_b.should == "000000000000.#{lsbs}"
|
73
|
-
end
|
74
|
-
end
|
48
|
+
fixt.to_h.should == "00000000"
|
49
|
+
fixt.to_b.should == "000000000000_00000000000000000000"
|
50
|
+
end
|
75
51
|
|
52
|
+
(1...20).to_a.reverse_each do |x|
|
53
|
+
int_bits = 12
|
54
|
+
it "Returns 0.0 for initalise of 0 with #{x} fractional bits" do
|
55
|
+
format = FixedPoint::Format.new(1, int_bits, x)
|
56
|
+
fixt = FixedPoint::Number.new(0, format)
|
57
|
+
#fixt = FixedPoint::Number.new(0,1,int_bits,x)
|
58
|
+
|
59
|
+
fixt.source.should == 0.0
|
60
|
+
fixt.to_f.should == 0.0
|
61
|
+
fixt.to_s.should == "0.0"
|
62
|
+
fixt.to_i.should == 0
|
63
|
+
fixt.frac.should == 0.0
|
64
|
+
#Calculate hex length and fill with 0's
|
65
|
+
hex = ""
|
66
|
+
hex_length = ((x.to_f+int_bits.to_f)/4).ceil
|
67
|
+
hex_length.times { hex += "0" }
|
68
|
+
fixt.to_h.should == hex
|
69
|
+
#Calculate binary fractional length and fill with 0's
|
70
|
+
lsbs = ""
|
71
|
+
x.times { lsbs += "0" }
|
72
|
+
fixt.to_b.should == "000000000000.#{lsbs}"
|
73
|
+
end
|
74
|
+
end
|
76
75
|
|
77
|
-
it "Zero fractional bits " do
|
78
|
-
format = FixedPoint::Format.new(1,12,0)
|
79
|
-
fixt = FixedPoint::Number.new(0, format, "_")
|
80
76
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
fixt.to_i.should == 0
|
85
|
-
fixt.frac.should == 0.0
|
86
|
-
fixt.to_h.should == "000"
|
87
|
-
fixt.to_b.should == "000000000000"
|
88
|
-
end
|
77
|
+
it "Zero fractional bits " do
|
78
|
+
format = FixedPoint::Format.new(1,12,0)
|
79
|
+
fixt = FixedPoint::Number.new(0, format, "_")
|
89
80
|
|
81
|
+
fixt.source.should == 0.0
|
82
|
+
fixt.to_f.should == 0.0
|
83
|
+
fixt.to_s.should == "0.0"
|
84
|
+
fixt.to_i.should == 0
|
85
|
+
fixt.frac.should == 0.0
|
86
|
+
fixt.to_h.should == "000"
|
87
|
+
fixt.to_b.should == "000000000000"
|
88
|
+
end
|
90
89
|
|
91
|
-
it "returns 2.5 for initalise of 2.5" do
|
92
|
-
fixt = FixedPoint::Number.new(2.5)
|
93
90
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
91
|
+
it "returns 2.5 for initalise of 2.5" do
|
92
|
+
fixt = FixedPoint::Number.new(2.5)
|
93
|
+
|
94
|
+
fixt.source.should == 2.5
|
95
|
+
fixt.to_f.should == 2.5
|
96
|
+
fixt.to_s.should == "2.5"
|
97
|
+
fixt.to_i.should == 2
|
98
|
+
fixt.frac.should == 0.5
|
99
|
+
fixt.to_h.should == "00280000"
|
100
|
+
fixt.to_b.should == "000000000010.10000000000000000000"
|
101
101
|
end
|
102
102
|
|
103
103
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fixed_point
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-22 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Fixed Point numerical type for simulating fixed point calculations
|
15
15
|
email: fixed_point_gem@amaras-tech.co.uk
|
@@ -26,6 +26,7 @@ files:
|
|
26
26
|
- lib/fixed_point/format.rb
|
27
27
|
- lib/fixed_point/number.rb
|
28
28
|
- lib/fixed_point.rb
|
29
|
+
- spec/fixed_point_hex_spec.rb
|
29
30
|
- spec/fixed_point_negative_spec.rb
|
30
31
|
- spec/fixed_point_spec.rb
|
31
32
|
- spec/spec_helper.rb
|