50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
|
|
package allocator_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
. "github.com/onsi/ginkgo/v2"
|
||
|
|
. "github.com/onsi/gomega"
|
||
|
|
|
||
|
|
"zworld/engine/renderapi/cache/allocator"
|
||
|
|
)
|
||
|
|
|
||
|
|
var _ = Describe("", func() {
|
||
|
|
It("allocates!", func() {
|
||
|
|
fl := allocator.New(1024)
|
||
|
|
block, err := fl.Alloc(16)
|
||
|
|
Expect(err).ToNot(HaveOccurred())
|
||
|
|
Expect(block.Size).To(Equal(256))
|
||
|
|
|
||
|
|
err = fl.Free(block.Offset)
|
||
|
|
Expect(err).ToNot(HaveOccurred())
|
||
|
|
|
||
|
|
block2, err := fl.Alloc(257)
|
||
|
|
Expect(err).ToNot(HaveOccurred())
|
||
|
|
Expect(block2.Size).To(Equal(512))
|
||
|
|
})
|
||
|
|
|
||
|
|
It("allocates correct sizes", func() {
|
||
|
|
fl := allocator.New(1024)
|
||
|
|
block, err := fl.Alloc(257)
|
||
|
|
Expect(err).ToNot(HaveOccurred())
|
||
|
|
Expect(block.Size).To(Equal(512))
|
||
|
|
})
|
||
|
|
|
||
|
|
It("assigns tiers correctly", func() {
|
||
|
|
Expect(allocator.GetBucketTier(allocator.MinAlloc)).To(Equal(0))
|
||
|
|
Expect(allocator.GetBucketTier(allocator.MinAlloc + 1)).To(Equal(1))
|
||
|
|
Expect(allocator.GetBucketTier(2 * allocator.MinAlloc)).To(Equal(1))
|
||
|
|
Expect(allocator.GetBucketTier(2*allocator.MinAlloc + 1)).To(Equal(2))
|
||
|
|
})
|
||
|
|
|
||
|
|
It("checks powers of two", func() {
|
||
|
|
Expect(allocator.IsPowerOfTwo(2)).To(BeTrue())
|
||
|
|
Expect(allocator.IsPowerOfTwo(4)).To(BeTrue())
|
||
|
|
Expect(allocator.IsPowerOfTwo(8)).To(BeTrue())
|
||
|
|
Expect(allocator.IsPowerOfTwo(16)).To(BeTrue())
|
||
|
|
|
||
|
|
Expect(allocator.IsPowerOfTwo(0)).To(BeFalse())
|
||
|
|
Expect(allocator.IsPowerOfTwo(3)).To(BeFalse())
|
||
|
|
Expect(allocator.IsPowerOfTwo(121)).To(BeFalse())
|
||
|
|
})
|
||
|
|
})
|