nio 0.2.4 → 0.2.5
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/History.txt +6 -0
- data/README.txt +12 -0
- data/lib/nio/fmt.rb +30 -13
- data/lib/nio/version.rb +1 -1
- data/test/helper.rb +1 -0
- data/test/test_fmt.rb +23 -2
- data/test/test_repdec.rb +1 -1
- data/test/test_rtnlzr.rb +7 -3
- data/test/test_tools.rb +1 -1
- metadata +32 -13
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -305,6 +305,18 @@ we would use, for example:
|
|
305
305
|
puts 0.1234567.nio_write(fmt.prec(5)) -> 0.12346
|
306
306
|
puts 0.1234567.nio_write(fmt) -> 0.123
|
307
307
|
|
308
|
+
We can use the constructor Fmt() instead of Fmt.default, and pass options to it:
|
309
|
+
|
310
|
+
fmt = Fmt(:ndig=>3, :dec_sep=>',')
|
311
|
+
fmt = Fmt(:ndig=>3) { |f| f.sep! ',' }
|
312
|
+
|
313
|
+
And the [] operator can be used not only to access predefined formats, but also to
|
314
|
+
set individual properties easily, either applied to Fmt or to a format object:
|
315
|
+
|
316
|
+
fmt = Fmt[:dec_sep=>','].prec(3)[:all_digits=>true]
|
317
|
+
|
318
|
+
Note that Fmt[...] is simply equivalent to Fmt(...).
|
319
|
+
|
308
320
|
===Exact and aproximate values
|
309
321
|
|
310
322
|
Float and BigDecimal are approximate in the sense that
|
data/lib/nio/fmt.rb
CHANGED
@@ -428,7 +428,7 @@ module Nio
|
|
428
428
|
end
|
429
429
|
|
430
430
|
@@default_rounding_mode = :even
|
431
|
-
def initialize()
|
431
|
+
def initialize(options=nil)
|
432
432
|
|
433
433
|
@dec_sep = '.'
|
434
434
|
@grp_sep = ','
|
@@ -468,6 +468,7 @@ module Nio
|
|
468
468
|
@nan_txt = 'NAN'
|
469
469
|
@inf_txt = 'Infinity'
|
470
470
|
|
471
|
+
set! options if options
|
471
472
|
yield self if block_given?
|
472
473
|
end
|
473
474
|
|
@@ -524,8 +525,8 @@ module Nio
|
|
524
525
|
# (significance precision) is like :fix but using significant digits
|
525
526
|
# [<tt>:sci</tt>]
|
526
527
|
# (scientific) is the exponential form 1.234E2
|
527
|
-
# - <tt>precision</tt> (number of digits or :exact, only used for output
|
528
|
-
# [<tt
|
528
|
+
# - <tt>precision</tt> (optional), number of digits or :exact, only used for output
|
529
|
+
# [<tt>:exact</tt>]
|
529
530
|
# means that as many digits as necessary to unambiguosly define the
|
530
531
|
# value are used; this is the default.
|
531
532
|
#
|
@@ -556,22 +557,24 @@ module Nio
|
|
556
557
|
# zeros of exact types or non-signficative digits of inexact types.
|
557
558
|
# - <tt>:nonsignficative_digits</tt> assigns a character to display
|
558
559
|
# insignificant digits, # by default
|
559
|
-
def mode(mode,precision=nil,options={})
|
560
|
+
def mode(mode, precision=nil, options={})
|
560
561
|
dup.mode!(mode,precision,options)
|
561
562
|
end
|
562
563
|
# This is the mutator version of #mode().
|
563
|
-
def mode!(mode,precision=nil,options={})
|
564
|
+
def mode!(mode, precision=nil, options={})
|
565
|
+
precision, options = nil, precision if options.empty? && precision.is_a?(Hash)
|
564
566
|
set! options.merge(:mode=>mode, :ndig=>precision)
|
565
567
|
end
|
566
568
|
|
567
569
|
# Defines the formatting mode like #mode() but using a different
|
568
570
|
# order of the first two parameters parameters, which is useful
|
569
571
|
# to change the precision only. Refer to #mode().
|
570
|
-
def prec(precision,mode=nil, options={})
|
572
|
+
def prec(precision, mode=nil, options={})
|
571
573
|
dup.prec! precision, mode, options
|
572
574
|
end
|
573
575
|
# This is the mutator version of #prec().
|
574
|
-
def prec!(precision,mode
|
576
|
+
def prec!(precision, mode=nil, options={})
|
577
|
+
mode, options = nil, mode if options.empty? && mode.is_a?(Hash)
|
575
578
|
set! options.merge(:mode=>mode, :ndig=>precision)
|
576
579
|
end
|
577
580
|
|
@@ -1058,13 +1061,18 @@ module Nio
|
|
1058
1061
|
return num
|
1059
1062
|
end
|
1060
1063
|
|
1064
|
+
def [](options)
|
1065
|
+
dup.set! options
|
1066
|
+
end
|
1067
|
+
|
1061
1068
|
|
1062
1069
|
@@fmts = {
|
1063
1070
|
:def=>Fmt.new.freeze
|
1064
1071
|
}
|
1065
1072
|
# Returns the current default format.
|
1066
|
-
def self.default
|
1073
|
+
def self.default(options=nil)
|
1067
1074
|
d = self[:def]
|
1075
|
+
d = d[options] if options
|
1068
1076
|
if block_given?
|
1069
1077
|
d = d.dup
|
1070
1078
|
yield d
|
@@ -1079,10 +1087,15 @@ module Nio
|
|
1079
1087
|
def self.[]=(tag,fmt_def)
|
1080
1088
|
@@fmts[tag.to_sym]=fmt_def.freeze
|
1081
1089
|
end
|
1082
|
-
# Retrieves a named format from the repository
|
1090
|
+
# Retrieves a named format from the repository or constructs a new
|
1091
|
+
# format with the passed options.
|
1083
1092
|
def self.[](tag)
|
1093
|
+
if tag.is_a?(Hash)
|
1094
|
+
Fmt(tag)
|
1095
|
+
else
|
1084
1096
|
@@fmts[tag.to_sym]
|
1085
1097
|
end
|
1098
|
+
end
|
1086
1099
|
|
1087
1100
|
protected
|
1088
1101
|
|
@@ -1105,15 +1118,15 @@ module Nio
|
|
1105
1118
|
@@valid_properties ||= instance_variables.collect{|v| v[1..-1].to_sym}
|
1106
1119
|
|
1107
1120
|
|
1121
|
+
aliased_properties = {}
|
1108
1122
|
properties.each do |k,v|
|
1109
1123
|
al = ALIAS_PROPERTIES[k]
|
1110
|
-
if al
|
1111
|
-
properties[al] = v
|
1112
|
-
properties.delete k
|
1113
|
-
elsif !@@valid_properties.include?(k)
|
1124
|
+
if al.nil? && !@@valid_properties.include?(k)
|
1114
1125
|
raise InvalidOption, "Invalid option: #{k}"
|
1115
1126
|
end
|
1127
|
+
aliased_properties[al || k] = v
|
1116
1128
|
end
|
1129
|
+
properties = aliased_properties
|
1117
1130
|
|
1118
1131
|
|
1119
1132
|
if properties[:grp_sep].nil? && !properties[:dec_sep].nil? && properties[:dec_sep]!=@dec_sep && properties[:dec_sep]==@grp_sep
|
@@ -1267,6 +1280,10 @@ module Nio
|
|
1267
1280
|
|
1268
1281
|
module_function
|
1269
1282
|
|
1283
|
+
def Fmt(options=nil)
|
1284
|
+
Fmt.default(options)
|
1285
|
+
end
|
1286
|
+
|
1270
1287
|
def nio_float_to_bigdecimal(x,prec) # :nodoc:
|
1271
1288
|
if prec.nil?
|
1272
1289
|
x = Fmt.convert(x,BigDecimal,:approx)
|
data/lib/nio/version.rb
CHANGED
data/test/helper.rb
CHANGED
data/test/test_fmt.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
# as published by the Free Software Foundation; either version 2
|
8
8
|
# of the License, or (at your option) any later version.
|
9
9
|
|
10
|
-
require File.dirname(__FILE__)
|
10
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'helper.rb'))
|
11
11
|
require 'test/unit'
|
12
12
|
require 'flt/bigdecimal'
|
13
13
|
include Nio
|
@@ -73,6 +73,27 @@ class TestFmt < Test::Unit::TestCase
|
|
73
73
|
assert_equal "123456789.25",(Rational(123456789)+Rational(1,4)).nio_write
|
74
74
|
end
|
75
75
|
|
76
|
+
def test_optional_mode_prec_parameters
|
77
|
+
x = 0.1
|
78
|
+
assert_equal '0.1000000000', x.nio_write(Fmt.prec(10, :all_digits=>true))
|
79
|
+
assert_equal '1.000000000E-1', x.nio_write(Fmt.prec(10, :sci, :all_digits=>true))
|
80
|
+
assert_equal '0.1', x.nio_write(Fmt.prec(10, :all_digits=>false))
|
81
|
+
assert_equal '0.10000', x.nio_write(Fmt.prec(5).mode(:gen, :all_digits=>true))
|
82
|
+
assert_equal '1.0000E-1', x.nio_write(Fmt.prec(5).mode(:sci, :all_digits=>true))
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_fmt_constructor
|
86
|
+
x = 0.1
|
87
|
+
assert_equal '0.10000000000000001', x.nio_write(Fmt[:all_digits=>true])
|
88
|
+
assert_equal '0.1', x.nio_write(Fmt(:all_digits=>false))
|
89
|
+
assert_equal '0.10000000000000001', x.nio_write(Fmt(:all_digits=>true))
|
90
|
+
assert_equal '0.1', x.nio_write(Fmt.prec(5)[:all_digits=>false])
|
91
|
+
assert_equal '0.10000', x.nio_write(Fmt.prec(5)[:all_digits=>true])
|
92
|
+
assert_equal '0,1', x.nio_write(Fmt[:comma])
|
93
|
+
assert_equal '0.10000000000000001', x.nio_write(Fmt[:all_digits=>true])
|
94
|
+
assert_equal '0,10000000000000001', x.nio_write(Fmt[:comma][:all_digits=>true])
|
95
|
+
end
|
96
|
+
|
76
97
|
def test_basic_fmt_float
|
77
98
|
|
78
99
|
assert_equal 2,Float::RADIX
|
@@ -367,7 +388,7 @@ class TestFmt < Test::Unit::TestCase
|
|
367
388
|
assert_equal Fmt.convert(x_d,Float,:exact), x_f
|
368
389
|
assert_equal Fmt.convert(x_d,Float,:approx), x_f
|
369
390
|
|
370
|
-
x_d = BigDecimal('355')
|
391
|
+
x_d = BigDecimal('355').div(226,20)
|
371
392
|
x_f = Float(355)/226
|
372
393
|
assert_equal Fmt.convert(x_d,Float,:exact), x_f
|
373
394
|
assert_equal Fmt.convert(x_d,Float,:approx), x_f
|
data/test/test_repdec.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
# as published by the Free Software Foundation; either version 2
|
8
8
|
# of the License, or (at your option) any later version.
|
9
9
|
|
10
|
-
|
10
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'helper.rb'))
|
11
11
|
require 'test/unit'
|
12
12
|
include Nio
|
13
13
|
require 'yaml'
|
data/test/test_rtnlzr.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
|
3
|
-
require File.dirname(__FILE__)
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'helper.rb'))
|
4
4
|
include Nio
|
5
5
|
require 'yaml'
|
6
6
|
require 'flt'
|
@@ -12,8 +12,12 @@ require 'bigdecimal/math'
|
|
12
12
|
|
13
13
|
require 'bigdecimal/math'
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
if RUBY_VERSION>="1.9.2"
|
16
|
+
BgMth = BigMath
|
17
|
+
else
|
18
|
+
module BgMth
|
19
|
+
extend BigMath
|
20
|
+
end
|
17
21
|
end
|
18
22
|
|
19
23
|
|
data/test/test_tools.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 5
|
9
|
+
version: 0.2.5
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Javier Goizueta
|
@@ -9,29 +14,39 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-06-01 00:00:00 +02:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: flt
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
26
|
- - ">="
|
22
27
|
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 1
|
30
|
+
- 0
|
31
|
+
- 0
|
23
32
|
version: 1.0.0
|
24
|
-
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: bones
|
27
|
-
|
28
|
-
|
29
|
-
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
30
40
|
requirements:
|
31
41
|
- - ">="
|
32
42
|
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 2
|
45
|
+
- 1
|
46
|
+
- 1
|
33
47
|
version: 2.1.1
|
34
|
-
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id002
|
35
50
|
description: Numeric input/output
|
36
51
|
email: javier@goizueta.info
|
37
52
|
executables: []
|
@@ -97,21 +112,25 @@ rdoc_options:
|
|
97
112
|
require_paths:
|
98
113
|
- lib
|
99
114
|
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
none: false
|
100
116
|
requirements:
|
101
117
|
- - ">="
|
102
118
|
- !ruby/object:Gem::Version
|
119
|
+
segments:
|
120
|
+
- 0
|
103
121
|
version: "0"
|
104
|
-
version:
|
105
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
106
124
|
requirements:
|
107
125
|
- - ">="
|
108
126
|
- !ruby/object:Gem::Version
|
127
|
+
segments:
|
128
|
+
- 0
|
109
129
|
version: "0"
|
110
|
-
version:
|
111
130
|
requirements: []
|
112
131
|
|
113
132
|
rubyforge_project: nio
|
114
|
-
rubygems_version: 1.3.
|
133
|
+
rubygems_version: 1.3.7
|
115
134
|
signing_key:
|
116
135
|
specification_version: 3
|
117
136
|
summary: Numeric input/output
|