some basic stuffs.
This commit is contained in:
@@ -180,6 +180,10 @@ func (col *Color) ToXY() (col2 Color, ok bool) {
|
||||
}
|
||||
|
||||
func (col *Color) Interpolate(other Color, fac float64) Color {
|
||||
if col.AlmostEquals(other) {
|
||||
return *col
|
||||
}
|
||||
|
||||
// Special case for kelvin values.
|
||||
if col.IsKelvin() && other.IsKelvin() {
|
||||
k1 := *col.K
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
package testutils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
lucifer3 "git.aiterp.net/lucifer3/server"
|
||||
"log"
|
||||
"math/rand"
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type syncEvent struct {
|
||||
id uint64
|
||||
}
|
||||
|
||||
func (s syncEvent) EventDescription() string {
|
||||
return fmt.Sprintf("syncEvent(%d)", s.id)
|
||||
}
|
||||
|
||||
type TestEventLogger struct {
|
||||
entries []any
|
||||
syncN uint64
|
||||
syncCh chan struct{}
|
||||
}
|
||||
|
||||
func (l *TestEventLogger) Active() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (l *TestEventLogger) Sync(bus *lucifer3.EventBus) {
|
||||
l.syncCh = make(chan struct{})
|
||||
v := rand.Int63()
|
||||
atomic.StoreUint64(&l.syncN, uint64(v))
|
||||
|
||||
bus.RunEvent(syncEvent{id: uint64(v)})
|
||||
|
||||
<-l.syncCh
|
||||
}
|
||||
|
||||
func (l *TestEventLogger) AssertEvent(t *testing.T, eventStr string) {
|
||||
for i, entry := range l.entries {
|
||||
if event, ok := entry.(lucifer3.Event); ok && eventStr == event.EventDescription() {
|
||||
l.entries = l.entries[i+1:]
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
t.Errorf("Event not found: %s", eventStr)
|
||||
}
|
||||
|
||||
func (l *TestEventLogger) AssertCommand(t *testing.T, commandStr string) {
|
||||
for i, entry := range l.entries {
|
||||
if cmd, ok := entry.(lucifer3.Command); ok {
|
||||
log.Println(cmd.CommandDescription() == commandStr)
|
||||
}
|
||||
if command, ok := entry.(lucifer3.Command); ok && commandStr == command.CommandDescription() {
|
||||
l.entries = l.entries[i+1:]
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
t.Errorf("Command not found: %s", commandStr)
|
||||
}
|
||||
|
||||
func (l *TestEventLogger) HandleEvent(_ *lucifer3.EventBus, event lucifer3.Event) {
|
||||
if ev, ok := event.(syncEvent); ok {
|
||||
if atomic.CompareAndSwapUint64(&l.syncN, ev.id, 0) {
|
||||
close(l.syncCh)
|
||||
}
|
||||
}
|
||||
|
||||
l.entries = append(l.entries, event)
|
||||
}
|
||||
|
||||
func (l *TestEventLogger) HandleCommand(_ *lucifer3.EventBus, command lucifer3.Command) {
|
||||
l.entries = append(l.entries, command)
|
||||
}
|
||||
|
||||
func evStr(ev any) string {
|
||||
if ev, ok := ev.(lucifer3.Event); ok {
|
||||
return ev.EventDescription()
|
||||
} else if ev, ok := ev.(lucifer3.Command); ok {
|
||||
return ev.CommandDescription()
|
||||
}
|
||||
|
||||
panic("Unknown type")
|
||||
}
|
||||
Reference in New Issue
Block a user