continued_fractions 1.8.1 → 1.8.2
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 +4 -4
- data/CHANGELOG.md +23 -0
- data/lib/continued_fractions/version.rb +1 -1
- metadata +3 -7
- data/Gemfile +0 -4
- data/Rakefile +0 -6
- data/continued_fractions.gemspec +0 -40
- data/spec/continued_fractions/continued_fraction_spec.rb +0 -90
- data/spec/spec_helper.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc3cc4f4da6b42a3c0ef5cf2824484521259c8166aa17d27647daeff911039da
|
4
|
+
data.tar.gz: 63349536f6492a66972004b7a65db93db0c63c1835d4652a74ff9198a738e711
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb01d65d0952130b356d90c20d6ee980fe16001f6973a45e1c4e3a798e4246e544e813954d6eb8a633eaf8c4723fa01da6a3692a7114cf6af7d93bb0f3445baf
|
7
|
+
data.tar.gz: e99077dfdd3897a341c04eb8d73fe0c455b5ddd6fbf2139472d02259dc79d4c589f3c90845bd5d1aaacfba09e7a11906729d28651a212e19567dc3e14a27186f
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
1.8.2 - Make gemspec data dynamic
|
2
|
+
|
3
|
+
1.8.1 - Include Github repo in gemspec
|
4
|
+
|
5
|
+
1.8.0 - Add comparison
|
6
|
+
|
7
|
+
1.7.0 - Accept Float and Rational as well as Integer in operators
|
8
|
+
|
9
|
+
1.6.1 - Remove dependency on Echoe
|
10
|
+
|
11
|
+
v1.6.0 Handle rational numbers, finite continued fractions
|
12
|
+
|
13
|
+
v1.5.0 Remove ContinuedFractions module; Move its methods into ContinuedFraction class
|
14
|
+
|
15
|
+
v1.4.0 Eliminate need to invoke "include ContinuedFractions"
|
16
|
+
|
17
|
+
v1.3.0 Add binary operators: + - * /
|
18
|
+
|
19
|
+
v1.2.0 Change parameter signature of ContinuedFraction#convergents_as_rationals
|
20
|
+
|
21
|
+
v1.1.0 Change public class representation of convergents from an array of Rationals to an array of arrays.
|
22
|
+
|
23
|
+
v0.1.0 Initial release
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: continued_fractions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jose Hales-Garcia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -33,15 +33,11 @@ extra_rdoc_files:
|
|
33
33
|
- README.md
|
34
34
|
- lib/continued_fractions.rb
|
35
35
|
files:
|
36
|
-
-
|
36
|
+
- CHANGELOG.md
|
37
37
|
- LICENSE
|
38
38
|
- README.md
|
39
|
-
- Rakefile
|
40
|
-
- continued_fractions.gemspec
|
41
39
|
- lib/continued_fractions.rb
|
42
40
|
- lib/continued_fractions/version.rb
|
43
|
-
- spec/continued_fractions/continued_fraction_spec.rb
|
44
|
-
- spec/spec_helper.rb
|
45
41
|
homepage: http://jolohaga.github.io/continued_fractions
|
46
42
|
licenses:
|
47
43
|
- MIT
|
data/Gemfile
DELETED
data/Rakefile
DELETED
data/continued_fractions.gemspec
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'continued_fractions/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = "continued_fractions"
|
8
|
-
spec.version = ContinuedFractions::VERSION
|
9
|
-
|
10
|
-
spec.required_rubygems_version = Gem::Requirement.new(">= 1.2") if spec.respond_to? :required_rubygems_version=
|
11
|
-
spec.require_paths = ["lib"]
|
12
|
-
spec.authors = ["Jose Hales-Garcia"]
|
13
|
-
spec.date = "2016-10-26"
|
14
|
-
spec.description = "Class for working with continued fractions"
|
15
|
-
spec.email = "jolohaga@me.com"
|
16
|
-
spec.extra_rdoc_files = ["LICENSE", "README.md", "lib/continued_fractions.rb"]
|
17
|
-
spec.files = ["Gemfile", "LICENSE", "README.md", "Rakefile", "continued_fractions.gemspec", "lib/continued_fractions.rb", "lib/continued_fractions/version.rb", "spec/continued_fractions/continued_fraction_spec.rb", "spec/spec_helper.rb"]
|
18
|
-
spec.homepage = "http://jolohaga.github.io/continued_fractions"
|
19
|
-
spec.licenses = ["MIT"]
|
20
|
-
spec.rdoc_options = ["--line-numbers", "--title", "continued_fractions", "--main", "README.md"]
|
21
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.2.2")
|
22
|
-
spec.rubyforge_project = "continued_fractions"
|
23
|
-
spec.rubygems_version = "3.0.3"
|
24
|
-
spec.summary = "Generate continued fractions"
|
25
|
-
spec.metadata = {
|
26
|
-
"source_code_uri" => "https://github.com/jolohaga/continued_fractions"
|
27
|
-
}
|
28
|
-
|
29
|
-
if spec.respond_to? :specification_version then
|
30
|
-
spec.specification_version = 4
|
31
|
-
|
32
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
33
|
-
spec.add_development_dependency(%q<rspec>, ["~> 3.2"])
|
34
|
-
else
|
35
|
-
spec.add_dependency(%q<rspec>, ["~> 3.2"])
|
36
|
-
end
|
37
|
-
else
|
38
|
-
spec.add_dependency(%q<rspec>, ["~> 3.2"])
|
39
|
-
end
|
40
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "/../spec_helper")
|
2
|
-
|
3
|
-
describe ContinuedFraction do
|
4
|
-
let(:cf) { described_class.new(number, 10) }
|
5
|
-
let(:number) { rand }
|
6
|
-
|
7
|
-
describe '#convergents' do
|
8
|
-
it "returns an array" do
|
9
|
-
expect(cf.convergents).to be_kind_of(Array)
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'with irrational numbers' do
|
13
|
-
it "accurately calculates the convergents" do
|
14
|
-
# First 10 convergents of PI are...
|
15
|
-
convs = [3/1r, 22/7r, 333/106r, 355/113r, 103993/33102r, 104348/33215r, 208341/66317r, 312689/99532r, 833719/265381r, 1146408/364913r]
|
16
|
-
cf = described_class.new(Math::PI,10)
|
17
|
-
expect((cf.convergents_as_rationals - convs)).to be_empty
|
18
|
-
end
|
19
|
-
|
20
|
-
it "contains convergents approaching the number" do
|
21
|
-
0.upto(cf.convergents.length-2) do |i|
|
22
|
-
convergent_rational_i_plus1, convergent_rational_i = cf.convergent_to_rational(cf.convergents[i+1]), cf.convergent_to_rational(cf.convergents[i])
|
23
|
-
expect(((convergent_rational_i_plus1 - cf.number).abs <= (convergent_rational_i - cf.number).abs)).to be true
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
it "contains convergents which are expressed in lowest terms" do
|
28
|
-
1.upto(cf.convergents.length-1) do |i|
|
29
|
-
convergent_rational_i, convergent_rational_i_plus1 = cf.convergent_to_rational(cf.convergent(i)), cf.convergent_to_rational(cf.convergent(i+1))
|
30
|
-
expect((convergent_rational_i.numerator*convergent_rational_i_plus1.denominator - convergent_rational_i_plus1.numerator*convergent_rational_i.denominator)).to eq (-1)**(i)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'with rational numbers' do
|
36
|
-
it 'changes the limit to the number of convergents calculated' do
|
37
|
-
expect(described_class.new(1.5, 10).limit).to be 2
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'calculates the convergents' do
|
41
|
-
convs = [ 1/1r, 3/2r ]
|
42
|
-
expect(described_class.new(1.5, 10).convergents_as_rationals - convs).to be_empty
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe '#number' do
|
48
|
-
it "preserves the number input" do
|
49
|
-
expect(cf.number).to eq number
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe 'operators' do
|
54
|
-
let(:cf2) { described_class.new(rand, 20) }
|
55
|
-
|
56
|
-
%i{+ - * /}.each do |op|
|
57
|
-
describe "#{op}" do
|
58
|
-
[3, 3.0, 3/1r, described_class.new(rand, 20)].each do |rhs|
|
59
|
-
it "#{rhs.class.name} operates on the right-hand side and returns a ContinuedFraction" do
|
60
|
-
expect(cf.send(op, rhs)).to be_kind_of(ContinuedFraction)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
it "Assigns the max limit of the two operands" do
|
65
|
-
result = cf.send(op, cf2)
|
66
|
-
expect(result.limit).to eq [cf.limit, cf2.limit].max
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe 'comparing' do
|
73
|
-
context 'when numbers are the same' do
|
74
|
-
let(:cf2) { described_class.new(cf.number) }
|
75
|
-
|
76
|
-
it "the ContinuedFractions are equal" do
|
77
|
-
expect(cf).to eq cf2
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'when numbers are different' do
|
82
|
-
let(:cond) { [['+', '<'], ['-', '>']].sample }
|
83
|
-
let(:cf2) { described_class.new(cf.number.send(cond[0], 1.0)) }
|
84
|
-
|
85
|
-
it "the ContinuedFractions are unequal" do
|
86
|
-
expect(cf.send(cond[1], cf2)).to be true
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
$LOAD_PATH << File.join(File.dirname(__FILE__), "/../lib")
|
2
|
-
require 'rubygems'
|
3
|
-
require 'rspec'
|
4
|
-
require 'continued_fractions'
|
5
|
-
|
6
|
-
RSpec.configure do |config|
|
7
|
-
# Run specs in random order to surface order dependencies. If you find an
|
8
|
-
# order dependency and want to debug it, you can fix the order by providing
|
9
|
-
# the seed, which is printed after each run.
|
10
|
-
# --seed 1234
|
11
|
-
config.order = "random"
|
12
|
-
config.formatter = :documentation
|
13
|
-
end
|