diff options
Diffstat (limited to 'example/main.go')
| -rw-r--r-- | example/main.go | 138 |
1 files changed, 126 insertions, 12 deletions
diff --git a/example/main.go b/example/main.go index 90efe25..c180350 100644 --- a/example/main.go +++ b/example/main.go @@ -4,6 +4,8 @@ package main import ( + "fmt" + "math/rand" "os" "go.wit.com/log" @@ -20,25 +22,105 @@ var uniqueKeys []string var pb *Fruits func main() { - // pb = NewFruits() - pb = new(Fruits) - pb.Uuid = "test" - pb.Version = "v0.0.2" - - fruit := &Fruit{ - Brand: "mom", - City: "New NewYork", + pb = NewFruits() + // attempt to load basket.pb + if err := pb.loadBasket(); err != nil { + log.Info("load basket failed. running this for the first time?") + fruit := &Fruit{ + Brand: "mom", + City: "New NewYork", + } + testAppend(fruit) + appendByUPC(fruit) + } + if pb == nil { + log.Info("This should not have happened") + os.Exit(-1) } + pb.printTable() + pb.addThings() + pb.printTable() + pb.saveBasket() + pb.sortTable(100) +} + +/* x := new(Fruit) x = &Fruit{ - Brand: "dad", + Brand: "fry", City: "Germany", } - appendByUPC(x) - appendByUPC(fruit) + pb.printTable() - testAppend(fruit) testAppend(x) +*/ + +func (pb *Fruits) printTable() { + var count int + all := pb.All() + for all.Scan() { + tmp := all.Next() + count += 1 + log.Printf("found %d %s %s\n", count, tmp.Brand, tmp.City) + if count > 5 { + break + } + } + log.Printf("Total entries: %d\n", pb.Len()) +} + +func (pb *Fruits) sortTable(i int) { + var count int + all := pb.SortByBrand() + for all.Scan() { + tmp := all.Next() + count += 1 + log.Printf("found %d %s %s\n", count, tmp.Brand, tmp.City) + if count > i { + break + } + } + log.Printf("Total entries: %d\n", pb.Len()) +} + +// adds 10 new entries +func (pb *Fruits) addThings() { + var added int + var count int = rand.Intn(10000) + // var base string = "bender" + for { + count += rand.Intn(1000) + var found bool + name := fmt.Sprintf("bender%d", count) + all := pb.All() + for all.Scan() { + tmp := all.Next() + if tmp.Brand == name { + // log.Printf("tmp name EQUAL %d %s vs %s city = %s len=%d\n", count, tmp.Brand, name, tmp.City, pb.Len()) + found = true + break + } + // log.Printf("DID NOT EXIST %d %s vs %s city = %s len=%d\n", count, tmp.Brand, name, tmp.City, pb.Len()) + } + if found { + continue + } + // log.Printf("DID NOT EXIST %d %s len=%d\n", count, name, pb.Len()) + tmp := new(Fruit) + tmp.Brand = name + tmp.City = "paris" + if pb.AppendUniqueBrand(tmp) { + // log.Printf("AppendUniqueBrand() ok len=%s %s %d\n", tmp.Brand, tmp.City, pb.Len()) + } else { + log.Printf("AppendUniqueBrand() ERROR len=%s %s %d\n", tmp.Brand, tmp.City, pb.Len()) + os.Exit(-1) + } + pb.Append(tmp) + added += 1 + if added > 10 { + return + } + } } func testAppend(fruit *Fruit) { @@ -70,3 +152,35 @@ func appendByUPC(fruit *Fruit) { log.Info("AppendUnique() test2 failed ok", fruit.Brand, fruit.City) } } + +func (pb *Fruits) saveBasket() error { + data, err := pb.Marshal() + if err != nil { + return err + } + + w, err := os.OpenFile("basket.pb", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + return err + } + w.Write(data) + w.Close() + log.Info("saved basket.pb ok") + return nil +} + +func (pb *Fruits) loadBasket() error { + if pb == nil { + pb = new(Fruits) + } + data, err := os.ReadFile("basket.pb") + if err != nil { + return err + } + + if err := pb.Unmarshal(data); err != nil { + return err + } + log.Info("loaded basket.pb ok") + return nil +} |
