// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause

// Package mak contains code to help make things.
package mak

import (
	"reflect"
	"testing"
)

type M map[string]int

func TestSet(t *testing.T) {
	t.Run("unnamed", func(t *testing.T) {
		var m map[string]int
		Set(&m, "foo", 42)
		Set(&m, "bar", 1)
		Set(&m, "bar", 2)
		want := map[string]int{
			"foo": 42,
			"bar": 2,
		}
		if got := m; !reflect.DeepEqual(got, want) {
			t.Errorf("got %v; want %v", got, want)
		}
	})
	t.Run("named", func(t *testing.T) {
		var m M
		Set(&m, "foo", 1)
		Set(&m, "bar", 1)
		Set(&m, "bar", 2)
		want := M{
			"foo": 1,
			"bar": 2,
		}
		if got := m; !reflect.DeepEqual(got, want) {
			t.Errorf("got %v; want %v", got, want)
		}
	})
}

func TestNonNilMapForJSON(t *testing.T) {
	type M map[string]int
	var m M
	NonNilMapForJSON(&m)
	if m == nil {
		t.Fatal("still nil")
	}
}

func TestNonNilSliceForJSON(t *testing.T) {
	type S []int
	var s S
	NonNilSliceForJSON(&s)
	if s == nil {
		t.Fatal("still nil")
	}
}
