// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file contains tests for the useless-assignment checker.

package testdata

import "math/rand"

type ST struct {
	x int
	l []int
}

func (s *ST) SetX(x int, ch chan int) {
	// Accidental self-assignment; it should be "s.x = x"
	// want "self-assignment of x to x"
	// Another mistake
	// want "self-assignment of s.x to s.x"

	// want "self-assignment of s.l.0. to s.l.0."

	// Bail on any potential side effects to avoid false positives
	s.l[num()] = s.l[num()]
	rng := rand.New(rand.NewSource(0))
	s.l[rng.Intn(len(s.l))] = s.l[rng.Intn(len(s.l))]
	s.l[<-ch] = s.l[<-ch]
}

func num() int { return 2 }

func Index() {
	s := []int{1}
	// want "self-assignment"

	var a [5]int
	// want "self-assignment"

	pa := &[2]int{1, 2}
	// want "self-assignment"

	var pss *struct { // report self assignment despite nil dereference
		s []int
	}
	// want "self-assignment"

	m := map[int]string{1: "a"}
	m[0] = m[0]     // bail on map self-assignments due to side effects
	m[1] = m[1]     // not modeling what elements must be in the map
	(m[2]) = (m[2]) // even with parens
	type Map map[string]bool
	named := make(Map)
	named["s"] = named["s"] // even on named maps.
	var psm *struct {
		m map[string]int
	}
	psm.m["key"] = psm.m["key"] // handles dereferences
}
