darvin_functions 0.0.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,9 +6,6 @@
6
6
 
7
7
  VALUE mDarvinFunctions;
8
8
 
9
- /********************************************************************************
10
- * roundNumber
11
- ********************************************************************************/
12
9
  long roundNumber(double value) {
13
10
  if (value == 0.0) return (0); // don't mess with zero
14
11
  if (value > 0.0) return ((long)(value+.5)); // positive number
@@ -17,21 +14,23 @@ long roundNumber(double value) {
17
14
 
18
15
  /* vself is a reference to the module or itself
19
16
  varray is a Ruby array */
20
- VALUE mDarvinFunctions_workout_mmp(VALUE vself, VALUE varray) {
17
+ VALUE mDarvinFunctions_nkmax(VALUE vself, VALUE varray) {
18
+ VALUE new_array;
19
+ int i, j, trail, offset;
20
+ long *tot; // total for specific interval
21
+ long *maxTot; // current sum for (i-1)
22
+
23
+ (void)vself; // silence unused variable warning message
24
+
21
25
  if (NIL_P(varray) || RARRAY_LEN(varray) == 0)
22
26
  return varray;
23
27
 
24
- VALUE new_array = rb_ary_new2(RARRAY_LEN(varray));
25
-
26
- int i, j, trail, offset;
27
- long *tot; // total for specific interval
28
- long *maxTot; // current sum for (i-1)
28
+ new_array = rb_ary_new2(RARRAY_LEN(varray));
29
29
 
30
30
  tot = ALLOCA_N(long, RARRAY_LEN(varray)); // allocate memory
31
31
  maxTot = ALLOCA_N(long, RARRAY_LEN(varray)); // allocate memory
32
32
 
33
33
  trail = 0; // trailing value
34
- memset(maxTot, '\0', sizeof maxTot); // init max totals by slot
35
34
 
36
35
  maxTot[0] = tot[0] = FIX2INT(RARRAY_PTR(varray)[0]); // need first total (for single cell average), seed for others
37
36
 
@@ -45,25 +44,28 @@ VALUE mDarvinFunctions_workout_mmp(VALUE vself, VALUE varray) {
45
44
  * ...
46
45
  * slot4 is initialized to 1 + 2 + 3 + 4 + 5
47
46
  */
48
- for (i=1; i<RARRAY_LEN(varray); i++) // loop thru all the numbers
47
+ for (i=1; i<RARRAY_LEN(varray); i++) // loop thru all the numbers
49
48
  maxTot[i] = tot[i] = (tot[i-1] + FIX2INT(RARRAY_PTR(varray)[i])); // compute tot for subsequent cells (starting at cell 0)
50
49
 
51
- for (offset=1; offset<RARRAY_LEN(varray); offset++) { // loop starting at index 1 (index-1 is the value to subtract)
50
+ for (offset=1; offset<RARRAY_LEN(varray); offset++) { // loop starting at index 1 (index-1 is the value to subtract)
52
51
  trail = FIX2INT(RARRAY_PTR(varray)[offset-1]); // this is the value to subtract from the beginning of the list
53
- for (i=offset; i<RARRAY_LEN(varray); i++) { // first time subtract 1 from all (except n list)
54
- j = i - offset; // subtract trail and add next value
52
+
53
+ for (i=offset; i<RARRAY_LEN(varray); i++) { // first time subtract 1 from all (except n list)
54
+ j = i - offset; // subtract trail and add next value
55
55
  tot[j] += (FIX2INT(RARRAY_PTR(varray)[i]) - trail); // to temp variable
56
- if (tot[j] > maxTot[j]) maxTot[j] = tot[j];// set maxTot for slot if larger
56
+ if (tot[j] > maxTot[j]) maxTot[j] = tot[j]; // set maxTot for slot if larger
57
57
  }
58
58
  }
59
59
 
60
- for (i=0; i<RARRAY_LEN(varray); i++) // first value divided by 1 (ignore it)
60
+ for (i=0; i<RARRAY_LEN(varray); i++) {
61
61
  rb_ary_push(new_array, INT2FIX(roundNumber((double)maxTot[i] / (double)(i+1))));
62
+ }
62
63
 
63
64
  return new_array;
64
65
  }
65
66
 
66
67
  void Init_darvin_functions(){
67
68
  mDarvinFunctions = rb_define_module("DarvinFunctions");
68
- rb_define_module_function(mDarvinFunctions, "workout_mmp", mDarvinFunctions_workout_mmp, 1);
69
+ rb_define_module_function(mDarvinFunctions, "nkmax", mDarvinFunctions_nkmax, 1);
69
70
  }
71
+
@@ -0,0 +1,22 @@
1
+ require 'benchmark'
2
+ require 'darvin_functions'
3
+
4
+ class BenchmarkMMP
5
+ MAX_POWER = 150000 # 1500.00 Watts as an integer
6
+ DURATION = 8 # 8 Hours
7
+
8
+ def run
9
+ data = []
10
+ (DURATION*3600).times do |i|
11
+ value = Math.sin(i % Math::PI / 2)
12
+ data << (value * MAX_POWER * 100 * rand).to_i / 100.0
13
+ end
14
+
15
+ tms = Benchmark.bmbm(10) do |x|
16
+ DURATION.times do |i|
17
+ x.report("#{i+1} hour(s)") { DarvinFunctions::nkmax(data[0...i*3600]) }
18
+ end
19
+ end.last
20
+ end
21
+
22
+ end
@@ -1,44 +1,27 @@
1
- require 'helper'
1
+ require 'test/unit'
2
2
  require 'benchmark'
3
+ require 'darvin_functions'
3
4
 
4
5
  class TestMMP < Test::Unit::TestCase
5
- MAX_POWER = 150000 # 1500.00 Watts as an integer
6
6
 
7
- context "test case" do
8
- should "handle an empty array" do
9
- assert_equal [], DarvinFunctions::workout_mmp([])
10
- end
7
+ def test_handle_an_empty_array
8
+ assert_equal [], DarvinFunctions::nkmax([])
9
+ end
11
10
 
12
- should "handle an array of one" do
13
- assert_equal [10], DarvinFunctions::workout_mmp([10])
14
- end
11
+ def test_handle_an_array_of_one
12
+ assert_equal [10], DarvinFunctions::nkmax([10])
13
+ end
15
14
 
16
- should "handle an array of two" do
17
- assert_equal [10, 7], DarvinFunctions::workout_mmp([10, 4])
18
- end
15
+ def test_handle_an_array_of_two
16
+ assert_equal [10, 7], DarvinFunctions::nkmax([10, 4])
17
+ end
19
18
 
20
- should "handle an array of three" do
21
- assert_equal [10, 7, 5], DarvinFunctions::workout_mmp([10, 4, 2])
22
- end
19
+ def test_handle_an_array_of_three
20
+ assert_equal [10, 7, 5], DarvinFunctions::nkmax([10, 4, 2])
23
21
  end
24
-
25
- context "Benchmark" do
26
-
27
- setup do
28
- @size = 14400
29
- @data = []
30
- @size.times do |i|
31
- value = Math.sin(i % Math::PI / 2)
32
- @data << (value * MAX_POWER * 100 * rand).to_i / 100.0
33
- end
34
- end
35
-
36
- should "run under a minute" do
37
- tms = Benchmark.bmbm(10) do |x|
38
- x.report { DarvinFunctions::workout_mmp(@data) }
39
- end.last
40
- assert tms.total < 60, "#{@size} array took too long: #{tms.total} seconds is too long" # seconds
41
- end
22
+
23
+ def test_handle_an_array_of_three_the_other_way
24
+ assert_equal [10, 7, 5], DarvinFunctions::nkmax([2, 4, 10])
42
25
  end
43
26
 
44
27
  end
metadata CHANGED
@@ -1,78 +1,52 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: darvin_functions
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 2
9
- version: 0.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
12
- - Darvin Bauer
7
+ authors:
13
8
  - Matt Bauer
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2010-06-10 00:00:00 -05:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: shoulda
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- version: "0"
31
- type: :development
32
- version_requirements: *id001
12
+ date: 2012-07-06 00:00:00.000000000 Z
13
+ dependencies: []
33
14
  description: Various functions for data processing, clean up and analysis
34
- email: info@pedalbrain.com
15
+ email: bauer@pedalbrain.com
35
16
  executables: []
36
-
37
- extensions:
17
+ extensions:
38
18
  - ext/extconf.rb
39
- extra_rdoc_files:
40
- - README.rdoc
41
- files:
42
- - ext/darvin_functions.h
19
+ extra_rdoc_files: []
20
+ files:
43
21
  - ext/darvin_functions.c
22
+ - ext/darvin_functions.h
44
23
  - ext/extconf.rb
45
- - README.rdoc
46
- has_rdoc: true
47
- homepage: http://github.com/pedalbrain/Darvin_Functions
24
+ - test/benchmark_mmp.rb
25
+ - test/test_mmp.rb
26
+ homepage: http://github.com/pedalbrain/darvin_functions
48
27
  licenses: []
49
-
50
28
  post_install_message:
51
- rdoc_options:
52
- - --charset=UTF-8
53
- require_paths:
29
+ rdoc_options: []
30
+ require_paths:
54
31
  - lib
55
- required_ruby_version: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- segments:
60
- - 0
61
- version: "0"
62
- required_rubygems_version: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- segments:
67
- - 0
68
- version: "0"
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
69
44
  requirements: []
70
-
71
45
  rubyforge_project:
72
- rubygems_version: 1.3.6
46
+ rubygems_version: 1.8.23
73
47
  signing_key:
74
48
  specification_version: 3
75
- summary: Various functions for data processing, clean up and analysis
76
- test_files:
77
- - test/helper.rb
49
+ summary: Data Processing C Extenstions
50
+ test_files:
51
+ - test/benchmark_mmp.rb
78
52
  - test/test_mmp.rb
@@ -1,7 +0,0 @@
1
- = Darvin_Functions
2
-
3
- Various functions for data processing, clean up and analysis
4
-
5
- == Copyright
6
-
7
- Copyright (c) 2010 Pedal Brain LLC.
@@ -1,10 +0,0 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
- require 'shoulda'
4
-
5
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
- $LOAD_PATH.unshift(File.dirname(__FILE__))
7
- require 'darvin_functions'
8
-
9
- class Test::Unit::TestCase
10
- end