charosc 0.0.1
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 +17 -0
- data/.travis.yml +3 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +46 -0
- data/Rakefile +5 -0
- data/bin/charosc +53 -0
- data/charosc.gemspec +25 -0
- data/lib/charosc.rb +9 -0
- data/lib/charosc/generator.rb +75 -0
- data/lib/charosc/markov.rb +50 -0
- data/lib/charosc/oscillator.rb +64 -0
- data/lib/charosc/text.rb +18 -0
- data/lib/charosc/version.rb +3 -0
- data/share/pg12299.orig.txt +7525 -0
- data/share/the-mechanical-properties-of-wood.txt +7084 -0
- data/spec/charosc/generator_spec.rb +72 -0
- data/spec/charosc/markov_spec.rb +28 -0
- data/spec/charosc/oscillator_spec.rb +45 -0
- data/spec/charosc/text_spec.rb +22 -0
- data/spec/spec_helper.rb +6 -0
- metadata +137 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
module Charosc
|
|
4
|
+
describe Generator do
|
|
5
|
+
let(:generator) { described_class.new("This is a test.") }
|
|
6
|
+
|
|
7
|
+
describe "default settings" do
|
|
8
|
+
subject { generator }
|
|
9
|
+
|
|
10
|
+
its(:oscil) { should be_an(Oscillator) }
|
|
11
|
+
its(:depth) { should == 3 }
|
|
12
|
+
its(:mod_enabled) { should be_true }
|
|
13
|
+
its(:mod_inc) { should == 1 }
|
|
14
|
+
its(:mod_top) { should == 300 }
|
|
15
|
+
its(:mod_bottom) { should == 2 }
|
|
16
|
+
|
|
17
|
+
describe "Oscillator setup" do
|
|
18
|
+
subject { generator.oscil.options }
|
|
19
|
+
|
|
20
|
+
its([:top]) { should == 300 }
|
|
21
|
+
its([:bottom]) { should == 2 }
|
|
22
|
+
its([:inc]) { should == 1 }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "#generate" do
|
|
27
|
+
subject { generator }
|
|
28
|
+
|
|
29
|
+
it "returns a string of num_chars length" do
|
|
30
|
+
[100, 3000, 2].each do |n|
|
|
31
|
+
subject.generate(n).size.should == n
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context "modulation enabled" do
|
|
36
|
+
before { subject.mod_enabled = true }
|
|
37
|
+
|
|
38
|
+
it "returns a string of num_chars length" do
|
|
39
|
+
[100, 3000, 2].each do |n|
|
|
40
|
+
subject.generate(n).size.should == n
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "#next_depth" do
|
|
45
|
+
it "gets depth from self" do
|
|
46
|
+
subject.oscil.should_receive(:next)
|
|
47
|
+
subject.send(:next_depth)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "modulation not enabled" do
|
|
53
|
+
before { subject.mod_enabled = false }
|
|
54
|
+
|
|
55
|
+
describe "#next_depth" do
|
|
56
|
+
it "gets depth from Oscillator" do
|
|
57
|
+
subject.should_receive(:depth)
|
|
58
|
+
subject.send(:next_depth)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe "#format_text (private)" do
|
|
65
|
+
subject { generator }
|
|
66
|
+
|
|
67
|
+
it "converts \\r to \\n" do
|
|
68
|
+
subject.send(:format_text, "a\rb").should == "a\nb"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Charosc::Markov do
|
|
4
|
+
let(:chars) { "abcabcdabcdeabcdefabcdefg".scan(/./) }
|
|
5
|
+
let(:markov) { described_class.new(chars) }
|
|
6
|
+
|
|
7
|
+
describe "#get_sequence" do
|
|
8
|
+
it "raises if depth is > 1" do
|
|
9
|
+
expect { markov.get_sequence("a", 0) }.to raise_error(ArgumentError)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "get a possible sequence after start_obj" do
|
|
13
|
+
let(:a2) { markov.get_sequence("a", 2) }
|
|
14
|
+
let(:a3) { markov.get_sequence("a", 3) }
|
|
15
|
+
let(:b3) { markov.get_sequence("b", 3) }
|
|
16
|
+
let(:f5) { markov.get_sequence("f", 5) }
|
|
17
|
+
let(:g6) { markov.get_sequence("g", 6) }
|
|
18
|
+
|
|
19
|
+
20.times do
|
|
20
|
+
specify { [%w{b c}].should include(a2) }
|
|
21
|
+
specify { [%w{b c a}, %w{b c d}].should include(a3) }
|
|
22
|
+
specify { [%w{c a b}, %w{c d a}, %w{c d e}].should include(b3) }
|
|
23
|
+
specify { [%w{a b c d e}, %w{g a b c a}].should include(f5) }
|
|
24
|
+
specify { [%w{a b c a b c}].should include(g6) }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Charosc::Oscillator do
|
|
4
|
+
describe "#next" do
|
|
5
|
+
context "1, top: 5, bottom: 1, inc: 1" do
|
|
6
|
+
let(:osc) { described_class.new(1, top: 5, bottom: 1, inc: 1) }
|
|
7
|
+
|
|
8
|
+
it "steps through values" do
|
|
9
|
+
[2, 3, 4, 5, 4, 3, 2, 1, 2, 3].each_with_index do |val, ndx|
|
|
10
|
+
osc.next.should == val
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context "33, top: 5, bottom: 1, inc: 1" do
|
|
16
|
+
let(:osc) { described_class.new(33, top: 5, bottom: 1, inc: 1) }
|
|
17
|
+
|
|
18
|
+
it "steps through values" do
|
|
19
|
+
[4, 3, 2, 1, 2, 3, 4, 5, 4, 3, 2].each_with_index do |val, ndx|
|
|
20
|
+
osc.next.should == val
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context "1, top: 10, bottom: 3, inc: 0.2" do
|
|
26
|
+
let(:osc) { described_class.new(1, top: 10, bottom: 3, inc: 0.2) }
|
|
27
|
+
|
|
28
|
+
it "steps through values" do
|
|
29
|
+
[3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6].each_with_index do |val, ndx|
|
|
30
|
+
osc.next.should == val
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context "499, top: 500, bottom: 5, inc: 1" do
|
|
36
|
+
let(:osc) { described_class.new(499, top: 500, bottom: 5, inc: 1) }
|
|
37
|
+
|
|
38
|
+
it "steps through values" do
|
|
39
|
+
[500, 499, 498, 497, 496].each_with_index do |val, ndx|
|
|
40
|
+
osc.next.should == val
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Charosc::Text do
|
|
4
|
+
let(:text) { described_class.new("abc defA ghijB") }
|
|
5
|
+
|
|
6
|
+
describe "#chars" do
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "#words" do
|
|
10
|
+
it "returns string split on whitespace" do
|
|
11
|
+
text.words.should == ["abc", "defA", "ghijB"]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe "#chars" do
|
|
16
|
+
it "returns array of chars" do
|
|
17
|
+
text.chars.should == [
|
|
18
|
+
"a", "b", "c", " ", "d", "e", "f", "A", " ", "g", "h", "i", "j", "B"
|
|
19
|
+
]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: charosc
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Dan Richert
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2013-02-24 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: weighted_randomizer
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ~>
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 0.1.2
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ~>
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 0.1.2
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: trollop
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ~>
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '1.13'
|
|
38
|
+
type: :runtime
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ~>
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '1.13'
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: ruby-progressbar
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
50
|
+
requirements:
|
|
51
|
+
- - ~>
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: 1.0.2
|
|
54
|
+
type: :runtime
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ~>
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 1.0.2
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: rspec
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
65
|
+
none: false
|
|
66
|
+
requirements:
|
|
67
|
+
- - ~>
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '2.12'
|
|
70
|
+
type: :development
|
|
71
|
+
prerelease: false
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ~>
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '2.12'
|
|
78
|
+
description: Oscillating Markov text generator
|
|
79
|
+
email:
|
|
80
|
+
- dan.richert@gmail.com
|
|
81
|
+
executables:
|
|
82
|
+
- charosc
|
|
83
|
+
extensions: []
|
|
84
|
+
extra_rdoc_files: []
|
|
85
|
+
files:
|
|
86
|
+
- .gitignore
|
|
87
|
+
- .travis.yml
|
|
88
|
+
- Gemfile
|
|
89
|
+
- LICENSE.txt
|
|
90
|
+
- README.md
|
|
91
|
+
- Rakefile
|
|
92
|
+
- bin/charosc
|
|
93
|
+
- charosc.gemspec
|
|
94
|
+
- lib/charosc.rb
|
|
95
|
+
- lib/charosc/generator.rb
|
|
96
|
+
- lib/charosc/markov.rb
|
|
97
|
+
- lib/charosc/oscillator.rb
|
|
98
|
+
- lib/charosc/text.rb
|
|
99
|
+
- lib/charosc/version.rb
|
|
100
|
+
- share/pg12299.orig.txt
|
|
101
|
+
- share/the-mechanical-properties-of-wood.txt
|
|
102
|
+
- spec/charosc/generator_spec.rb
|
|
103
|
+
- spec/charosc/markov_spec.rb
|
|
104
|
+
- spec/charosc/oscillator_spec.rb
|
|
105
|
+
- spec/charosc/text_spec.rb
|
|
106
|
+
- spec/spec_helper.rb
|
|
107
|
+
homepage: ''
|
|
108
|
+
licenses: []
|
|
109
|
+
post_install_message:
|
|
110
|
+
rdoc_options: []
|
|
111
|
+
require_paths:
|
|
112
|
+
- lib
|
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
|
+
none: false
|
|
115
|
+
requirements:
|
|
116
|
+
- - ! '>='
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: '0'
|
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
|
+
none: false
|
|
121
|
+
requirements:
|
|
122
|
+
- - ! '>='
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
125
|
+
requirements: []
|
|
126
|
+
rubyforge_project:
|
|
127
|
+
rubygems_version: 1.8.23
|
|
128
|
+
signing_key:
|
|
129
|
+
specification_version: 3
|
|
130
|
+
summary: Oscillating Markov text generator
|
|
131
|
+
test_files:
|
|
132
|
+
- spec/charosc/generator_spec.rb
|
|
133
|
+
- spec/charosc/markov_spec.rb
|
|
134
|
+
- spec/charosc/oscillator_spec.rb
|
|
135
|
+
- spec/charosc/text_spec.rb
|
|
136
|
+
- spec/spec_helper.rb
|
|
137
|
+
has_rdoc:
|