Merge remote-tracking branch 'origin/topic/timw/393-vector-slicing'

* origin/topic/timw/393-vector-slicing:
  Fix memory leak in vector slice assignment
  Misc. tweaks to vector slicing implementation
  Add ability to grow/shrink a vector using slicing, also adds Insert/Remove methods for VectorVal
  Allow assignment for vectors using slices
  Check for integral slice indexes, add extra test for [:]
  Return an empty vector if the indices for slicing don't make sense
  GH-393: Add slice notation for vectors
This commit is contained in:
Johanna Amann 2019-06-19 09:39:06 -07:00
commit 979f64f16e
13 changed files with 282 additions and 27 deletions

View file

@ -58,3 +58,12 @@ access element (PASS)
&& operator (PASS)
|| operator (PASS)
+= operator (PASS)
slicing (PASS)
slicing (PASS)
slicing (PASS)
slicing (PASS)
slicing (PASS)
slicing assignment (PASS)
slicing assignment (PASS)
slicing assignment grow (PASS)
slicing assignment shrink (PASS)

View file

@ -0,0 +1,30 @@
# Needs perftools support.
#
# @TEST-GROUP: leaks
#
# @TEST-REQUIRES: zeek --help 2>&1 | grep -q mem-leaks
#
# @TEST-EXEC: HEAP_CHECK_DUMP_DIRECTORY=. HEAPCHECK=local btest-bg-run zeek zeek -m -b -r $TRACES/wikipedia.trace %INPUT
# @TEST-EXEC: btest-bg-wait 60
global did_it = F;
event new_connection(c: connection)
{
if ( did_it )
return;
did_it = T;
# Slicing tests.
local v17 = vector( 1, 2, 3, 4, 5 );
print v17[0:2];
print v17[-3:-1];
print v17[:2];
print v17[2:];
print v17[:];
v17[0:1] = vector(6);
v17[2:4] = vector(7, 8);
v17[2:4] = vector(9, 10, 11);
v17[2:5] = vector(9);
}

View file

@ -168,5 +168,19 @@ event zeek_init()
v16 += 40;
test_case( "+= operator", all_set(v16 == vector( 10, 20, 30, 40 )) );
# Slicing tests.
local v17 = vector( 1, 2, 3, 4, 5 );
test_case( "slicing", all_set(v17[0:2] == vector( 1, 2 )) );
test_case( "slicing", all_set(v17[-3:-1] == vector( 3, 4 )) );
test_case( "slicing", all_set(v17[:2] == vector( 1, 2 )) );
test_case( "slicing", all_set(v17[2:] == vector( 3, 4, 5 )) );
test_case( "slicing", all_set(v17[:] == v17) );
v17[0:1] = vector(6);
test_case( "slicing assignment", all_set(v17 == vector(6, 2, 3, 4, 5)) );
v17[2:4] = vector(7, 8);
test_case( "slicing assignment", all_set(v17 == vector(6, 2, 7, 8, 5)) );
v17[2:4] = vector(9, 10, 11);
test_case( "slicing assignment grow", all_set(v17 == vector(6, 2, 9, 10, 11, 5)) );
v17[2:5] = vector(9);
test_case( "slicing assignment shrink", all_set(v17 == vector(6, 2, 9, 5)) );
}