1function _test(produce, consume, check) 2 local _from = Stash() 3 local _to = Stash() 4 5 if produce.seq then 6 local _seq = _from:sequence() 7 produce.seq(_seq) 8 _seq:pop() 9 elseif produce.tup then 10 local _tup = _from:tuple() 11 produce.tup(_tup) 12 _tup:pop() 13 end 14 15 _from:read() 16 17 if consume.seq then 18 local _seq = _to:sequence() 19 consume.seq(128, _from, _seq) 20 _seq:pop() 21 elseif consume.tup then 22 local _tup = _to:tuple() 23 consume.tup(_from, _tup) 24 _tup:pop() 25 end 26 27 _to:read() 28 29 if check then 30 check(_to) 31 end 32 33 local _state = Stash() 34 35 if stash then 36 stash(_state) 37 end 38 39 _state:read() 40 41 if apply then 42 apply(_state) 43 end 44 45 _state:write() 46 47 if save then 48 save(_state) 49 end 50 51 _state:read() 52 53 if restore then 54 restore(_state) 55 end 56 57 if once then 58 local n = 128 59 local _seq0 = Stash() 60 local _seq1 = Stash() 61 local _seq2 = Stash() 62 local _seq3 = Stash() 63 local _seq4 = Stash() 64 local _forge0 = Stash() 65 local _forge1 = Stash() 66 local _forge2 = Stash() 67 local _forge3 = Stash() 68 local _forge4 = Stash() 69 _seq0:sequence():pop() 70 _seq0:read() 71 _seq1:sequence():pop() 72 _seq1:read() 73 _seq2:sequence():pop() 74 _seq2:read() 75 _seq3:sequence():pop() 76 _seq3:read() 77 _seq4:sequence():pop() 78 _seq4:read() 79 80 once(n, _seq0, _forge0, _seq1, _forge1, _seq2, _forge2, _seq3, _forge3, _seq4, _forge4) 81 end 82 83 if run then 84 local n = 128 85 local _seq0 = Stash() 86 local _seq1 = Stash() 87 local _seq2 = Stash() 88 local _seq3 = Stash() 89 local _seq4 = Stash() 90 local _forge0 = Stash() 91 local _forge1 = Stash() 92 local _forge2 = Stash() 93 local _forge3 = Stash() 94 local _forge4 = Stash() 95 _seq0:sequence():pop() 96 _seq0:read() 97 _seq1:sequence():pop() 98 _seq1:read() 99 _seq2:sequence():pop() 100 _seq2:read() 101 _seq3:sequence():pop() 102 _seq3:read() 103 _seq4:sequence():pop() 104 _seq4:read() 105 106 run(n, _seq0, _forge0, _seq1, _forge1, _seq2, _forge2, _seq3, _forge3, _seq4, _forge4) 107 end 108end 109 110local function parse(pin) 111 if not pin then return end 112 113 local fin = io.input(pin) 114 if not fin then return end 115 116 local txt = fin:read('*all') 117 fin:close() 118 119 for id, o in string.gmatch(txt, '<pre><code%s*data%-ref%s*=%s*"(.-)"%s*>(.-)</code></pre>') do 120 o = string.gsub(o, '&', '&') 121 o = string.gsub(o, '<', '<') 122 o = string.gsub(o, '>', '>') 123 124 assert(id) 125 assert(o) 126 127 run = nil 128 once = nil 129 stash = nil 130 apply = nil 131 save = nil 132 restore = nil 133 134 stash_sequence = nil 135 stash_tuple = nil 136 137 apply_sequence = nil 138 apply_tuple = nil 139 140 check = nil 141 142 print('[test] ' .. id) 143 144 local chunk = load(o) 145 assert(chunk) 146 147 chunk() 148 149 local _produce = { 150 seq = stash_sequence, 151 tup = stash_tuple 152 } 153 154 local _consume = { 155 seq = apply_sequence, 156 tup = apply_tuple 157 } 158 159 _test(_produce, _consume, check) 160 161 collectgarbage() 162 end 163end 164 165parse('../manual/manual.html.in') 166