From 5f607d8dce6bf75d7c6fde213522e25123b22338 Mon Sep 17 00:00:00 2001 From: Lukas Rist Date: Thu, 9 Nov 2023 21:33:10 +0100 Subject: [PATCH 1/3] go mod --- .travis.yml | 9 --------- go.mod | 5 +++++ go.sum | 2 ++ testfiles/TestDumpToFileLoadFromFile | Bin 0 -> 1835 bytes testfiles/TestDumpToFileMergeFromFile | Bin 0 -> 80 bytes 5 files changed, 7 insertions(+), 9 deletions(-) delete mode 100644 .travis.yml create mode 100644 go.mod create mode 100644 go.sum create mode 100644 testfiles/TestDumpToFileLoadFromFile create mode 100644 testfiles/TestDumpToFileMergeFromFile diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e54fb88..0000000 --- a/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: go - -go: - - 1.0 - - 1.1 - - 1.2 - -install: - - go get github.com/fvbock/uds-go/set \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..9889751 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module github.com/glaslos/trie + +go 1.21.2 + +require github.com/fvbock/uds-go v0.0.0-20150825055119-e378dd1356b9 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..8f34aaf --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/fvbock/uds-go v0.0.0-20150825055119-e378dd1356b9 h1:PI8D0UwtC04m+FUaqB8RPOeuicjr896/afA5jlvpojA= +github.com/fvbock/uds-go v0.0.0-20150825055119-e378dd1356b9/go.mod h1:J+KQJ2ZNVvd2gibb4nuUJbXVCSdKCFGn0ch/FI9xPlw= diff --git a/testfiles/TestDumpToFileLoadFromFile b/testfiles/TestDumpToFileLoadFromFile new file mode 100644 index 0000000000000000000000000000000000000000..86a8c8b4ee139ddf2a908e89ad24ef569d3aa7a9 GIT binary patch literal 1835 zcmY*aNv~RHcK=WH190vw!mg$APDyn zF0mtEYTHgzD1^%?K7imnD= z8`%;Gv%riSU>BG)t*LEps%1?^no=@~SNn;%ZelqqS=Lx9LqiQ3FEI)@3U22NpVNq4 zWKSm@up%pBd+RjR3v8*JVPGn+ehW-%rybrca5yppu)?pZehY~**+rOI`yTZQ_*NpN zsRGk?WM-tDZCUG|mAsIdsn7+pKs*}uCEHaw! zy^{UfgCdl_^ws7XBPo~TkN=Zi)>H)OSE zHAMNi*x;3@7RnAXd=A^>u?UTiV#MC&Oq}8D^mRTj_gPSwsKKb4`wT|b5@F&kdk_c+ z;k52c+Z1?mwmSLd-V!!6xv13U-Ws+urK(6akqkDAP&uEI)%gT71F&pdFWF7)BfAVJXtNw>53FJ9; zy59F8&h<4sA~RQH!IYCy_V%)}^1KB~*4jLz6J1W4=EcUxtVgpd$cs_A;`(6D^D8eu ze*-p$A=z_o4{p-zp~~Zmd@@!S$)1OLS$igp=Uf-9Js?dTSW@j`W9a;>@=zy5Jlm(@ j@QM+1{v(!%G6iqp)&4B0nw}V}r+L(a@y6t2Ps;iq0NOZQ literal 0 HcmV?d00001 diff --git a/testfiles/TestDumpToFileMergeFromFile b/testfiles/TestDumpToFileMergeFromFile new file mode 100644 index 0000000000000000000000000000000000000000..2b7b4ba0e853488da8105ae0eaac1b359c7719e5 GIT binary patch literal 80 zcmd=6-^j$s^uLLL@qYsYgM2+Rkki1x$i&DRmY7qT%E-gO$m*P5npeWe!oa|w2vo?- Z$WoG84B|7gff%VNj7$t5F`ybI1^_RJ5~BbB literal 0 HcmV?d00001 From 51f18148841de351a6d890d70bbd950827670b63 Mon Sep 17 00:00:00 2001 From: Lukas Rist Date: Sun, 26 Nov 2023 13:51:46 +0100 Subject: [PATCH 2/3] cleanup and tidy --- branch.go | 6 +- testfiles/TestDumpToFileLoadFromFile | Bin 1835 -> 0 bytes testfiles/TestDumpToFileMergeFromFile | Bin 80 -> 0 bytes trie.go | 76 +++++++++----------------- trie_test.go | 3 + 5 files changed, 29 insertions(+), 56 deletions(-) delete mode 100644 testfiles/TestDumpToFileLoadFromFile delete mode 100644 testfiles/TestDumpToFileMergeFromFile diff --git a/branch.go b/branch.go index 699871a..ce337f1 100644 --- a/branch.go +++ b/branch.go @@ -248,10 +248,7 @@ func (b *Branch) delete(entry []byte) (deleted bool) { /* */ func (b *Branch) has(entry []byte) bool { - if b.getBranch(entry) != nil { - return true - } - return false + return b.getBranch(entry) != nil } func (b *Branch) hasCount(entry []byte) (bool, int64) { @@ -443,7 +440,6 @@ func (b *Branch) setEnd(flag bool) { } } b.End = flag - return } func (b *Branch) String() string { diff --git a/testfiles/TestDumpToFileLoadFromFile b/testfiles/TestDumpToFileLoadFromFile deleted file mode 100644 index 86a8c8b4ee139ddf2a908e89ad24ef569d3aa7a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1835 zcmY*aNv~RHcK=WH190vw!mg$APDyn zF0mtEYTHgzD1^%?K7imnD= z8`%;Gv%riSU>BG)t*LEps%1?^no=@~SNn;%ZelqqS=Lx9LqiQ3FEI)@3U22NpVNq4 zWKSm@up%pBd+RjR3v8*JVPGn+ehW-%rybrca5yppu)?pZehY~**+rOI`yTZQ_*NpN zsRGk?WM-tDZCUG|mAsIdsn7+pKs*}uCEHaw! zy^{UfgCdl_^ws7XBPo~TkN=Zi)>H)OSE zHAMNi*x;3@7RnAXd=A^>u?UTiV#MC&Oq}8D^mRTj_gPSwsKKb4`wT|b5@F&kdk_c+ z;k52c+Z1?mwmSLd-V!!6xv13U-Ws+urK(6akqkDAP&uEI)%gT71F&pdFWF7)BfAVJXtNw>53FJ9; zy59F8&h<4sA~RQH!IYCy_V%)}^1KB~*4jLz6J1W4=EcUxtVgpd$cs_A;`(6D^D8eu ze*-p$A=z_o4{p-zp~~Zmd@@!S$)1OLS$igp=Uf-9Js?dTSW@j`W9a;>@=zy5Jlm(@ j@QM+1{v(!%G6iqp)&4B0nw}V}r+L(a@y6t2Ps;iq0NOZQ diff --git a/testfiles/TestDumpToFileMergeFromFile b/testfiles/TestDumpToFileMergeFromFile deleted file mode 100644 index 2b7b4ba0e853488da8105ae0eaac1b359c7719e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 zcmd=6-^j$s^uLLL@qYsYgM2+Rkki1x$i&DRmY7qT%E-gO$m*P5npeWe!oa|w2vo?- Z$WoG84B|7gff%VNj7$t5F`ybI1^_RJ5~BbB diff --git a/trie.go b/trie.go index c59bb40..4e4f4c1 100644 --- a/trie.go +++ b/trie.go @@ -1,15 +1,10 @@ package trie import ( - "bufio" - "bytes" "encoding/gob" - "errors" "fmt" "io" - "log" "os" - "time" ) type Trie struct { @@ -149,47 +144,34 @@ using encoding/gob. The Trie itself can currently not be encoded directly because gob does not directly support structs with a sync.Mutex on them. */ -func (t *Trie) DumpToFile(fname string) (err error) { +func (t *Trie) DumpToFile(fname string) error { t.Root.Lock() entries := t.Members() t.Root.Unlock() - buf := new(bytes.Buffer) - enc := gob.NewEncoder(buf) - if err = enc.Encode(entries); err != nil { - err = errors.New(fmt.Sprintf("Could encode Trie entries for dump file: %v", err)) - return - } - f, err := os.Create(fname) if err != nil { - err = errors.New(fmt.Sprintf("Could not save dump file: %v", err)) - return + return fmt.Errorf("could not save dump file: %w", err) } defer f.Close() - w := bufio.NewWriter(f) - _, err = w.Write(buf.Bytes()) - if err != nil { - err = errors.New(fmt.Sprintf("Error writing to dump file: %v", err)) - return + enc := gob.NewEncoder(f) + if err := enc.Encode(entries); err != nil { + return fmt.Errorf("could encode Trie entries for dump file: %w", err) + } - // log.Printf("wrote %d bytes to dumpfile %s\n", bl, fname) - w.Flush() - return + return nil } /* MergeFromFile loads a gib encoded wordlist from a file and Add() them to the `Trie`. */ // TODO: write tests for merge -func (t *Trie) MergeFromFile(fname string) (err error) { +func (t *Trie) MergeFromFile(fname string) error { entries, err := loadTrieFile(fname) if err != nil { - return + return err } - log.Printf("Got %v entries\n", len(entries)) - startTime := time.Now() for _, mi := range entries { b := t.GetBranch(mi.Value) if b != nil { @@ -203,51 +185,43 @@ func (t *Trie) MergeFromFile(fname string) (err error) { b.Unlock() } } - log.Printf("merging words to index took: %v\n", time.Since(startTime)) - return + return nil } /* LoadFromFile loads a gib encoded wordlist from a file and creates a new Trie by Add()ing all of them. */ -func LoadFromFile(fname string) (tr *Trie, err error) { - tr = NewTrie() +func LoadFromFile(fname string) (*Trie, error) { + tr := NewTrie() entries, err := loadTrieFile(fname) if err != nil { - return + return tr, err } - log.Printf("Got %v entries\n", len(entries)) - startTime := time.Now() for _, mi := range entries { b := tr.Add(mi.Value) b.Count = mi.Count } - log.Printf("adding words to index took: %v\n", time.Since(startTime)) - - return + return tr, nil } -func loadTrieFile(fname string) (entries []*MemberInfo, err error) { - log.Println("Load trie from", fname) +func loadTrieFile(fname string) ([]*MemberInfo, error) { f, err := os.Open(fname) if err != nil { - err = errors.New(fmt.Sprintf("Could not open Trie file: %v", err)) - } else { - defer f.Close() + return nil, fmt.Errorf("could not open Trie file: %w", err) + } + defer f.Close() - buf := bufio.NewReader(f) - dec := gob.NewDecoder(buf) - if err = dec.Decode(&entries); err != nil { + var entries []*MemberInfo + dec := gob.NewDecoder(f) + if err = dec.Decode(&entries); err != nil { + if err != nil { if err == io.EOF && entries == nil { - log.Println("Nothing to decode. Seems the file is empty.") - err = nil - } else { - err = errors.New(fmt.Sprintf("Decoding error: %v", err)) - return + return entries, nil } + return entries, fmt.Errorf("decoding error: %w", err) } } - return + return entries, nil } diff --git a/trie_test.go b/trie_test.go index 72af81a..321ee96 100644 --- a/trie_test.go +++ b/trie_test.go @@ -900,6 +900,9 @@ func TestTrieDumpToFileLoadFromFile(t *testing.T) { n++ } err := tr.DumpToFile("testfiles/TestDumpToFileLoadFromFile") + if err != nil { + t.Error(err) + } loadedTrie, err := LoadFromFile("testfiles/TestDumpToFileLoadFromFile") if err != nil { From 7ffb9d45e4233b985fc68667d3b2993257cfbbc5 Mon Sep 17 00:00:00 2001 From: Lukas Rist Date: Sun, 26 Nov 2023 14:04:53 +0100 Subject: [PATCH 3/3] ignore test files, clean lint --- .gitignore | 5 ++++- branch.go | 11 ++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 8a50b99..1dc77e9 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,7 @@ _testmain.go # tmp *# -.#* \ No newline at end of file +.#* + +# test files +/testfiles/Test* diff --git a/branch.go b/branch.go index ce337f1..186040f 100644 --- a/branch.go +++ b/branch.go @@ -40,11 +40,12 @@ func (b *Branch) add(entry []byte) (addedBranch *Branch) { if b.LeafValue == nil && len(b.Branches) == 0 { if len(entry) > 0 { b.LeafValue = entry - } else { - // something came in but we already have branches for it - // so the tail was the current branches index but no value - // to push. just mark the current idx position as End } + // else { + // something came in but we already have branches for it + // so the tail was the current branches index but no value + // to push. just mark the current idx position as End + // } b.setEnd(true) addedBranch = b return @@ -215,7 +216,7 @@ func (b *Branch) delete(entry []byte) (deleted bool) { if len(b.Branches) == 0 && b.Count == 0 { b.LeafValue = nil } else if len(b.Branches) == 1 && b.Count == 0 { - b = b.pullUp() + b.pullUp() } return true }