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

// +build ignore

package main

/*
This program generates table.go. Invoke it as:
go run gen.go -output table.go
*/

import (
	"bytes"
	"flag"
	"fmt"
	"go/format"
	"io/ioutil"
	"log"
	"math"
)

// N is the number of entries in the sin look-up table. It must be a power of 2.
const N = 4096

var filename = flag.String("output", "table.go", "output file name")

func main() {
	b := new(bytes.Buffer)
	fmt.Fprintf(b, "// generated by go run gen.go; DO NOT EDIT\n\npackage f32\n\n")
	fmt.Fprintf(b, "const sinTableLen = %d\n\n", N)
	fmt.Fprintf(b, "// sinTable[i] equals sin(i * π / sinTableLen).\n")
	fmt.Fprintf(b, "var sinTable = [sinTableLen]float32{\n")
	for i := 0; i < N; i++ {
		radians := float64(i) * (math.Pi / N)
		fmt.Fprintf(b, "%v,\n", float32(math.Sin(radians)))
	}
	fmt.Fprintf(b, "}\n")

	data, err := format.Source(b.Bytes())
	if err != nil {
		log.Fatal(err)
	}
	if err := ioutil.WriteFile(*filename, data, 0644); err != nil {
		log.Fatal(err)
	}
}
