mirror of
https://github.com/centau/vide.git
synced 2026-08-20 14:41:37 +00:00
This commit is contained in:
parent
7dead44ac5
commit
a425c6b8be
3 changed files with 57 additions and 18 deletions
|
|
@ -109,16 +109,12 @@ local function indexes<K, VI, VO>(input: () -> Map<K, VI>, transform: (() -> VI,
|
||||||
return output_array
|
return output_array
|
||||||
end
|
end
|
||||||
|
|
||||||
local output = create_node(false :: any)
|
local output = create_node(false :: any, function()
|
||||||
output.effect = function()
|
|
||||||
return update_children(input())
|
return update_children(input())
|
||||||
end
|
end)
|
||||||
|
|
||||||
open_scope(output)
|
evaluate_node(output)
|
||||||
|
|
||||||
output.cache = update_children(input())
|
|
||||||
|
|
||||||
close_scope()
|
|
||||||
|
|
||||||
return function()
|
return function()
|
||||||
track(output)
|
track(output)
|
||||||
|
|
@ -126,7 +122,6 @@ local function indexes<K, VI, VO>(input: () -> Map<K, VI>, transform: (() -> VI,
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- todo: optimize output array
|
|
||||||
local function values<K, VI, VO>(input: () -> Map<K, VI>, transform: (VI, () -> K) -> VO): () -> { VO }
|
local function values<K, VI, VO>(input: () -> Map<K, VI>, transform: (VI, () -> K) -> VO): () -> { VO }
|
||||||
local owner = get_scope()
|
local owner = get_scope()
|
||||||
if not owner then
|
if not owner then
|
||||||
|
|
@ -211,16 +206,11 @@ local function values<K, VI, VO>(input: () -> Map<K, VI>, transform: (VI, () ->
|
||||||
return output_array
|
return output_array
|
||||||
end
|
end
|
||||||
|
|
||||||
local output = create_node(false :: any)
|
local output = create_node(false :: any, function()
|
||||||
output.effect = function()
|
|
||||||
return update_children(input())
|
return update_children(input())
|
||||||
end
|
end)
|
||||||
|
|
||||||
open_scope(output)
|
evaluate_node(output)
|
||||||
|
|
||||||
output.cache = update_children(input())
|
|
||||||
|
|
||||||
close_scope()
|
|
||||||
|
|
||||||
return function()
|
return function()
|
||||||
track(output)
|
track(output)
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ BENCH("set derived value", function()
|
||||||
local src = vide.source(1)
|
local src = vide.source(1)
|
||||||
|
|
||||||
vide.root(function()
|
vide.root(function()
|
||||||
local _derived = vide.derive(src)
|
local _derived = vide.derive(function() return src() end)
|
||||||
|
|
||||||
for i = 1, START(N) do
|
for i = 1, START(N) do
|
||||||
src(i)
|
src(i)
|
||||||
|
|
|
||||||
|
|
@ -399,7 +399,7 @@ TEST("derive()", wrap_root(function()
|
||||||
|
|
||||||
local count = 0
|
local count = 0
|
||||||
|
|
||||||
effect(function() c() count += 1 end)
|
effect(function() c(); count += 1 end)
|
||||||
|
|
||||||
b(true)
|
b(true)
|
||||||
CHECK(c() == "b")
|
CHECK(c() == "b")
|
||||||
|
|
@ -453,11 +453,28 @@ TEST("derive()", wrap_root(function()
|
||||||
gc()
|
gc()
|
||||||
CHECK(wref[1])
|
CHECK(wref[1])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
do CASE "raw derive"
|
||||||
|
local a = source(1)
|
||||||
|
local b = derive(a)
|
||||||
|
|
||||||
|
local count = 0
|
||||||
|
|
||||||
|
effect(function()
|
||||||
|
b()
|
||||||
|
count += 1
|
||||||
|
end)
|
||||||
|
|
||||||
|
CHECK(count == 1)
|
||||||
|
a(2)
|
||||||
|
CHECK(count == 2)
|
||||||
|
end
|
||||||
end))
|
end))
|
||||||
|
|
||||||
TEST("effect()", wrap_root(function()
|
TEST("effect()", wrap_root(function()
|
||||||
local source = vide.source
|
local source = vide.source
|
||||||
local effect = vide.effect
|
local effect = vide.effect
|
||||||
|
local derive = vide.derive
|
||||||
|
|
||||||
do CASE "rerun on source change"
|
do CASE "rerun on source change"
|
||||||
local a = source(1)
|
local a = source(1)
|
||||||
|
|
@ -476,6 +493,38 @@ TEST("effect()", wrap_root(function()
|
||||||
b(2)
|
b(2)
|
||||||
CHECK(count == 3)
|
CHECK(count == 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
do CASE "rerun on derived source change"
|
||||||
|
local num = source(0)
|
||||||
|
|
||||||
|
local text = derive(function() return tostring(num()) end)
|
||||||
|
|
||||||
|
local count = 0
|
||||||
|
effect(function()
|
||||||
|
text()
|
||||||
|
count += 1
|
||||||
|
end)
|
||||||
|
|
||||||
|
num(1)
|
||||||
|
|
||||||
|
CHECK(count == 2)
|
||||||
|
end
|
||||||
|
|
||||||
|
do CASE "cache"
|
||||||
|
local num = source(0)
|
||||||
|
|
||||||
|
local count
|
||||||
|
|
||||||
|
effect(function(x: number)
|
||||||
|
num()
|
||||||
|
count = x + 1
|
||||||
|
return x + 1
|
||||||
|
end, 0)
|
||||||
|
|
||||||
|
num(1)
|
||||||
|
|
||||||
|
CHECK(count == 2)
|
||||||
|
end
|
||||||
end))
|
end))
|
||||||
|
|
||||||
TEST("cleanup()", wrap_root(function()
|
TEST("cleanup()", wrap_root(function()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue