///|
fn main {
try {
let packet = @osc.Message({
address: "/x",
arguments: [I32(-1), F32(0x3f000000U), Text("ok"), Blob(b"\x01\x02")],
})
let wire = @osc.encode_osc10(packet)
assert_eq(
@osc.hex_encode(wire),
"2f7800002c69667362000000ffffffff3f0000006f6b00000000000201020000",
)
assert_eq(@osc.decode_osc10(wire), packet)
let d = @osc.Dispatcher::new()
d.add(1, "/synth/lead1/gain")
d.add(2, "/synth/bass2/gain")
d.add(3, "/synth/bass4/gain")
let m : @osc.Message = {
address: "/synth/{lead,bass}[1-3]/gain",
arguments: [F32(0x3f000000U)],
}
let plan = d.plan(m)
assert_eq(plan.accepted.map(r => r.id), [1, 2])
// Every selected host method must receive exactly m.arguments.
let mut delivered = 0
for route in plan.accepted {
assert_true(route.id == 1 || route.id == 2)
assert_eq(m.arguments, [F32(0x3f000000U)])
delivered += 1
}
assert_eq(delivered, 2)
assert_true(@osc.matches("/a/{,b}c", "/a/c"))
assert_true(@osc.matches("/a/[!0-9]?*", "/a/lead"))
assert_false(@osc.matches("/a/*", "/a/x/y"))
let now = @osc.TimeTag::from_unix(1700000000L)
let later = now.add_ticks(1UL << 32)
let first = @osc.Message({ address: "/first", arguments: [], })
let inside = @osc.Message({ address: "/inside", arguments: [], })
let last = @osc.Message({ address: "/last", arguments: [], })
let q = @osc.Osc10Scheduler::new()
assert_eq(
q.enqueue(Bundle(later, [first, Bundle(later, [inside]), last]), now),
[1UL, 2UL],
)
assert_eq(q.poll(now).length(), 0)
assert_eq(q.poll(later, max_batches=1)[0].messages.map(m => m.address), [
"/first", "/last",
])
assert_eq(q.poll(later)[0].messages[0].address, "/inside")
assert_true(
try {
ignore(q.enqueue(Bundle(later, [Bundle(now, [])]), now))
false
} catch {
_ => true
},
)
assert_true(
try {
ignore(@osc.decode_osc10(b"/x\x00\x00"))
false
} catch {
_ => true
},
)
assert_true(
try {
ignore(
@osc.encode_osc10(Message({ address: "/x", arguments: [True], })),
)
false
} catch {
_ => true
},
)
assert_eq(q.len(), 0)
println(
"OSC 1.0 core: exact wire; all-method fanout; indivisible timed batches; invalid inputs rejected",
)
} catch {
_ => abort("OSC 1.0 conformance workflow failed")
}
}