random-walk 0.0.1 → 0.0.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.
@@ -2,18 +2,25 @@
2
2
 
3
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.
4
4
 
5
- The resulting array will always stay within the limits 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.
6
6
 
7
- ## Usage
7
+ == Usage
8
8
 
9
- ```ruby
10
- require 'random-walk'
9
+ require 'random-walk'
11
10
 
12
- # RandomWalk.generate(limits, array_length)
13
- RandomWalk.generate(10..40, 5) # [11, 12, 11, 10, 10]
14
- RandomWalk.generate(10..40, 5) # [27, 28, 29, 30, 29]
15
- RandomWalk.generate(10..40, 5) # [27, 28, 29, 30, 29]
16
- ```
11
+ # RandomWalk.generate(range, array_length)
12
+ RandomWalk.generate(10..40, 5) # [11, 12, 11, 10, 10]
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
17
24
 
18
25
  == Contributing to random-walk
19
26
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -1,8 +1,9 @@
1
1
  class RandomWalk
2
+ attr_accessor :x, :y
3
+
2
4
  def self.generate(limits, array_length)
3
5
  starting_point = Random.rand(limits)
4
6
  output_array = [starting_point]
5
-
6
7
  (array_length - 1).times do
7
8
  add_or_subtract = Random.rand(-1..1)
8
9
  end_point = output_array.last + add_or_subtract
@@ -12,7 +13,24 @@ class RandomWalk
12
13
  output_array << output_array.last
13
14
  end
14
15
  end
15
-
16
16
  return output_array
17
17
  end
18
+
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
35
+ end
18
36
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "random-walk"
8
- s.version = "0.0.1"
8
+ s.version = "0.0.2"
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"]
12
- s.date = "2013-01-06"
12
+ s.date = "2013-01-07"
13
13
  s.description = "Generates an array of random-walk data within user-specified limits and of an arbitrary length for use in testing."
14
14
  s.email = "egtann@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -1,17 +1,62 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "RandomWalk" do
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)
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
9
12
  end
10
13
  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
+ end
20
+
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
37
+
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
42
+ end
11
43
  end
12
44
 
13
- it "returns an array of the correct length" do
14
- results = RandomWalk.generate(100..200, 250)
15
- results.length.should == 250
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
60
+ end
16
61
  end
17
62
  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.1
4
+ version: 0.0.2
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: 2013-01-06 00:00:00.000000000 Z
12
+ date: 2013-01-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -111,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
111
  version: '0'
112
112
  segments:
113
113
  - 0
114
- hash: -3124899964672894423
114
+ hash: -3032803507122637849
115
115
  required_rubygems_version: !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements: