mirror of
https://github.com/littensy/charm.git
synced 2026-10-23 05:46:27 +00:00
perf: sync atomic changes to keys
This commit is contained in:
parent
13e06dd44c
commit
ecf808c706
13 changed files with 368 additions and 402 deletions
68
tests/charm-sync/packets.spec.luau
Normal file
68
tests/charm-sync/packets.spec.luau
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
local packets = require(ReplicatedStorage.DevPackages.CharmSync.packets)
|
||||
|
||||
return function()
|
||||
it("creates a packet", function()
|
||||
local prevState = { foo = "bar", baz = "qux" }
|
||||
local nextState = { foo = "bar", baz = "quux" }
|
||||
local results = packets.diff(prevState, nextState)
|
||||
|
||||
expect(#results).to.equal(1)
|
||||
expect(table.concat(results[1].path, "/")).to.equal("baz")
|
||||
expect(results[1].data).to.equal("quux")
|
||||
end)
|
||||
|
||||
it("applies a packet", function()
|
||||
local prevState = { foo = "bar", baz = "qux" }
|
||||
local packet: packets.Packet = { path = { "baz" }, data = "quux" }
|
||||
local nextState = packets.apply(prevState, { packet })
|
||||
|
||||
expect(nextState.baz).to.equal("quux")
|
||||
expect(nextState.foo).to.equal("bar")
|
||||
end)
|
||||
|
||||
it("applies nested packets", function()
|
||||
local prevState = { foo = { bar = "baz" } }
|
||||
local nextState = { foo = { bar = "qux" } }
|
||||
|
||||
local results = packets.diff(prevState, nextState)
|
||||
local applied = packets.apply(prevState, results)
|
||||
|
||||
expect(prevState.foo.bar).to.equal("baz")
|
||||
expect(applied.foo.bar).to.equal("qux")
|
||||
end)
|
||||
|
||||
it("only copies changed tables", function()
|
||||
local prevState = { foo = { bar = "baz" }, baz = { qux = "quux" } }
|
||||
local nextState = { foo = { bar = "qux" }, baz = table.clone(prevState.baz) }
|
||||
|
||||
local results = packets.diff(prevState, nextState)
|
||||
local applied = packets.apply(prevState, results)
|
||||
|
||||
expect(applied).to.never.equal(prevState)
|
||||
expect(applied.foo).to.never.equal(prevState.foo)
|
||||
expect(applied.foo.bar).to.equal("qux")
|
||||
expect(applied.baz).to.equal(prevState.baz)
|
||||
end)
|
||||
|
||||
it("excludes unchanged tables", function()
|
||||
local prevState = { foo = { bar = "baz" }, baz = { qux = "quux" } }
|
||||
local nextState = { foo = { bar = "qux" }, baz = table.clone(prevState.baz) }
|
||||
local results = packets.diff(prevState, nextState)
|
||||
|
||||
expect(#results).to.equal(1)
|
||||
expect(table.concat(results[1].path, "/")).to.equal("foo/bar")
|
||||
expect(results[1].data).to.equal("qux")
|
||||
end)
|
||||
|
||||
it("overwrites cleared tables", function()
|
||||
local prevState = { foo = { 1, 2, 3 } }
|
||||
local nextState = { foo = {} }
|
||||
local results = packets.diff(prevState, nextState)
|
||||
|
||||
expect(#results).to.equal(1)
|
||||
expect(table.concat(results[1].path, "/")).to.equal("foo")
|
||||
expect(#results[1].data).to.equal(0)
|
||||
end)
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue