tidwall cfc65a13f6 Refactor repository and build scripts
This commit includes updates that affects the build, testing, and
deployment of Tile38.

- The root level build.sh has been broken up into multiple scripts
  and placed in the "scripts" directory.

- The vendor directory has been updated to follow the Go modules
  rules, thus `make` should work on isolated environments. Also
  some vendored packages may have been updated to a later
  version, if needed.

- The Makefile has been updated to allow for making single
  binaries such as `make tile38-server`. There is some scaffolding
  during the build process, so from now on all binaries should be
  made using make. For example, to run a development version of
  the tile38-cli binary, do this:
     make tile38-cli && ./tile38-cli
  not this:
     go run cmd/tile38-cli/main.go

- Travis.CI docker push script has been updated to address a
  change to Docker's JSON repo meta output, which in turn fixes
  a bug where new Tile38 versions were not being properly pushed
  to Docker
2019-11-18 10:33:15 -07:00

232 lines
4.5 KiB
Go

package lua
import (
"math"
"math/rand"
)
func OpenMath(L *LState) int {
mod := L.RegisterModule(MathLibName, mathFuncs).(*LTable)
mod.RawSetString("pi", LNumber(math.Pi))
mod.RawSetString("huge", LNumber(math.MaxFloat64))
L.Push(mod)
return 1
}
var mathFuncs = map[string]LGFunction{
"abs": mathAbs,
"acos": mathAcos,
"asin": mathAsin,
"atan": mathAtan,
"atan2": mathAtan2,
"ceil": mathCeil,
"cos": mathCos,
"cosh": mathCosh,
"deg": mathDeg,
"exp": mathExp,
"floor": mathFloor,
"fmod": mathFmod,
"frexp": mathFrexp,
"ldexp": mathLdexp,
"log": mathLog,
"log10": mathLog10,
"max": mathMax,
"min": mathMin,
"mod": mathMod,
"modf": mathModf,
"pow": mathPow,
"rad": mathRad,
"random": mathRandom,
"randomseed": mathRandomseed,
"sin": mathSin,
"sinh": mathSinh,
"sqrt": mathSqrt,
"tan": mathTan,
"tanh": mathTanh,
}
func mathAbs(L *LState) int {
L.Push(LNumber(math.Abs(float64(L.CheckNumber(1)))))
return 1
}
func mathAcos(L *LState) int {
L.Push(LNumber(math.Acos(float64(L.CheckNumber(1)))))
return 1
}
func mathAsin(L *LState) int {
L.Push(LNumber(math.Asin(float64(L.CheckNumber(1)))))
return 1
}
func mathAtan(L *LState) int {
L.Push(LNumber(math.Atan(float64(L.CheckNumber(1)))))
return 1
}
func mathAtan2(L *LState) int {
L.Push(LNumber(math.Atan2(float64(L.CheckNumber(1)), float64(L.CheckNumber(2)))))
return 1
}
func mathCeil(L *LState) int {
L.Push(LNumber(math.Ceil(float64(L.CheckNumber(1)))))
return 1
}
func mathCos(L *LState) int {
L.Push(LNumber(math.Cos(float64(L.CheckNumber(1)))))
return 1
}
func mathCosh(L *LState) int {
L.Push(LNumber(math.Cosh(float64(L.CheckNumber(1)))))
return 1
}
func mathDeg(L *LState) int {
L.Push(LNumber(float64(L.CheckNumber(1)) * 180 / math.Pi))
return 1
}
func mathExp(L *LState) int {
L.Push(LNumber(math.Exp(float64(L.CheckNumber(1)))))
return 1
}
func mathFloor(L *LState) int {
L.Push(LNumber(math.Floor(float64(L.CheckNumber(1)))))
return 1
}
func mathFmod(L *LState) int {
L.Push(LNumber(math.Mod(float64(L.CheckNumber(1)), float64(L.CheckNumber(2)))))
return 1
}
func mathFrexp(L *LState) int {
v1, v2 := math.Frexp(float64(L.CheckNumber(1)))
L.Push(LNumber(v1))
L.Push(LNumber(v2))
return 2
}
func mathLdexp(L *LState) int {
L.Push(LNumber(math.Ldexp(float64(L.CheckNumber(1)), L.CheckInt(2))))
return 1
}
func mathLog(L *LState) int {
L.Push(LNumber(math.Log(float64(L.CheckNumber(1)))))
return 1
}
func mathLog10(L *LState) int {
L.Push(LNumber(math.Log10(float64(L.CheckNumber(1)))))
return 1
}
func mathMax(L *LState) int {
if L.GetTop() == 0 {
L.RaiseError("wrong number of arguments")
}
max := L.CheckNumber(1)
top := L.GetTop()
for i := 2; i <= top; i++ {
v := L.CheckNumber(i)
if v > max {
max = v
}
}
L.Push(max)
return 1
}
func mathMin(L *LState) int {
if L.GetTop() == 0 {
L.RaiseError("wrong number of arguments")
}
min := L.CheckNumber(1)
top := L.GetTop()
for i := 2; i <= top; i++ {
v := L.CheckNumber(i)
if v < min {
min = v
}
}
L.Push(min)
return 1
}
func mathMod(L *LState) int {
lhs := L.CheckNumber(1)
rhs := L.CheckNumber(2)
L.Push(luaModulo(lhs, rhs))
return 1
}
func mathModf(L *LState) int {
v1, v2 := math.Modf(float64(L.CheckNumber(1)))
L.Push(LNumber(v1))
L.Push(LNumber(v2))
return 2
}
func mathPow(L *LState) int {
L.Push(LNumber(math.Pow(float64(L.CheckNumber(1)), float64(L.CheckNumber(2)))))
return 1
}
func mathRad(L *LState) int {
L.Push(LNumber(float64(L.CheckNumber(1)) * math.Pi / 180))
return 1
}
func mathRandom(L *LState) int {
switch L.GetTop() {
case 0:
L.Push(LNumber(rand.Float64()))
case 1:
n := L.CheckInt(1)
L.Push(LNumber(rand.Intn(n-1) + 1))
default:
min := L.CheckInt(1)
max := L.CheckInt(2) + 1
L.Push(LNumber(rand.Intn(max-min) + min))
}
return 1
}
func mathRandomseed(L *LState) int {
rand.Seed(L.CheckInt64(1))
return 0
}
func mathSin(L *LState) int {
L.Push(LNumber(math.Sin(float64(L.CheckNumber(1)))))
return 1
}
func mathSinh(L *LState) int {
L.Push(LNumber(math.Sinh(float64(L.CheckNumber(1)))))
return 1
}
func mathSqrt(L *LState) int {
L.Push(LNumber(math.Sqrt(float64(L.CheckNumber(1)))))
return 1
}
func mathTan(L *LState) int {
L.Push(LNumber(math.Tan(float64(L.CheckNumber(1)))))
return 1
}
func mathTanh(L *LState) int {
L.Push(LNumber(math.Tanh(float64(L.CheckNumber(1)))))
return 1
}
//