This commit is contained in:
parent
96e07ece2d
commit
a7690a16cb
8
.forgejo/workflows/succd.yaml
Normal file
8
.forgejo/workflows/succd.yaml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
on: [push]
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: docker
|
||||||
|
container: golang:1.23-bookworm
|
||||||
|
steps:
|
||||||
|
- uses: github.com/actions/checkout@v3
|
||||||
|
- run: cd succbone/succd && ./ci.sh
|
30
succbone/succd/ci.sh
Executable file
30
succbone/succd/ci.sh
Executable file
|
@ -0,0 +1,30 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
if [ ! -f go.mod ]; then
|
||||||
|
echo "Script needs to be run with in succd directory."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running gofmt..."
|
||||||
|
GOFMT_OUT="$(gofmt -d $(find . -name '*.go'))"
|
||||||
|
if [ -n "$GOFMT_OUT" ]; then
|
||||||
|
echo "gofmt generated differences, please run 'go fmt ./' and try again."
|
||||||
|
echo "$GOFMT_OUT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running govet..."
|
||||||
|
GOVET_OUT="$(go vet ./)"
|
||||||
|
if [ -n "$GOVET_OUT" ]; then
|
||||||
|
echo "go vet found the following errors:"
|
||||||
|
echo "$GOVET_OUT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running tests..."
|
||||||
|
go test ./
|
||||||
|
|
||||||
|
echo "OK."
|
||||||
|
|
72
succbone/succd/process_blocks_test.go
Normal file
72
succbone/succd/process_blocks_test.go
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMomentaryOutput(t *testing.T) {
|
||||||
|
mo := momentaryOutput{}
|
||||||
|
mo.trigger()
|
||||||
|
mo.process()
|
||||||
|
if !mo.output {
|
||||||
|
t.Fatalf("output didn't trigger")
|
||||||
|
}
|
||||||
|
mo.process()
|
||||||
|
if !mo.output {
|
||||||
|
t.Fatalf("output didn't keep triggered")
|
||||||
|
}
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
mo.process()
|
||||||
|
if mo.output {
|
||||||
|
t.Fatalf("output didn't untrigger")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestThresholdOutput(t *testing.T) {
|
||||||
|
to := thresholdOutput{
|
||||||
|
threshold: 1,
|
||||||
|
}
|
||||||
|
to.process(0)
|
||||||
|
if to.output {
|
||||||
|
t.Fatalf("output shouldn't have triggered")
|
||||||
|
}
|
||||||
|
to.process(2)
|
||||||
|
if !to.output {
|
||||||
|
t.Fatalf("output should have triggered")
|
||||||
|
}
|
||||||
|
to.process(0)
|
||||||
|
if !to.output {
|
||||||
|
t.Fatalf("output should have triggered (in debounce)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRingbufferInput(t *testing.T) {
|
||||||
|
ri := ringbufferInput{
|
||||||
|
limit: 3,
|
||||||
|
}
|
||||||
|
if ri.saturated() {
|
||||||
|
t.Fatal("ringbuffer shouldn't be saturated yet")
|
||||||
|
}
|
||||||
|
ri.process(1)
|
||||||
|
if ri.saturated() {
|
||||||
|
t.Fatal("ringbuffer shouldn't be saturated yet")
|
||||||
|
}
|
||||||
|
ri.process(2)
|
||||||
|
if ri.saturated() {
|
||||||
|
t.Fatal("ringbuffer shouldn't be saturated yet")
|
||||||
|
}
|
||||||
|
ri.process(3)
|
||||||
|
if !ri.saturated() {
|
||||||
|
t.Fatalf("ringbuffer should be saturated")
|
||||||
|
}
|
||||||
|
|
||||||
|
if diff := math.Abs(float64(ri.avg) - 2); diff > 0.01 {
|
||||||
|
t.Fatalf("ringbuffer avg should be ~2, is %f", ri.avg)
|
||||||
|
}
|
||||||
|
ri.process(10)
|
||||||
|
if diff := math.Abs(float64(ri.avg) - 5); diff > 0.01 {
|
||||||
|
t.Fatalf("ringbuffer avg should be ~5, is %f", ri.avg)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue