// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may not
// use this file except in compliance with the License. A copy of the
// License is located at
//
// http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing
// permissions and limitations under the License.
package inmemory

import (
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
)

func TestTimeSpanContains(t *testing.T) {
	now := time.Now().Truncate(time.Second)
	ts := timeSpan{
		startTime: now,
		endTime:   now.Add(time.Second),
	}

	tests := []struct {
		name           string
		testTime       time.Time
		expectedResult bool
	}{
		{
			name:           "time equals start time",
			testTime:       now,
			expectedResult: true,
		},
		{
			name:           "time within span",
			testTime:       now.Add(500 * time.Millisecond),
			expectedResult: true,
		},
		{
			name:           "time equals end time",
			testTime:       now.Add(time.Second),
			expectedResult: false,
		},
		{
			name:           "time before start",
			testTime:       now.Add(-time.Second),
			expectedResult: false,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := ts.contains(tt.testTime)
			assert.Equal(t, tt.expectedResult, got)
		})
	}
}
