upgrade sqlite3
This commit is contained in:
61
server/scanner/stack/stack.go
Normal file
61
server/scanner/stack/stack.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package stack
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
type item struct {
|
||||
value *db.Album
|
||||
next *item
|
||||
}
|
||||
|
||||
type Stack struct {
|
||||
top *item
|
||||
len uint
|
||||
}
|
||||
|
||||
func (s *Stack) Push(v *db.Album) {
|
||||
s.top = &item{
|
||||
value: v,
|
||||
next: s.top,
|
||||
}
|
||||
s.len++
|
||||
}
|
||||
|
||||
func (s *Stack) Pop() *db.Album {
|
||||
if s.len == 0 {
|
||||
return nil
|
||||
}
|
||||
v := s.top.value
|
||||
s.top = s.top.next
|
||||
s.len--
|
||||
return v
|
||||
}
|
||||
|
||||
func (s *Stack) Peek() *db.Album {
|
||||
if s.len == 0 {
|
||||
return nil
|
||||
}
|
||||
return s.top.value
|
||||
}
|
||||
|
||||
func (s *Stack) PeekID() int {
|
||||
if s.len == 0 {
|
||||
return 0
|
||||
}
|
||||
return s.top.value.ID
|
||||
}
|
||||
|
||||
func (s *Stack) String() string {
|
||||
var str strings.Builder
|
||||
str.WriteString("[")
|
||||
for i, f := uint(0), s.top; i < s.len; i++ {
|
||||
str.WriteString(fmt.Sprintf("%d, ", f.value.ID))
|
||||
f = f.next
|
||||
}
|
||||
str.WriteString("]")
|
||||
return str.String()
|
||||
}
|
||||
36
server/scanner/stack/stack_test.go
Normal file
36
server/scanner/stack/stack_test.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package stack
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
func TestFolderStack(t *testing.T) {
|
||||
sta := &Stack{}
|
||||
sta.Push(&db.Album{ID: 3})
|
||||
sta.Push(&db.Album{ID: 4})
|
||||
sta.Push(&db.Album{ID: 5})
|
||||
sta.Push(&db.Album{ID: 6})
|
||||
expected := "[6, 5, 4, 3, ]"
|
||||
actual := sta.String()
|
||||
if expected != actual {
|
||||
t.Errorf("first stack: expected string "+
|
||||
"%q, got %q", expected, actual)
|
||||
}
|
||||
//
|
||||
sta = &Stack{}
|
||||
sta.Push(&db.Album{ID: 27})
|
||||
sta.Push(&db.Album{ID: 4})
|
||||
sta.Peek()
|
||||
sta.Push(&db.Album{ID: 5})
|
||||
sta.Push(&db.Album{ID: 6})
|
||||
sta.Push(&db.Album{ID: 7})
|
||||
sta.Pop()
|
||||
expected = "[6, 5, 4, 27, ]"
|
||||
actual = sta.String()
|
||||
if expected != actual {
|
||||
t.Errorf("second stack: expected string "+
|
||||
"%q, got %q", expected, actual)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user