From 185c64686f339a3400c53d23a385c8982929855b Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Tue, 30 Jun 2026 12:18:45 -0400 Subject: [PATCH] Made the Go implementation a library. Test is pathetic but it's a start. --- go/magic_stats/Makefile | 5 +--- go/magic_stats/{main.go => welford.go} | 34 ---------------------- go/magic_stats/welford_test.go | 40 ++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 38 deletions(-) rename go/magic_stats/{main.go => welford.go} (72%) create mode 100644 go/magic_stats/welford_test.go diff --git a/go/magic_stats/Makefile b/go/magic_stats/Makefile index 6202767..922e7d0 100644 --- a/go/magic_stats/Makefile +++ b/go/magic_stats/Makefile @@ -1,10 +1,7 @@ R_SCRIPT=C:/Users/lcthw/AppData/Local/Programs/R/R-4.6.0/bin/Rscript.exe -all: - go build . - test: - ./magic_stats + go test r_test: test $(R_SCRIPT) ../../cpp/tests/confirm.r diff --git a/go/magic_stats/main.go b/go/magic_stats/welford.go similarity index 72% rename from go/magic_stats/main.go rename to go/magic_stats/welford.go index 95804ac..308e1c0 100644 --- a/go/magic_stats/main.go +++ b/go/magic_stats/welford.go @@ -3,9 +3,6 @@ package main import ( "fmt" "math" - "math/rand/v2" - "os" - "log" ) type Welford struct { @@ -97,34 +94,3 @@ func (stats *Welford) TTest(second *Welford) TTest { return TTest{t_stat, dof, p_val} } - -func main() { - var welf Welford - var welf2 Welford - skew_factor := rand.Float64() * 10 - - samples_file, err := os.Create("samples.txt") - if err != nil { log.Fatal(err) } - defer samples_file.Close() - - for i := 0; i < 100; i++ { - sample := rand.Float64() * 100 - welf.Sample(sample) - welf2.Sample(sample + skew_factor) - - sample_line := fmt.Sprintf("%f %f\n", sample, sample + skew_factor) - samples_file.Write([]byte(sample_line)) - } - - welf.Dump() - welf2.Dump() - result := welf.TTest(&welf2) - - fmt.Println( - "----\nTTest Results:\nMean:", welf.Mean, - "\nVariance: ", welf.Variance(), - "\nStddev: ", welf.StdDev(), - "\nTStat: ", result.TStat, - "\nDOF: ", result.DOF, - "\nPVal: ", result.PVal); -} diff --git a/go/magic_stats/welford_test.go b/go/magic_stats/welford_test.go new file mode 100644 index 0000000..0294904 --- /dev/null +++ b/go/magic_stats/welford_test.go @@ -0,0 +1,40 @@ +package main + +import ( + "fmt" + "math/rand/v2" + "os" + "log" + "testing" +) + +func TestBasicWelford(t *testing.T) { + var welf Welford + var welf2 Welford + skew_factor := rand.Float64() * 10 + + samples_file, err := os.Create("samples.txt") + if err != nil { log.Fatal(err) } + defer samples_file.Close() + + for i := 0; i < 100; i++ { + sample := rand.Float64() * 100 + welf.Sample(sample) + welf2.Sample(sample + skew_factor) + + sample_line := fmt.Sprintf("%f %f\n", sample, sample + skew_factor) + samples_file.Write([]byte(sample_line)) + } + + welf.Dump() + welf2.Dump() + result := welf.TTest(&welf2) + + fmt.Println( + "----\nTTest Results:\nMean:", welf.Mean, + "\nVariance: ", welf.SampleVariance(), + "\nStddev: ", welf.StdDev(), + "\nTStat: ", result.TStat, + "\nDOF: ", result.DOF, + "\nPVal: ", result.PVal); +}