// Copyright The Monogon Project Authors.
// SPDX-License-Identifier: Apache-2.0

package bmdb

import (
	"testing"
	"time"

	"github.com/google/go-cmp/cmp"
)

// TestBackoffMath exercises the rules of Backoff.
func TestBackoffMath(t *testing.T) {
	for _, te := range []struct {
		name     string
		b        *Backoff
		existing *existingBackoff
		wantSecs []int64
	}{
		{"NoBackoffSet", nil, nil, []int64{1, 1, 1}},
		{"EmptyBackoff", &Backoff{}, nil, []int64{1, 1, 1}},
		{"SimpleBackoff", &Backoff{Initial: time.Minute}, nil, []int64{60, 60, 60}},
		{"ExponentialWithMax",
			&Backoff{Initial: time.Minute, Exponent: 1.1, Maximum: time.Minute * 2},
			nil,
			[]int64{60, 66, 73, 81, 90, 99, 109, 120, 120},
		},

		{"SimpleOverridePrevious",
			&Backoff{Initial: time.Minute},
			&existingBackoff{lastInterval: time.Second * 2},
			[]int64{60, 60, 60},
		},
		{"ExponentialOverridePrevious",
			&Backoff{Initial: time.Minute, Exponent: 2.0, Maximum: time.Minute * 2},
			&existingBackoff{lastInterval: time.Second * 2},
			[]int64{4, 8, 16, 32, 64, 120, 120},
		},

		{"ContinueExisting", nil, &existingBackoff{lastInterval: time.Minute}, []int64{60, 60, 60}},
		{"ContinueExistingInvalid1", nil, &existingBackoff{lastInterval: 0}, []int64{1, 1, 1}},
		{"ContinueExistingInvalid2", nil, &existingBackoff{lastInterval: time.Millisecond}, []int64{1, 1, 1}},

		{"InvalidBackoff1", &Backoff{Exponent: 0.2}, nil, []int64{1, 1, 1}},
		{"InvalidBackoff2", &Backoff{Maximum: time.Millisecond, Initial: time.Millisecond}, nil, []int64{1, 1, 1}},
	} {
		t.Run(te.name, func(t *testing.T) {
			existing := te.existing

			gotSecs := make([]int64, len(te.wantSecs))
			for j := 0; j < len(te.wantSecs); j++ {
				gotSecs[j] = te.b.next(existing)
				existing = &existingBackoff{
					lastInterval: time.Duration(gotSecs[j]) * time.Second,
				}
			}

			if diff := cmp.Diff(te.wantSecs, gotSecs); diff != "" {
				t.Errorf("Difference: %s", diff)
			}
		})
	}
}
