Skip to content

Commit 422cb6a

Browse files
committed
Refactored Routes
1 parent 716ac14 commit 422cb6a

21 files changed

+412
-341
lines changed

main.go

+9-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import (
77
"os/signal"
88
"syscall"
99

10-
"github.com/alexsanjoseph/riemann-divisor-sum-go/riemann"
10+
"github.com/alexsanjoseph/riemann-divisor-sum-go/riemann/divisordb"
11+
"github.com/alexsanjoseph/riemann-divisor-sum-go/riemann/populate"
12+
"github.com/alexsanjoseph/riemann-divisor-sum-go/riemann/search"
1113
)
1214

1315
var (
@@ -17,7 +19,7 @@ var (
1719
minWitnessValue = flag.Float64("minWitnessValue", 1.75, "minimum Witness Value to persist")
1820
)
1921

20-
func handleClose(db riemann.DivisorDb) {
22+
func handleClose(db divisordb.DivisorDb) {
2123
fmt.Println("Got Interrupt. Shutting down...")
2224
summarizeOutput := db.Summarize()
2325
fmt.Println("\nHighest Number Analyzed\n======")
@@ -35,25 +37,25 @@ func main() {
3537
sigCh := make(chan os.Signal, 1)
3638
signal.Notify(sigCh, os.Interrupt, syscall.SIGINT)
3739

38-
sqlDB := riemann.SqliteDivisorDb{DBPath: "divisorDb.sqlite"}
39-
var ddb = riemann.DivisorDb(&sqlDB)
40+
sqlDB := divisordb.SqliteDivisorDb{DBPath: "divisorDb.sqlite"}
41+
var ddb = divisordb.DivisorDb(&sqlDB)
4042

4143
// imDB := riemann.InMemoryDivisorDb{}
4244
// var ddb = riemann.DivisorDb(&imDB)
4345

4446
ddb.Initialize()
4547
defer ddb.Close()
4648

47-
sqlsdb := riemann.SqliteSearchDb{DBPath: "searchDb.sqlite"}
48-
ssdb := riemann.SearchStateDB(&sqlsdb)
49+
sqlsdb := search.SqliteSearchDb{DBPath: "searchDb.sqlite"}
50+
ssdb := search.SearchStateDB(&sqlsdb)
4951

5052
// imsdb := riemann.InMemorySearchDb{}
5153
// ssdb := riemann.SearchStateDB(&imsdb)
5254

5355
ssdb.Initialize()
5456
defer ssdb.Close()
5557

56-
go riemann.PopulateDB(ddb, ssdb, *stateType, *batchSize, *totalBatches, *minWitnessValue)
58+
go populate.PopulateDB(ddb, ssdb, *stateType, *batchSize, *totalBatches, *minWitnessValue)
5759
<-sigCh
5860
handleClose(ddb)
5961
}

riemann/database.go

-8
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,6 @@ type SummaryStats struct {
1616
LargestWitnessValue RiemannDivisorSum
1717
}
1818

19-
type DivisorDb interface {
20-
Initialize()
21-
Load() []RiemannDivisorSum
22-
Upsert([]RiemannDivisorSum)
23-
Summarize() SummaryStats
24-
Close()
25-
}
26-
2719
func (rds *RiemannDivisorSum) Print() string {
2820
return fmt.Sprintf(
2921
"Number: %s, DivisorSum: %s, WitnessValue %f\n",

riemann/divisor_database_test.go riemann/divisordb/divisor_database_test.go

+34-30
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,56 @@
1-
package riemann_test
1+
package divisordb_test
22

33
import (
44
"math/big"
55
"os"
66
"sort"
7+
"testing"
8+
"time"
79

810
"github.com/alexsanjoseph/riemann-divisor-sum-go/riemann"
11+
"github.com/alexsanjoseph/riemann-divisor-sum-go/riemann/divisordb"
912
. "github.com/onsi/ginkgo/v2"
13+
"github.com/onsi/ginkgo/v2/types"
1014
. "github.com/onsi/gomega"
1115
)
1216

13-
const DivisorDBPath = "testDivisorDB.sqlite"
14-
15-
func setupDivisorDB(inputDb riemann.DivisorDb) riemann.DivisorDb {
16-
os.Remove(DivisorDBPath)
17-
db := riemann.DivisorDb(inputDb)
18-
db.Initialize()
19-
return db
17+
func TestDivisor(t *testing.T) {
18+
RegisterFailHandler(Fail)
19+
RunSpecs(t, "DivisorDB Tests", types.ReporterConfig{
20+
SlowSpecThreshold: 100 * time.Millisecond,
21+
})
2022
}
2123

24+
const DivisorDBPath = "testDivisorDB.sqlite"
25+
2226
var _ = AfterEach(func() {
2327
os.Remove(DivisorDBPath)
2428
})
2529

2630
var _ = Describe("Parametrized Database Tests", func() {
2731

28-
DescribeTable("is initially empty", func(inputDb riemann.DivisorDb) {
29-
db := setupDivisorDB(inputDb)
32+
DescribeTable("is initially empty", func(inputDb divisordb.DivisorDb) {
33+
db := divisordb.SetupDivisorDB(inputDb, DivisorDBPath)
3034
loadedData := db.Load()
3135
Expect(len(loadedData)).To(Equal(0))
3236

3337
},
34-
Entry("SQLite", &riemann.SqliteDivisorDb{DBPath: DivisorDBPath}),
35-
Entry("In-Memory", &riemann.InMemoryDivisorDb{}),
38+
Entry("SQLite", &divisordb.SqliteDivisorDb{DBPath: DivisorDBPath}),
39+
Entry("In-Memory", &divisordb.InMemoryDivisorDb{}),
3640
)
3741

38-
DescribeTable("Multiple initializations should be Idempotent", func(inputDb riemann.DivisorDb) {
39-
db := setupDivisorDB(inputDb)
42+
DescribeTable("Multiple initializations should be Idempotent", func(inputDb divisordb.DivisorDb) {
43+
db := divisordb.SetupDivisorDB(inputDb, DivisorDBPath)
4044
db.Initialize()
4145
db.Initialize()
4246
Expect(true)
4347
},
44-
Entry("SQLite", &riemann.SqliteDivisorDb{DBPath: DivisorDBPath}),
45-
Entry("In-Memory", &riemann.InMemoryDivisorDb{}),
48+
Entry("SQLite", &divisordb.SqliteDivisorDb{DBPath: DivisorDBPath}),
49+
Entry("In-Memory", &divisordb.InMemoryDivisorDb{}),
4650
)
4751

48-
DescribeTable("Upserts correctly", func(inputDb riemann.DivisorDb) {
49-
db := setupDivisorDB(inputDb)
52+
DescribeTable("Upserts correctly", func(inputDb divisordb.DivisorDb) {
53+
db := divisordb.SetupDivisorDB(inputDb, DivisorDBPath)
5054
records := []riemann.RiemannDivisorSum{
5155
{N: *big.NewInt(1), DivisorSum: *big.NewInt(1), WitnessValue: 1},
5256
{N: *big.NewInt(2), DivisorSum: *big.NewInt(2), WitnessValue: 2},
@@ -93,12 +97,12 @@ var _ = Describe("Parametrized Database Tests", func() {
9397
})
9498

9599
},
96-
Entry("SQLite", &riemann.SqliteDivisorDb{DBPath: DivisorDBPath}),
97-
Entry("In-Memory", &riemann.InMemoryDivisorDb{}),
100+
Entry("SQLite", &divisordb.SqliteDivisorDb{DBPath: DivisorDBPath}),
101+
Entry("In-Memory", &divisordb.InMemoryDivisorDb{}),
98102
)
99103

100-
DescribeTable("Summarizes", func(inputDb riemann.DivisorDb) {
101-
db := setupDivisorDB(inputDb)
104+
DescribeTable("Summarizes", func(inputDb divisordb.DivisorDb) {
105+
db := divisordb.SetupDivisorDB(inputDb, DivisorDBPath)
102106
By("correctly summarizing empty data", func() {
103107
summaryData := db.Summarize()
104108
expectedSummaryData := riemann.SummaryStats{
@@ -124,12 +128,12 @@ var _ = Describe("Parametrized Database Tests", func() {
124128
})
125129

126130
},
127-
Entry("SQLite", &riemann.SqliteDivisorDb{DBPath: DivisorDBPath}),
128-
Entry("In-Memory", &riemann.InMemoryDivisorDb{}),
131+
Entry("SQLite", &divisordb.SqliteDivisorDb{DBPath: DivisorDBPath}),
132+
Entry("In-Memory", &divisordb.InMemoryDivisorDb{}),
129133
)
130134

131-
DescribeTable("Summarizes for float values", func(inputDb riemann.DivisorDb) {
132-
db := setupDivisorDB(inputDb)
135+
DescribeTable("Summarizes for float values", func(inputDb divisordb.DivisorDb) {
136+
db := divisordb.SetupDivisorDB(inputDb, DivisorDBPath)
133137
By("correctly summarizing non-empty data", func() {
134138
records := []riemann.RiemannDivisorSum{
135139
{N: *big.NewInt(10092), DivisorSum: *big.NewInt(24388), WitnessValue: 1.088},
@@ -144,19 +148,19 @@ var _ = Describe("Parametrized Database Tests", func() {
144148
Expect(summaryData).To(Equal(expectedSummaryData))
145149
})
146150
},
147-
Entry("SQLite", &riemann.SqliteDivisorDb{DBPath: DivisorDBPath}),
148-
Entry("In-Memory", &riemann.InMemoryDivisorDb{}),
151+
Entry("SQLite", &divisordb.SqliteDivisorDb{DBPath: DivisorDBPath}),
152+
Entry("In-Memory", &divisordb.InMemoryDivisorDb{}),
149153
)
150154

151155
Describe("Represents Bigint Correctly in DB", func() {
152156
It("should work correctly", func() {
153-
actualOutput := riemann.GetStableTextRepresentationOfBigInt(*big.NewInt(1), 10)
157+
actualOutput := divisordb.GetStableTextRepresentationOfBigInt(*big.NewInt(1), 10)
154158
expectedOutput := "0000000001"
155159
Expect(actualOutput).To(Equal(expectedOutput))
156160
})
157161

158162
It("should fail in large cases correctly", func() {
159-
Expect(func() { riemann.GetStableTextRepresentationOfBigInt(*big.NewInt(100), 2) }).To(PanicWith("number is bigger than can be represented by string"))
163+
Expect(func() { divisordb.GetStableTextRepresentationOfBigInt(*big.NewInt(100), 2) }).To(PanicWith("number is bigger than can be represented by string"))
160164
})
161165

162166
})

riemann/divisordb/divisor_db.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package divisordb
2+
3+
import (
4+
"os"
5+
6+
"github.com/alexsanjoseph/riemann-divisor-sum-go/riemann"
7+
)
8+
9+
type DivisorDb interface {
10+
Initialize()
11+
Load() []riemann.RiemannDivisorSum
12+
Upsert([]riemann.RiemannDivisorSum)
13+
Summarize() riemann.SummaryStats
14+
Close()
15+
}
16+
17+
func SetupDivisorDB(inputDb DivisorDb, DivisorDBPath string) DivisorDb {
18+
os.Remove(DivisorDBPath)
19+
db := DivisorDb(inputDb)
20+
db.Initialize()
21+
return db
22+
}
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package divisordb
2+
3+
import (
4+
"fmt"
5+
"math/big"
6+
7+
"github.com/alexsanjoseph/riemann-divisor-sum-go/riemann"
8+
)
9+
10+
type InMemoryDivisorDb struct {
11+
data map[string]riemann.RiemannDivisorSum
12+
}
13+
14+
func (imdb *InMemoryDivisorDb) Initialize() {
15+
imdb.data = map[string]riemann.RiemannDivisorSum{}
16+
}
17+
18+
func (imdb InMemoryDivisorDb) Load() []riemann.RiemannDivisorSum {
19+
output := []riemann.RiemannDivisorSum{}
20+
for _, value := range imdb.data {
21+
output = append(output, value)
22+
}
23+
return output
24+
}
25+
26+
func (imdb InMemoryDivisorDb) Upsert(rds []riemann.RiemannDivisorSum) {
27+
for _, value := range rds {
28+
imdb.data[value.N.String()] = value
29+
}
30+
}
31+
32+
func (imdb InMemoryDivisorDb) Summarize() riemann.SummaryStats {
33+
if len(imdb.data) == 0 {
34+
return riemann.SummaryStats{
35+
LargestWitnessValue: riemann.RiemannDivisorSum{},
36+
LargestComputedN: riemann.RiemannDivisorSum{},
37+
}
38+
}
39+
largest_computed_n := riemann.RiemannDivisorSum{N: *big.NewInt(-1)}
40+
largest_witness_value := riemann.RiemannDivisorSum{WitnessValue: -1}
41+
42+
for _, rds := range imdb.data {
43+
if rds.N.Cmp(&largest_computed_n.N) == 1 {
44+
largest_computed_n = rds
45+
}
46+
if rds.WitnessValue > largest_witness_value.WitnessValue {
47+
largest_witness_value = rds
48+
}
49+
}
50+
return riemann.SummaryStats{
51+
LargestWitnessValue: largest_witness_value,
52+
LargestComputedN: largest_computed_n,
53+
}
54+
55+
}
56+
57+
func (imdb *InMemoryDivisorDb) Close() {
58+
fmt.Println("Inmemory Divisor DB Closed!")
59+
}

riemann/sqlite_divisor_db.go riemann/divisordb/sqlite_divisor_db.go

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
package riemann
1+
package divisordb
22

33
import (
44
"database/sql"
55
"fmt"
66
"log"
77
"math/big"
88

9+
"github.com/alexsanjoseph/riemann-divisor-sum-go/riemann"
910
_ "github.com/mattn/go-sqlite3"
1011
)
1112

@@ -36,7 +37,7 @@ func (sqdb *SqliteDivisorDb) Initialize() {
3637
}
3738
}
3839

39-
func (sqdb SqliteDivisorDb) Load() []RiemannDivisorSum {
40+
func (sqdb SqliteDivisorDb) Load() []riemann.RiemannDivisorSum {
4041
sqlStmt := `
4142
SELECT n, divisor_sum, witness_value
4243
FROM RiemannDivisorSums
@@ -47,7 +48,7 @@ func (sqdb SqliteDivisorDb) Load() []RiemannDivisorSum {
4748
panic(err)
4849
}
4950
defer rows.Close()
50-
output := []RiemannDivisorSum{}
51+
output := []riemann.RiemannDivisorSum{}
5152
for rows.Next() {
5253
var n, divisorSum string
5354
var witnessValue float64
@@ -65,7 +66,7 @@ func (sqdb SqliteDivisorDb) Load() []RiemannDivisorSum {
6566
log.Fatal("unable to parse divisor sum")
6667
}
6768

68-
output = append(output, RiemannDivisorSum{
69+
output = append(output, riemann.RiemannDivisorSum{
6970
N: *N,
7071
DivisorSum: *DivisorSum,
7172
WitnessValue: witnessValue,
@@ -86,7 +87,7 @@ func GetStableTextRepresentationOfBigInt(N big.Int, fixedLength int) string {
8687
return NString
8788
}
8889

89-
func (sqdb SqliteDivisorDb) Upsert(rds []RiemannDivisorSum) {
90+
func (sqdb SqliteDivisorDb) Upsert(rds []riemann.RiemannDivisorSum) {
9091

9192
tx, err := sqdb.db.Begin()
9293
if err != nil {
@@ -118,7 +119,7 @@ func (sqdb SqliteDivisorDb) Upsert(rds []RiemannDivisorSum) {
118119
tx.Commit()
119120
}
120121

121-
func (sqdb SqliteDivisorDb) Summarize() SummaryStats {
122+
func (sqdb SqliteDivisorDb) Summarize() riemann.SummaryStats {
122123

123124
largestNStms := `
124125
SELECT *
@@ -131,9 +132,9 @@ func (sqdb SqliteDivisorDb) Summarize() SummaryStats {
131132
var witnessValue float64
132133
err := row.Scan(&n, &divisorSum, &witnessValue)
133134
if err != nil {
134-
return SummaryStats{
135-
LargestWitnessValue: RiemannDivisorSum{},
136-
LargestComputedN: RiemannDivisorSum{},
135+
return riemann.SummaryStats{
136+
LargestWitnessValue: riemann.RiemannDivisorSum{},
137+
LargestComputedN: riemann.RiemannDivisorSum{},
137138
}
138139
}
139140

@@ -147,7 +148,7 @@ func (sqdb SqliteDivisorDb) Summarize() SummaryStats {
147148
log.Fatal("unable to parse divisor sum")
148149
}
149150

150-
largest_computed_n := RiemannDivisorSum{
151+
largest_computed_n := riemann.RiemannDivisorSum{
151152
N: *N,
152153
DivisorSum: *DivisorSum,
153154
WitnessValue: witnessValue,
@@ -174,13 +175,13 @@ func (sqdb SqliteDivisorDb) Summarize() SummaryStats {
174175
log.Fatal("unable to parse divisor sum")
175176
}
176177

177-
largest_witness_value := RiemannDivisorSum{
178+
largest_witness_value := riemann.RiemannDivisorSum{
178179
N: *N,
179180
DivisorSum: *DivisorSum,
180181
WitnessValue: witnessValue,
181182
}
182183

183-
return SummaryStats{
184+
return riemann.SummaryStats{
184185
LargestWitnessValue: largest_witness_value,
185186
LargestComputedN: largest_computed_n,
186187
}

0 commit comments

Comments
 (0)