2022-02-21 17:33:58 +08:00
|
|
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
|
|
|
|
|
|
|
|
package caches_test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"github.com/TeaOSLab/EdgeNode/internal/caches"
|
|
|
|
|
"github.com/iwind/TeaGo/assert"
|
|
|
|
|
"github.com/iwind/TeaGo/logs"
|
|
|
|
|
"testing"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges(t *testing.T) {
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(1, 100)
|
|
|
|
|
r.Add(50, 300)
|
|
|
|
|
|
|
|
|
|
r.Add(30, 80)
|
|
|
|
|
r.Add(30, 100)
|
|
|
|
|
r.Add(30, 400)
|
|
|
|
|
r.Add(1000, 10000)
|
|
|
|
|
r.Add(200, 1000)
|
|
|
|
|
r.Add(200, 10040)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
logs.PrintAsJSON(r.Ranges, t)
|
|
|
|
|
t.Log("max:", r.Max())
|
2022-02-21 17:33:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges1(t *testing.T) {
|
|
|
|
|
var a = assert.NewAssertion(t)
|
|
|
|
|
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(1, 100)
|
|
|
|
|
r.Add(1, 101)
|
|
|
|
|
r.Add(1, 102)
|
|
|
|
|
r.Add(2, 103)
|
|
|
|
|
r.Add(200, 300)
|
|
|
|
|
r.Add(1, 1000)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
var rs = r.Ranges
|
2022-02-21 17:33:58 +08:00
|
|
|
logs.PrintAsJSON(rs, t)
|
|
|
|
|
a.IsTrue(len(rs) == 1)
|
|
|
|
|
if len(rs) == 1 {
|
|
|
|
|
a.IsTrue(rs[0][0] == 1)
|
|
|
|
|
a.IsTrue(rs[0][1] == 1000)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges2(t *testing.T) {
|
|
|
|
|
// low -> high
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(1, 100)
|
|
|
|
|
r.Add(1, 101)
|
|
|
|
|
r.Add(1, 102)
|
|
|
|
|
r.Add(2, 103)
|
|
|
|
|
r.Add(200, 300)
|
|
|
|
|
r.Add(301, 302)
|
|
|
|
|
r.Add(303, 304)
|
|
|
|
|
r.Add(250, 400)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
var rs = r.Ranges
|
2022-02-21 17:33:58 +08:00
|
|
|
logs.PrintAsJSON(rs, t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges3(t *testing.T) {
|
|
|
|
|
// high -> low
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(301, 302)
|
|
|
|
|
r.Add(303, 304)
|
|
|
|
|
r.Add(200, 300)
|
|
|
|
|
r.Add(250, 400)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
var rs = r.Ranges
|
2022-02-21 17:33:58 +08:00
|
|
|
logs.PrintAsJSON(rs, t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges4(t *testing.T) {
|
|
|
|
|
// nearby
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(301, 302)
|
|
|
|
|
r.Add(303, 304)
|
|
|
|
|
r.Add(305, 306)
|
|
|
|
|
|
|
|
|
|
r.Add(417, 417)
|
|
|
|
|
r.Add(410, 415)
|
|
|
|
|
r.Add(400, 409)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
var rs = r.Ranges
|
2022-02-21 17:33:58 +08:00
|
|
|
logs.PrintAsJSON(rs, t)
|
|
|
|
|
t.Log(r.Contains(400, 416))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges5(t *testing.T) {
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
for j := 0; j < 1000; j++ {
|
|
|
|
|
r.Add(int64(j), int64(j+100))
|
|
|
|
|
}
|
2022-03-03 19:36:28 +08:00
|
|
|
logs.PrintAsJSON(r.Ranges, t)
|
2022-02-21 17:33:58 +08:00
|
|
|
}
|
|
|
|
|
|
2022-03-04 22:42:03 +08:00
|
|
|
func TestNewPartialRanges_Nearest(t *testing.T) {
|
|
|
|
|
{
|
|
|
|
|
// nearby
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-03-04 22:42:03 +08:00
|
|
|
r.Add(301, 400)
|
|
|
|
|
r.Add(401, 500)
|
|
|
|
|
r.Add(501, 600)
|
|
|
|
|
|
|
|
|
|
t.Log(r.Nearest(100, 200))
|
|
|
|
|
t.Log(r.Nearest(300, 350))
|
|
|
|
|
t.Log(r.Nearest(302, 350))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
// nearby
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-03-04 22:42:03 +08:00
|
|
|
r.Add(301, 400)
|
|
|
|
|
r.Add(450, 500)
|
|
|
|
|
r.Add(550, 600)
|
|
|
|
|
|
|
|
|
|
t.Log(r.Nearest(100, 200))
|
|
|
|
|
t.Log(r.Nearest(300, 350))
|
|
|
|
|
t.Log(r.Nearest(302, 350))
|
|
|
|
|
t.Log(r.Nearest(302, 440))
|
|
|
|
|
t.Log(r.Nearest(302, 1000))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-06 14:40:31 +08:00
|
|
|
func TestNewPartialRanges_Large_Range(t *testing.T) {
|
|
|
|
|
var a = assert.NewAssertion(t)
|
|
|
|
|
|
|
|
|
|
var largeSize int64 = 10000000000000
|
|
|
|
|
t.Log(largeSize/1024/1024/1024, "G")
|
|
|
|
|
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-03-06 14:40:31 +08:00
|
|
|
r.Add(1, largeSize)
|
|
|
|
|
jsonData, err := r.AsJSON()
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
t.Log(string(jsonData))
|
|
|
|
|
|
|
|
|
|
r2, err := caches.NewPartialRangesFromJSON(jsonData)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
a.IsTrue(largeSize == r2.Ranges[0][1])
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-21 17:33:58 +08:00
|
|
|
func TestNewPartialRanges_AsJSON(t *testing.T) {
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
for j := 0; j < 1000; j++ {
|
|
|
|
|
r.Add(int64(j), int64(j+100))
|
|
|
|
|
}
|
|
|
|
|
data, err := r.AsJSON()
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
t.Log(string(data))
|
|
|
|
|
|
|
|
|
|
r2, err := caches.NewPartialRangesFromJSON(data)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
2022-03-03 19:36:28 +08:00
|
|
|
t.Log(r2.Ranges)
|
2022-02-21 17:33:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BenchmarkNewPartialRanges(b *testing.B) {
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
for j := 0; j < 1000; j++ {
|
|
|
|
|
r.Add(int64(j), int64(j+100))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|