primetable 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/js/prime.js +6 -8
- data/lib/primetable.rb +3 -3
- data/lib/primetable/version.rb +1 -1
- data/spec/primetable_spec.rb +34 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 566ac4a8fea09057f10c6a0de3a8fe8e3e777f4d
|
4
|
+
data.tar.gz: 51efa22f323ae8bd1adf0c1c050e2f3533a241e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8699d55cc6edf5fc7f62a84ac132ca57c79d1f08bdb0d7726a2bcd3af4ff41d068a2ff8089be24541814feaa930b84434d8eed618bc08497a3146b998a1da4a0
|
7
|
+
data.tar.gz: 6df357240c68bbbbdc1214e328b7dd75c5c99855c1ee54c2a2ca1bcef90fa988863b35e3e813736dac32cb88b2d0c6b3ef4659e80cb9038a43a6ed6bbf3bab69
|
data/Gemfile.lock
CHANGED
data/js/prime.js
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
// LIBPRIME
|
2
|
+
// Script: prime.js
|
3
|
+
// Author: Day Davis Waterbury
|
4
|
+
// License: MIT (../LICENSE.txt)
|
5
|
+
|
1
6
|
var factors = [];
|
2
7
|
var primes = [];
|
3
8
|
|
@@ -20,7 +25,7 @@ function libPrime(method, n, count) {
|
|
20
25
|
}
|
21
26
|
return primes;
|
22
27
|
}
|
23
|
-
|
28
|
+
|
24
29
|
// We don't care about divisibility by 1, so we begin at 2
|
25
30
|
var divisor = 2;
|
26
31
|
|
@@ -77,10 +82,3 @@ function primeFactors(n) {
|
|
77
82
|
function generatePrimes(n,count) {
|
78
83
|
return libPrime("generatePrimes",n, count);
|
79
84
|
}
|
80
|
-
// Try it out
|
81
|
-
// // console.log(isPrime(1));
|
82
|
-
// console.log(generatePrimes(1999867));
|
83
|
-
// Try it out
|
84
|
-
// for (var i = 1; i < 1002; i++) {
|
85
|
-
// // console.log(i + " is " + (isPrime(i) ? "PRIME" : "COMPOSITE") + (!(isPrime(i)) ? (": " + primeFactors(i)) : ""));
|
86
|
-
// }
|
data/lib/primetable.rb
CHANGED
@@ -131,7 +131,7 @@ class PrimeTable
|
|
131
131
|
# Here we read in the file one line at a time. Yes I looked for a faster way. Try :fast (-f).
|
132
132
|
# 1) We don't want to slurp the whole file...what if the file was even larger? Not cool.
|
133
133
|
# 2) IO.readlines gets the file one line at a time, so we need a line number, not an index.
|
134
|
-
IO.readlines("data/prime.dat").each_with_index{|line,ln|
|
134
|
+
IO.readlines("#{ROOT_DIR}/data/prime.dat").each_with_index{|line,ln|
|
135
135
|
|
136
136
|
# When we find the lines we want, we concatenate them into a single array. We get extra.
|
137
137
|
if (ln >= first_line and ln <= last_line)
|
@@ -152,8 +152,8 @@ class PrimeTable
|
|
152
152
|
# One nice thing about this is that I can easily set a timeout, so if someone asks us to run
|
153
153
|
# some astronomical prime, we won't seize up the CPU forever. 7000ms is arbitrary.
|
154
154
|
calc_primes_js = V8::Context.new timeout: 7000
|
155
|
-
File.open("js/prime.js") do |file|
|
156
|
-
calc_primes_js.eval(file
|
155
|
+
File.open("#{ROOT_DIR}/js/prime.js") do |file|
|
156
|
+
calc_primes_js.eval(file)
|
157
157
|
end
|
158
158
|
primes_js = calc_primes_js.eval("generatePrimes(#{first},#{count})")
|
159
159
|
YAML::load("[#{primes_js}]")
|
data/lib/primetable/version.rb
CHANGED
data/spec/primetable_spec.rb
CHANGED
@@ -81,9 +81,18 @@ Common options:
|
|
81
81
|
expect(PrimeTable::VERSION).not_to be nil
|
82
82
|
end
|
83
83
|
|
84
|
+
it "can access the JS script for generating primes" do
|
85
|
+
expect(`head -n 1 #{ROOT_DIR}/js/prime.js`).to eq "// LIBPRIME\n"
|
86
|
+
end
|
87
|
+
|
88
|
+
it "can access the data file for pre-calculated primes" do
|
89
|
+
expect(`head -n 1 #{ROOT_DIR}/data/prime.dat`).to eq "[2,3,5,7,11,13,17,19,23,29]\n"
|
90
|
+
end
|
91
|
+
|
84
92
|
it 'executes when called on the command line' do
|
85
93
|
expect(`primetable`).to include("PrimeTable is running...\n")
|
86
94
|
end
|
95
|
+
|
87
96
|
it 'executes *and* prints out a run time when passed -t or --time' do
|
88
97
|
execution_output = `primetable -t`
|
89
98
|
expect(execution_output).to include(@expected_execution_output)
|
@@ -91,22 +100,36 @@ Common options:
|
|
91
100
|
execution_output = `primetable --time`
|
92
101
|
expect(execution_output).to include(@expected_execution_output)
|
93
102
|
expect(execution_output).to include(@expected_time_output)
|
94
|
-
end
|
103
|
+
end
|
104
|
+
|
95
105
|
it 'prints out the version number when passed -v or --version' do
|
96
|
-
|
106
|
+
execution_output = `primetable -v`
|
107
|
+
expect(execution_output).to include(@expected_version_output)
|
108
|
+
execution_output = `primetable --version`
|
109
|
+
expect(execution_output).to include(@expected_version_output)
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'it does *not* generate a table when called with *only* -v or --version' do
|
113
|
+
execution_output = `primetable -v`
|
114
|
+
expect(execution_output).not_to include(@expected_table_display_first_ten)
|
115
|
+
execution_output = `primetable --version`
|
116
|
+
expect(execution_output).not_to include(@expected_table_display_first_ten)
|
97
117
|
end
|
118
|
+
|
98
119
|
it 'executes *and* prints out a run time *and* prints out the version number when passed both -t and -v arguments' do
|
99
120
|
execution_output = `primetable -tv`
|
100
121
|
expect(execution_output).to include(@expected_execution_output)
|
101
122
|
expect(execution_output).to include(@expected_time_output)
|
102
123
|
expect(execution_output).to include(@expected_version_output)
|
103
124
|
end
|
125
|
+
|
104
126
|
it 'executes *and* prints out a run time *and* prints out the version number when passed both --time and --version arguments' do
|
105
127
|
execution_output = `primetable --time --version`
|
106
128
|
expect(execution_output).to include(@expected_execution_output)
|
107
129
|
expect(execution_output).to include(@expected_time_output)
|
108
130
|
expect(execution_output).to include(@expected_version_output)
|
109
131
|
end
|
132
|
+
|
110
133
|
it 'prints out usage details when passed -h or --help' do
|
111
134
|
execution_output = `primetable -h`
|
112
135
|
expect(execution_output).to include(@expected_help_output)
|
@@ -114,16 +137,25 @@ Common options:
|
|
114
137
|
expect(execution_output).to include(@expected_help_output)
|
115
138
|
end
|
116
139
|
|
140
|
+
it 'it does *not* generate a table when called with *only* -h or --help' do
|
141
|
+
execution_output = `primetable -h`
|
142
|
+
expect(execution_output).not_to include(@expected_table_display_first_ten)
|
143
|
+
execution_output = `primetable --help`
|
144
|
+
expect(execution_output).not_to include(@expected_table_display_first_ten)
|
145
|
+
end
|
146
|
+
|
117
147
|
it "has the right data when we run it with :load" do
|
118
148
|
test_instance = PrimeTable.new(2,10,:load,true)
|
119
149
|
expect(test_instance.primes).to eq(@expected_first_ten_primes)
|
120
150
|
expect(test_instance.table).to eq(@expected_table_with_first_ten_primes)
|
121
151
|
end
|
152
|
+
|
122
153
|
it "has the right data when we run it with :fast" do
|
123
154
|
test_instance = PrimeTable.new(2,10,:fast,true)
|
124
155
|
expect(test_instance.primes).to eq(@expected_first_ten_primes)
|
125
156
|
expect(test_instance.table).to eq(@expected_table_with_first_ten_primes)
|
126
157
|
end
|
158
|
+
|
127
159
|
it "has the right data when we run it with :calc" do
|
128
160
|
test_instance = PrimeTable.new(2,10,:calc,true)
|
129
161
|
expect(test_instance.primes).to eq(@expected_first_ten_primes)
|