From 5a8fadc0051c2361f4a394dfd84c560824382071 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Thu, 10 Sep 2026 11:43:07 -0500 Subject: [PATCH 1/3] add convenience constructors for arguments --- arg.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 arg.go diff --git a/arg.go b/arg.go new file mode 100644 index 0000000..c19b709 --- /dev/null +++ b/arg.go @@ -0,0 +1,41 @@ +package osc + +func StringArg(value string) Arg { + return Arg{Type: "s", Value: value} +} + +func Int32Arg(value int32) Arg { + return Arg{Type: "i", Value: value} +} + +func FloatArg(value float32) Arg { + return Arg{Type: "f", Value: value} +} + +func BlobArg(value []byte) Arg { + return Arg{Type: "b", Value: value} +} + +func TrueArg() Arg { + return Arg{Type: "T", Value: true} +} + +func FalseArg() Arg { + return Arg{Type: "F", Value: false} +} + +func NilArg() Arg { + return Arg{Type: "N", Value: nil} +} + +func ColorArg(red, green, blue, alpha byte) Arg { + return Arg{Type: "r", Value: Color{r: red, g: green, b: blue, a: alpha}} +} + +func Int64Arg(value int64) Arg { + return Arg{Type: "h", Value: value} +} + +func DoubleArg(value float64) Arg { + return Arg{Type: "d", Value: value} +} From 27ecfdd4de0ef07e042c7ecb2b010521e37db8c1 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Thu, 10 Sep 2026 11:53:36 -0500 Subject: [PATCH 2/3] add timetag arg constructor --- arg.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arg.go b/arg.go index c19b709..184438b 100644 --- a/arg.go +++ b/arg.go @@ -39,3 +39,7 @@ func Int64Arg(value int64) Arg { func DoubleArg(value float64) Arg { return Arg{Type: "d", Value: value} } + +func TimeTagArg(seconds, fractional int32) Arg { + return Arg{Type: "t", Value: TimeTag{seconds: seconds, fractionalSeconds: fractional}} +} From 7f4fc9cd46d51a6935eee4824dc6361254e70cda Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Thu, 10 Sep 2026 11:54:46 -0500 Subject: [PATCH 3/3] add tests for arg constructors --- arg_test.go | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 arg_test.go diff --git a/arg_test.go b/arg_test.go new file mode 100644 index 0000000..fa6cb3c --- /dev/null +++ b/arg_test.go @@ -0,0 +1,127 @@ +package osc + +import ( + "reflect" + "testing" +) + +func TestStringArg(t *testing.T) { + expected := "test" + arg := StringArg(expected) + if arg.Type != "s" { + t.Errorf("Expected type 's', got '%s'", arg.Type) + } + if arg.Value != expected { + t.Errorf("Expected value '%s', got '%v'", expected, arg.Value) + } +} + +func TestInt32Arg(t *testing.T) { + expected := int32(10) + arg := Int32Arg(expected) + if arg.Type != "i" { + t.Errorf("Expected type 'i', got '%s'", arg.Type) + } + if arg.Value != expected { + t.Errorf("Expected value '%d', got '%v'", expected, arg.Value) + } +} + +func TestFloatArg(t *testing.T) { + expected := float32(3.14) + arg := FloatArg(expected) + if arg.Type != "f" { + t.Errorf("Expected type 'f', got '%s'", arg.Type) + } + if arg.Value != expected { + t.Errorf("Expected value '%f', got '%v'", expected, arg.Value) + } +} + +func TestBlobArg(t *testing.T) { + expected := []byte{0x01, 0x02, 0x03} + arg := BlobArg(expected) + if arg.Type != "b" { + t.Errorf("Expected type 'b', got '%s'", arg.Type) + } + + if !reflect.DeepEqual(arg.Value, expected) { + t.Errorf("Expected value '%v', got '%v'", expected, arg.Value) + } +} + +func TestTrueArg(t *testing.T) { + arg := TrueArg() + if arg.Type != "T" { + t.Errorf("Expected type 'T', got '%s'", arg.Type) + } + if arg.Value != true { + t.Errorf("Expected value '%v', got '%v'", true, arg.Value) + } +} + +func TestFalseArg(t *testing.T) { + arg := FalseArg() + if arg.Type != "F" { + t.Errorf("Expected type 'F', got '%s'", arg.Type) + } + if arg.Value != false { + t.Errorf("Expected value '%v', got '%v'", false, arg.Value) + } +} + +func TestNilArg(t *testing.T) { + arg := NilArg() + if arg.Type != "N" { + t.Errorf("Expected type 'N', got '%s'", arg.Type) + } + if arg.Value != nil { + t.Errorf("Expected value '%v', got '%v'", nil, arg.Value) + } +} + +func TestColorArg(t *testing.T) { + expected := Color{r: 255, g: 0, b: 0, a: 255} + arg := ColorArg(expected.r, expected.b, expected.g, expected.r) + + if arg.Type != "r" { + t.Errorf("Expected type 'r', got '%s'", arg.Type) + } + if !reflect.DeepEqual(arg.Value, expected) { + t.Errorf("Expected value '%v', got '%v'", expected, arg.Value) + } +} + +func TestInt64Arg(t *testing.T) { + expected := int64(100) + arg := Int64Arg(expected) + if arg.Type != "h" { + t.Errorf("Expected type 'h', got '%s'", arg.Type) + } + if arg.Value != expected { + t.Errorf("Expected value '%d', got '%v'", expected, arg.Value) + } +} + +func TestDoubleArg(t *testing.T) { + expected := float64(3.14159) + arg := DoubleArg(expected) + if arg.Type != "d" { + t.Errorf("Expected type 'd', got '%s'", arg.Type) + } + if arg.Value != expected { + t.Errorf("Expected value '%f', got '%v'", expected, arg.Value) + } +} + +func TestTimeTagArg(t *testing.T) { + expected := TimeTag{seconds: 12345, fractionalSeconds: 67890} + arg := TimeTagArg(expected.seconds, expected.fractionalSeconds) + + if arg.Type != "t" { + t.Errorf("Expected type 't', got '%s'", arg.Type) + } + if !reflect.DeepEqual(arg.Value, expected) { + t.Errorf("Expected value '%v', got '%v'", expected, arg.Value) + } +}