// $G $D/$F.go && $L $F.$A && ./$A.out

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

// Test that goroutines and garbage collection run during init.

package main

import "runtime"

var x []byte

func init() {
	c := make(chan int)
	go send(c)
	<-c
	
	const chunk = 1<<20
	runtime.UpdateMemStats()
	sys := runtime.MemStats.Sys	
	b := make([]byte, chunk)
	for i := range b {
		b[i] = byte(i%10 + '0')
	}
	s := string(b)
	for i := 0; i < 1000; i++ {
		x = []byte(s)
	}
	runtime.UpdateMemStats()
	sys1 := runtime.MemStats.Sys
	if sys1-sys > chunk*50 {
		println("allocated 1000 chunks of", chunk, "and used ", sys1-sys, "memory")
	}
}

func send(c chan int) {
	c <- 1
}

func main() {
}

