package api

import (
	"reflect"
	"testing"

	"github.com/hashicorp/nomad/api/internal/testutil"
	"github.com/kr/pretty"
)

func TestResources_Canonicalize(t *testing.T) {
	testutil.Parallel(t)
	testCases := []struct {
		name     string
		input    *Resources
		expected *Resources
	}{
		{
			name:     "empty",
			input:    &Resources{},
			expected: DefaultResources(),
		},
		{
			name: "cores",
			input: &Resources{
				Cores:    intToPtr(2),
				MemoryMB: intToPtr(1024),
			},
			expected: &Resources{
				CPU:      intToPtr(0),
				Cores:    intToPtr(2),
				MemoryMB: intToPtr(1024),
			},
		},
		{
			name: "cpu",
			input: &Resources{
				CPU:      intToPtr(500),
				MemoryMB: intToPtr(1024),
			},
			expected: &Resources{
				CPU:      intToPtr(500),
				Cores:    intToPtr(0),
				MemoryMB: intToPtr(1024),
			},
		},
	}

	for _, tc := range testCases {
		t.Run(tc.name, func(t *testing.T) {
			tc.input.Canonicalize()
			if !reflect.DeepEqual(tc.input, tc.expected) {
				t.Fatalf("Name: %v, Diffs:\n%v", tc.name, pretty.Diff(tc.expected, tc.input))
			}
		})
	}
}
