2019-11-15 08:35:32 +03:00
|
|
|
// +build !windows
|
|
|
|
|
2019-10-09 19:59:19 +03:00
|
|
|
package ants
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestNewWorkerStack(t *testing.T) {
|
|
|
|
size := 100
|
|
|
|
q := newWorkerStack(size)
|
|
|
|
if q.len() != 0 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("Len error")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
if !q.isEmpty() {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("IsEmpty error")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
2019-10-09 22:02:04 +03:00
|
|
|
if q.detach() != nil {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("Dequeue error")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWorkerStack(t *testing.T) {
|
2019-10-09 22:20:10 +03:00
|
|
|
q := newWorkerArray(arrayType(-1), 0)
|
2019-10-09 19:59:19 +03:00
|
|
|
|
|
|
|
for i := 0; i < 5; i++ {
|
2019-10-09 22:02:04 +03:00
|
|
|
err := q.insert(&goWorker{recycleTime: time.Now()})
|
2019-10-09 19:59:19 +03:00
|
|
|
if err != nil {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if q.len() != 5 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("Len error")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
expired := time.Now()
|
|
|
|
|
2019-10-09 22:02:04 +03:00
|
|
|
err := q.insert(&goWorker{recycleTime: expired})
|
2019-10-09 19:59:19 +03:00
|
|
|
if err != nil {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("Enqueue error")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
time.Sleep(time.Second)
|
|
|
|
|
|
|
|
for i := 0; i < 6; i++ {
|
2019-10-09 22:02:04 +03:00
|
|
|
err := q.insert(&goWorker{recycleTime: time.Now()})
|
2019-10-09 19:59:19 +03:00
|
|
|
if err != nil {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("Enqueue error")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if q.len() != 12 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("Len error")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
2019-10-20 13:22:13 +03:00
|
|
|
q.retrieveExpiry(time.Second)
|
2019-10-09 19:59:19 +03:00
|
|
|
|
|
|
|
if q.len() != 6 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("Len error")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-11-15 08:35:32 +03:00
|
|
|
// It seems that something wrong with time.Now() on Windows, not sure whether it is a bug on Windows, so exclude this test
|
|
|
|
// from Windows platform temporarily.
|
2019-10-09 19:59:19 +03:00
|
|
|
func TestSearch(t *testing.T) {
|
|
|
|
q := newWorkerStack(0)
|
|
|
|
|
|
|
|
// 1
|
|
|
|
expiry1 := time.Now()
|
|
|
|
|
2019-10-09 22:02:04 +03:00
|
|
|
_ = q.insert(&goWorker{recycleTime: time.Now()})
|
2019-10-09 19:59:19 +03:00
|
|
|
|
2019-10-20 13:22:13 +03:00
|
|
|
index := q.binarySearch(0, q.len()-1, time.Now())
|
2019-10-09 19:59:19 +03:00
|
|
|
if index != 0 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("index should be 0")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
2019-10-20 13:22:13 +03:00
|
|
|
index = q.binarySearch(0, q.len()-1, expiry1)
|
2019-10-09 19:59:19 +03:00
|
|
|
if index != -1 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("index should be -1")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// 2
|
|
|
|
expiry2 := time.Now()
|
2019-10-09 22:02:04 +03:00
|
|
|
_ = q.insert(&goWorker{recycleTime: time.Now()})
|
2019-10-09 19:59:19 +03:00
|
|
|
|
2019-10-20 13:22:13 +03:00
|
|
|
index = q.binarySearch(0, q.len()-1, expiry1)
|
2019-10-09 19:59:19 +03:00
|
|
|
if index != -1 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("index should be -1")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
2019-10-20 13:22:13 +03:00
|
|
|
index = q.binarySearch(0, q.len()-1, expiry2)
|
2019-10-09 19:59:19 +03:00
|
|
|
if index != 0 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("index should be 0")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
2019-10-20 13:22:13 +03:00
|
|
|
index = q.binarySearch(0, q.len()-1, time.Now())
|
2019-10-09 19:59:19 +03:00
|
|
|
if index != 1 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("index should be 1")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// more
|
|
|
|
for i := 0; i < 5; i++ {
|
2019-10-09 22:02:04 +03:00
|
|
|
_ = q.insert(&goWorker{recycleTime: time.Now()})
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
expiry3 := time.Now()
|
|
|
|
|
2019-10-09 22:02:04 +03:00
|
|
|
_ = q.insert(&goWorker{recycleTime: expiry3})
|
2019-10-09 19:59:19 +03:00
|
|
|
|
|
|
|
for i := 0; i < 10; i++ {
|
2019-10-09 22:02:04 +03:00
|
|
|
_ = q.insert(&goWorker{recycleTime: time.Now()})
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
|
2019-10-20 13:22:13 +03:00
|
|
|
index = q.binarySearch(0, q.len()-1, expiry3)
|
2019-10-09 19:59:19 +03:00
|
|
|
if index != 7 {
|
2019-11-15 08:35:32 +03:00
|
|
|
t.Fatal("index should be 7")
|
2019-10-09 19:59:19 +03:00
|
|
|
}
|
|
|
|
}
|