gc tests, more reuse removal
This commit is contained in:
parent
baa23cb527
commit
d7c153286e
@ -232,21 +232,20 @@ B scan_c1(Md1D* d, B x) { B f = d->f;
|
|||||||
SLOW2("𝕎` 𝕩", f, x);
|
SLOW2("𝕎` 𝕩", f, x);
|
||||||
B xf = getFillR(x);
|
B xf = getFillR(x);
|
||||||
|
|
||||||
bool reuse = TY(x)==t_harr && reusable(x);
|
HArr_p r = m_harr0c(x);
|
||||||
HArr_p r = reuse? harr_parts(REUSE(x)) : m_harr0c(x);
|
SGet(x)
|
||||||
AS2B xget = reuse? TI(x,getU) : TI(x,get); Arr* xa = a(x);
|
|
||||||
FC2 fc2 = c2fn(f);
|
FC2 fc2 = c2fn(f);
|
||||||
|
|
||||||
if (xr==1) {
|
if (xr==1) {
|
||||||
r.a[0] = xget(xa,0);
|
r.a[0] = Get(x,0);
|
||||||
for (usz i=1; i<ia; i++) r.a[i] = fc2(f, inc(r.a[i-1]), xget(xa,i));
|
for (usz i=1; i<ia; i++) r.a[i] = fc2(f, inc(r.a[i-1]), Get(x,i));
|
||||||
} else {
|
} else {
|
||||||
usz csz = arr_csz(x);
|
usz csz = arr_csz(x);
|
||||||
usz i = 0;
|
usz i = 0;
|
||||||
for (; i<csz; i++) r.a[i] = xget(xa,i);
|
for (; i<csz; i++) r.a[i] = Get(x,i);
|
||||||
for (; i<ia; i++) r.a[i] = fc2(f, inc(r.a[i-csz]), xget(xa,i));
|
for (; i<ia; i++) r.a[i] = fc2(f, inc(r.a[i-csz]), Get(x,i));
|
||||||
}
|
}
|
||||||
if (!reuse) decG(x);
|
decG(x);
|
||||||
return withFill(r.b, xf);
|
return withFill(r.b, xf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +308,6 @@ B scan_c2(Md1D* d, B w, B x) { B f = d->f;
|
|||||||
SLOW3("𝕨 F` 𝕩", w, x, f);
|
SLOW3("𝕨 F` 𝕩", w, x, f);
|
||||||
B wf = getFillR(w);
|
B wf = getFillR(w);
|
||||||
|
|
||||||
bool reuse = (TY(x)==t_harr && reusable(x)) | !ia;
|
|
||||||
usz i = 0;
|
usz i = 0;
|
||||||
HArr_p r = m_harr0c(x);
|
HArr_p r = m_harr0c(x);
|
||||||
SGet(x)
|
SGet(x)
|
||||||
@ -325,6 +323,6 @@ B scan_c2(Md1D* d, B w, B x) { B f = d->f;
|
|||||||
B pr = r.a[0] = fc2(f, w, Get(x,0)); i++;
|
B pr = r.a[0] = fc2(f, w, Get(x,0)); i++;
|
||||||
for (; i < ia; i++) r.a[i] = pr = fc2(f, inc(pr), Get(x,i));
|
for (; i < ia; i++) r.a[i] = pr = fc2(f, inc(pr), Get(x,i));
|
||||||
}
|
}
|
||||||
if (!reuse) decG(x);
|
decG(x);
|
||||||
return withFill(r.b, wf);
|
return withFill(r.b, wf);
|
||||||
}
|
}
|
||||||
|
|||||||
26
test/cases/gc.bqn
Normal file
26
test/cases/gc.bqn
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
%DEF base (
|
||||||
|
⟨V⇐Variation, U⇐Unshare, LV⇐ListVariations ⋄ CLR⇐ClearRefs, GC⟩ ← •internal
|
||||||
|
UseGC ← {𝕊: 𝕨 ⋄ 𝕩 ⋄ GC@ ⋄ @}
|
||||||
|
_tvaru ← {
|
||||||
|
F _𝕣 x: { F 𝕩 V U¨ x ⋄ CLR@}¨ LV 𝕩;
|
||||||
|
w F _𝕣 x: (LV 𝕨) {(𝕨 V U¨ w) F 𝕩 V U¨ x ⋄ CLR@}⌜ LV 𝕩
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
%USE base ⋄ UseGC¨_tvaru ↕⋈4
|
||||||
|
%USE base ⋄ UseGC¨_tvaru˜ ↕⋈4
|
||||||
|
%USE base ⋄ (↕4)⊸(UseGC¨)_tvaru ↕⋈4
|
||||||
|
%USE base ⋄ (UseGC¨)⟜(↕4)_tvaru ↕⋈4
|
||||||
|
|
||||||
|
%USE base ⋄ UseGC` _tvaru ↕⋈5
|
||||||
|
%USE base ⋄ 1⊸(UseGC`)_tvaru ↕⋈5
|
||||||
|
%USE base ⋄ UseGC`_tvaru ↕4‿2
|
||||||
|
%USE base ⋄ (↕⋈2) UseGC`_tvaru ↕4‿2
|
||||||
|
|
||||||
|
%USE base ⋄ UseGC´ _tvaru ↕⋈4
|
||||||
|
%USE base ⋄ @⊸(UseGC´)_tvaru ↕⋈4
|
||||||
|
|
||||||
|
%USE base ⋄ UseGC˝ _tvaru ↕⋈4
|
||||||
|
%USE base ⋄ @⊸(UseGC˝)_tvaru ↕⋈4
|
||||||
|
%USE base ⋄ UseGC˝ _tvaru ↕4‿2
|
||||||
|
%USE base ⋄ (↕⋈2) (UseGC˝)_tvaru ↕4‿2
|
||||||
Loading…
Reference in New Issue
Block a user