// Package controller add by blacknc <blacknc@163.com> at 2023/11/13 17:53:54
package controller

import (
	"strconv"
	"sync/atomic"
	"testing"
	"time"
)

func TestCounter_Add(t *testing.T) {
	c := &Counter{
		maxLength: 20,
		capacity:  240,
		counter:   make([]atomic.Int64, 240),
		lastKey:   atomic.Int64{},
	}

	for i := 0; i < 1000; i++ {
		t.Run("Add_OK_"+strconv.Itoa(i), func(t *testing.T) {
			if got := c.Add(time.Now().Unix(), 1); got < 1 {
				t.Errorf("Counter.Add() = %v, want >= 1", got)
			}
		})
	}

	time.Sleep(time.Second * 5)
	for i := 1000; i < 2000; i++ {
		t.Run("Add_OK_"+strconv.Itoa(i), func(t *testing.T) {
			if got := c.Add(time.Now().Unix(), 1); got < 1 {
				t.Errorf("Counter.Add() = %v, want >= 1", got)
			}
		})
	}

	time.Sleep(time.Second * 10)
	t.Run("Count_OK", func(t *testing.T) {
		if got := c.Count(time.Now().Unix()); got != 2000 {
			t.Errorf("Counter.Add() = %v, want %v", got, 2000)
		}
	})
}
