Reviving HARDMEMTESTS

This commit brings a new implementation for HARDMEMTESTS, which forces
an emergency GC whenever possible. It also fixes some issues detected
with this option:
  - A small bug in lvm.c: a closure could be collected by an emergency
  GC while being initialized.
  - Some tests: a memory address can be immediatly reused after a GC;
  for instance, two consecutive '{}' expressions can return exactly the
  same address, if the first one is not anchored.
This commit is contained in:
Roberto Ierusalimschy
2019-07-18 14:58:15 -03:00
parent 024a6071ca
commit d36a31e673
4 changed files with 35 additions and 15 deletions

View File

@@ -163,11 +163,16 @@ do -- tests for '%p' format
assert(string.format("%p", 4) == null)
assert(string.format("%p", print) ~= null)
assert(string.format("%p", coroutine.running()) ~= null)
assert(string.format("%p", {}) ~= string.format("%p", {}))
do
local t1 = {}; local t2 = {}
assert(string.format("%p", t1) ~= string.format("%p", t2))
end
assert(string.format("%p", string.rep("a", 10)) ==
string.format("%p", string.rep("a", 10))) -- short strings
assert(string.format("%p", string.rep("a", 300)) ~=
string.format("%p", string.rep("a", 300))) -- long strings
do -- long strings
local s1 = string.rep("a", 300); local s2 = string.rep("a", 300)
assert(string.format("%p", s1) ~= string.format("%p", s2))
end
assert(#string.format("%90p", {}) == 90)
end