forked from livecode/livecode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrecursion.livecodescript
More file actions
121 lines (104 loc) · 2.98 KB
/
Copy pathrecursion.livecodescript
File metadata and controls
121 lines (104 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
script "CoreControlRecursion"
/*
Copyright (C) 2019 LiveCode Ltd.
This file is part of LiveCode.
LiveCode is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License v3 as published by the Free
Software Foundation.
LiveCode is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with LiveCode. If not see <http://www.gnu.org/licenses/>. */
on TestSelfRecursion
local tA, tB
put "a" into tA
put "b" into tB
TestAssert "non-ref even self recursion worked", \
_DoSelfRecursion(10, tA, tB) is tA and \
tA is "a" and \
tB is "b"
put "a" into tA
put "b" into tB
TestAssert "non-ref odd self recursion worked", \
_DoSelfRecursion(11, tA, tB) is tB and \
tA is "a" and \
tB is "b"
put "a" into tA
put "b" into tB
TestAssert "ref even self recursion worked", \
_DoSelfRecursionRefs(10, tA, tB) is tA and \
tA is "a" and \
tB is "b"
put "a" into tA
put "b" into tB
TestAssert "ref odd self recursion worked", \
_DoSelfRecursionRefs(11, tA, tB) is tA and \
tA is "b" and \
tB is "a"
put "a" into tA
put "b" into tB
TestAssert "non-ref private even self recursion worked", \
_DoSelfRecursion_Private(10, tA, tB) is tA and \
tA is "a" and \
tB is "b"
put "a" into tA
put "b" into tB
TestAssert "non-ref private odd self recursion worked", \
_DoSelfRecursion_Private(11, tA, tB) is tB and \
tA is "a" and \
tB is "b"
put "a" into tA
put "b" into tB
TestAssert "ref even private self recursion worked", \
_DoSelfRecursionRefs_Private(10, tA, tB) is tA and \
tA is "a" and \
tB is "b"
put "a" into tA
put "b" into tB
TestAssert "ref odd private self recursion worked", \
_DoSelfRecursionRefs_Private(11, tA, tB) is tA and \
tA is "b" and \
tB is "a"
end TestSelfRecursion
function _DoSelfRecursion pCount, pA, pB
local tC
put pA into tC
put pB into pA
put tC into pB
if pCount is 1 then
return pA
end if
return _DoSelfRecursion(pCount - 1, pA, pB)
end _DoSelfRecursion
function _DoSelfRecursionRefs pCount, @pA, @pB
local tC
put pA into tC
put pB into pA
put tC into pB
if pCount is 1 then
return pA
end if
return _DoSelfRecursionRefs(pCount - 1, pA, pB)
end _DoSelfRecursionRefs
private function _DoSelfRecursion_Private pCount, pA, pB
local tC
put pA into tC
put pB into pA
put tC into pB
if pCount is 1 then
return pA
end if
return _DoSelfRecursion_Private(pCount - 1, pA, pB)
end _DoSelfRecursion_Private
private function _DoSelfRecursionRefs_Private pCount, @pA, @pB
local tC
put pA into tC
put pB into pA
put tC into pB
if pCount is 1 then
return pA
end if
return _DoSelfRecursionRefs_Private(pCount - 1, pA, pB)
end _DoSelfRecursionRefs_Private