From 5d8dfe892a2ea89f706ee140c3bdcfd89fe03fda Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Wed, 21 Jan 2026 22:40:55 +0100 Subject: Add Redis source code for testing --- examples/redis-unstable/deps/lua/test/sieve.lua | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 examples/redis-unstable/deps/lua/test/sieve.lua (limited to 'examples/redis-unstable/deps/lua/test/sieve.lua') diff --git a/examples/redis-unstable/deps/lua/test/sieve.lua b/examples/redis-unstable/deps/lua/test/sieve.lua new file mode 100644 index 0000000..0871bb2 --- /dev/null +++ b/examples/redis-unstable/deps/lua/test/sieve.lua @@ -0,0 +1,29 @@ +-- the sieve of of Eratosthenes programmed with coroutines +-- typical usage: lua -e N=1000 sieve.lua | column + +-- generate all the numbers from 2 to n +function gen (n) + return coroutine.wrap(function () + for i=2,n do coroutine.yield(i) end + end) +end + +-- filter the numbers generated by `g', removing multiples of `p' +function filter (p, g) + return coroutine.wrap(function () + while 1 do + local n = g() + if n == nil then return end + if math.mod(n, p) ~= 0 then coroutine.yield(n) end + end + end) +end + +N=N or 1000 -- from command line +x = gen(N) -- generate primes up to N +while 1 do + local n = x() -- pick a number until done + if n == nil then break end + print(n) -- must be a prime number + x = filter(n, x) -- now remove its multiples +end -- cgit v1.2.3