zeek/testing/btest/language/table-set-iterator-invalidation.zeek
Jon Siwek 3e9ac00f21 Separate stdout from stderr in btest baselines
Redirecting both to the same file can show platform-specific differences
(e.g. Alpine), likely due to different buffering defaults.
2021-03-30 16:23:23 -07:00

74 lines
1.6 KiB
Text

# @TEST-EXEC: zeek -b %INPUT >out 2>err
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff err
# Note that while modifying container membership during for-loop iteration is
# supposed to be undefined-behavior, it should be practically ok to have this
# test perform such operations if they always `break` out of the loop
# immediately afterward.
local t = table([1] = "one", [2] = "two", [3] = "three");
for ( i in t )
# Modifying an existing element is not qualified as modifying membership,
# so this doesn't trigger a warning.
t[i] = cat(i);
print t;
for ( i in t )
{
# Adding an element in a loop should trigger a warning.
t[4] = "four";
break;
}
print t;
for ( i in t )
{
# Deleting an element in a loop should trigger a warning.
delete t[4];
break;
}
print t;
for ( i in t )
# Trying to delete a non-existent element within in a loop does not
# actually modify membership, so does not trigger a warning.
delete t[0];
print t;
local s = set(1, 2, 3);
for ( n in s )
# Trying to add an existing element within in a loop does not
# actually modify membership, so does not trigger a warning.
add s[1];
for ( n in s )
{
# Adding an element in a loop should trigger a warning.
add s[4];
break;
}
print s;
for ( n in s )
{
# Deleting an element in a loop should trigger a warning.
delete s[4];
break;
}
print s;
for ( n in s )
# Trying to delete a non-existent element within in a loop does not
# actually modify membership, so does not trigger a warning.
delete s[0];
print s;