random-walk 0.0.2 → 0.0.3

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.
@@ -1,26 +1,17 @@
1
1
  = random-walk
2
2
 
3
- This is an extremely simple gem for generating random-walk test data in an array. It's useful for statistics testing, where random data falls short for testing something like simple regression.
3
+ This is an extremely simple gem for generating random-walk test data in an array. It's useful for statistics or finance testing, where random data falls short for something like simple regression or the movement of stocks.
4
4
 
5
- The resulting array will always stay within the range provided (inclusive). The random-walk adds +1, 0, or -1 on each iteration.
5
+ The resulting array will always stay within the range provided (inclusive). The random-walk adds +1, 0, or -1 on each iteration by default.
6
6
 
7
7
  == Usage
8
8
 
9
9
  require 'random-walk'
10
10
 
11
- # RandomWalk.generate(range, array_length)
11
+ # RandomWalk.generate(range, array_length, step=1)
12
12
  RandomWalk.generate(10..40, 5) # [11, 12, 11, 10, 10]
13
13
  RandomWalk.generate(10..40, 5) # [27, 28, 29, 30, 29]
14
-
15
- # generate_vectors(x_range, y_range, vector_length)
16
- rw = RandomWalk.new
17
- rw.generate_vectors(0..99, 0..1023, 5)
18
- rw.x # [78, 79, 80, 81, 81]
19
- rw.y # [700, 701, 702, 702, 701]
20
-
21
- # fit_y_to_x(fit_chance)
22
- rw.fit_y_to_x(100) # Perfect fit. If x goes up by 1, y goes up by 1
23
- rw.fit_y_to_x(50) # 50% chance. If x goes up by 1, y has a 50 percent chance of going up by 1
14
+ RandomWalk.generate(10..40, 5, 2) # [34, 36, 36, 38, 36]
24
15
 
25
16
  == Contributing to random-walk
26
17
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -1,11 +1,10 @@
1
1
  class RandomWalk
2
- attr_accessor :x, :y
3
-
4
- def self.generate(limits, array_length)
2
+ def self.generate(limits, array_length, step = 1)
5
3
  starting_point = Random.rand(limits)
6
4
  output_array = [starting_point]
5
+
7
6
  (array_length - 1).times do
8
- add_or_subtract = Random.rand(-1..1)
7
+ add_or_subtract = Random.rand(-step..step)
9
8
  end_point = output_array.last + add_or_subtract
10
9
  if end_point <= limits.max && end_point >= limits.min
11
10
  output_array << end_point
@@ -13,24 +12,7 @@ class RandomWalk
13
12
  output_array << output_array.last
14
13
  end
15
14
  end
16
- return output_array
17
- end
18
15
 
19
- def generate_vectors(x_limits, y_limits, vector_length)
20
- self.x = RandomWalk.generate(x_limits, vector_length)
21
- self.y = RandomWalk.generate(y_limits, vector_length)
22
- end
23
-
24
- def fit_y_to_x(fit_chance)
25
- raise 'Fit chance must be between 0 and 100' unless fit_chance <= 100 && fit_chance >= 0
26
- self.x.each_with_index do |value, i|
27
- if self.x[i] && self.x[i+1]
28
- x_diff = self.x[i] - self.x[i+1]
29
- rand = Random.rand(100 / fit_chance)
30
- if rand == 0
31
- self.y[i+1] = self.y[i] - x_diff
32
- end
33
- end
34
- end
16
+ return output_array
35
17
  end
36
18
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "random-walk"
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Evan Tann"]
@@ -1,62 +1,35 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "RandomWalk" do
4
- describe "generate" do
5
- it "returns results between given limits" do
6
- 5.times do
7
- results = RandomWalk.generate(0..10, 1000)
8
- results.each do |result|
9
- result.should be >= 0
10
- result.should be <= 10
11
- end
4
+ it "returns results between given limits" do
5
+ 5.times do
6
+ results = RandomWalk.generate(0..10, 1000)
7
+ results.each do |result|
8
+ (result.should be >= 0) && (result.should be <= 10)
12
9
  end
13
10
  end
14
-
15
- it "returns an array of the correct length" do
16
- results = RandomWalk.generate(100..200, 250)
17
- results.length.should == 250
18
- end
19
11
  end
20
12
 
21
- describe "generate_vectors" do
22
- let(:rw) { RandomWalk.new }
23
-
24
- it "returns results between given limits" do
25
- 5.times do
26
- rw.generate_vectors(0..10, 0..10, 1000)
27
- rw.x.each do |result|
28
- result.should be >= 0
29
- result.should be <= 10
30
- end
31
- rw.y.each do |result|
32
- result.should be >= 0
33
- result.should be <= 10
34
- end
35
- end
36
- end
13
+ it "returns an array of the correct length" do
14
+ results = RandomWalk.generate(100..200, 250)
15
+ results.length.should == 250
16
+ end
37
17
 
38
- it "returns 2 arrays of the correct length" do
39
- rw.generate_vectors(0..99, 0..1023, 500)
40
- rw.x.length.should == 500
41
- rw.y.length.should == 500
18
+ it "uses a default step size of 1" do
19
+ results = RandomWalk.generate(0..10, 1000, 1)
20
+ previous_result = results.first
21
+ results.each do |result|
22
+ (previous_result-1..previous_result+1).should cover(result)
23
+ previous_result = result
42
24
  end
43
25
  end
44
26
 
45
- describe "fit_y_to_x" do
46
- let(:rw) { RandomWalk.new }
47
-
48
- it "fits the y array to the x array perfectly" do
49
- rw.generate_vectors(0..99, 250..1000, 500)
50
- fit_chance = 100
51
- rw.fit_y_to_x(fit_chance)
52
- diff_x, diff_y = 0, 0
53
- rw.x.each_with_index do |result, i|
54
- if rw.x[i+1]
55
- diff_x += rw.x[i] - rw.x[i+1]
56
- diff_y += rw.y[i] - rw.y[i+1]
57
- end
58
- end
59
- diff_x.should == diff_y
27
+ it "uses steps of the specified size" do
28
+ results = RandomWalk.generate(0..10, 1000, 5)
29
+ previous_result = results.first
30
+ results.each do |result|
31
+ (previous_result-5..previous_result+5).should cover(result)
32
+ previous_result = result
60
33
  end
61
34
  end
62
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: random-walk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -109,9 +109,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
109
  - - ! '>='
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
- segments:
113
- - 0
114
- hash: -3032803507122637849
115
112
  required_rubygems_version: !ruby/object:Gem::Requirement
116
113
  none: false
117
114
  requirements:
@@ -125,3 +122,4 @@ signing_key:
125
122
  specification_version: 3
126
123
  summary: Simple random-walk generator
127
124
  test_files: []
125
+ has_rdoc: