// Copyright 2015 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.

//go:build ignore
// +build ignore

//
// This build tag means that "go build" does not build this file. Use "go run
// manual_test_program.go" to run it.
//
// You will also need to change "debug = false" to "debug = true" in mmap_*.go.

package main

import (
	"log"
	"math/rand"
	"time"

	"golang.org/x/exp/mmap"
)

var garbage []byte

func main() {
	// If you replace "manual_test_program.go" with the name of an empty (zero
	// sized) file (and set "const debug = true") then you will not necessarily
	// see two "munmap log messages", since some operating systems will not
	// allow a zero sized mapping so there is no need for a finalizer to unmap.
	const filename = "manual_test_program.go"

	for _, explicitClose := range []bool{false, true} {
		r, err := mmap.Open(filename)
		if err != nil {
			log.Fatalf("Open: %v", err)
		}
		println("Open succeeded; Len =", r.Len())
		if explicitClose {
			r.Close()
		} else {
			// Leak the *mmap.ReaderAt returned by mmap.Open. The finalizer
			// should pick it up, if finalizers run at all.
		}
	}

	println("Finished all explicit Close calls.")
	println("Creating and collecting garbage.")
	println("Look for two munmap log messages.")
	println("Hit Ctrl-C to exit.")

	rng := rand.New(rand.NewSource(1))
	now := time.Now()
	for {
		garbage = make([]byte, rng.Intn(1<<20))
		if time.Since(now) > 1*time.Second {
			now = time.Now()
			print(".")
		}
	}
}
