//go:build unit
// +build unit

// Copyright 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 task

import (
	"fmt"
	"reflect"
	"testing"
)

func taskN(n int) *Task {
	return &Task{
		Arn: fmt.Sprint(n),
	}
}

func TestRemoveFromTaskArray(t *testing.T) {
	arr := []*Task{taskN(1), taskN(2), taskN(3)}

	arr2 := RemoveFromTaskArray(arr, -1)
	if !reflect.DeepEqual(arr, arr2) {
		t.Error("Index -1 out of bounds altered arr")
	}

	arr2 = RemoveFromTaskArray(arr, 3)
	if !reflect.DeepEqual(arr, arr2) {
		t.Error("Index 3 out of bounds altered arr")
	}

	arr = RemoveFromTaskArray(arr, 2)
	if !reflect.DeepEqual(arr, []*Task{taskN(1), taskN(2)}) {
		t.Error("Last element not removed")
	}
	arr = RemoveFromTaskArray(arr, 0)
	if !reflect.DeepEqual(arr, []*Task{taskN(2)}) {
		t.Error("First element not removed")
	}
	arr = RemoveFromTaskArray(arr, 0)
	if !reflect.DeepEqual(arr, []*Task{}) {
		t.Error("First element not removed")
	}
	arr = RemoveFromTaskArray(arr, 0)
	if !reflect.DeepEqual(arr, []*Task{}) {
		t.Error("Removing from empty arr changed it")
	}
}
