test suite updates and additions for new capture semantics & suppression of error cascades

This commit is contained in:
Vern Paxson 2021-01-04 14:34:18 -08:00
parent 80f7d36582
commit fd309676bd
13 changed files with 47 additions and 39 deletions

View file

@ -2,26 +2,26 @@
hello :-)
peer added
receiver got ping: function 2
inside: 1 | outside: 11 | global: 100
inside: 1 | outside: 12 | global: 100
77
receiver got ping: function 1
begin: 100 | base_step: 2
begin: 100 | base_step: 2 | step: 76
178
receiver got ping: function 2
inside: 3 | outside: 11 | global: 100
inside: 3 | outside: 12 | global: 100
79
receiver got ping: function 1
begin: 100 | base_step: 4
begin: 100 | base_step: 4 | step: 76
180
receiver got ping: function 2
inside: 5 | outside: 11 | global: 100
inside: 5 | outside: 12 | global: 100
81
receiver got ping: function 1
begin: 100 | base_step: 6
begin: 100 | base_step: 6 | step: 76
182
receiver got ping: function 2
inside: 7 | outside: 11 | global: 100
inside: 7 | outside: 12 | global: 100
83

View file

@ -3,7 +3,7 @@ hello :)
peer added
begin: 100 | base_step: 50
sender got pong: function 2
inside: 1 | outside: 11 | global: 10
inside: 1 | outside: 12 | global: 10
77
begin: 100 | base_step: 50
sender got pong: function 1
@ -12,7 +12,7 @@ begin: 178 | base_step: 2 | step: 76
256
begin: 100 | base_step: 50
sender got pong: function 2
inside: 3 | outside: 11 | global: 10
inside: 3 | outside: 12 | global: 10
79
begin: 100 | base_step: 50
sender got pong: function 1
@ -21,7 +21,7 @@ begin: 180 | base_step: 4 | step: 76
260
begin: 100 | base_step: 50
sender got pong: function 2
inside: 5 | outside: 11 | global: 10
inside: 5 | outside: 12 | global: 10
81
begin: 100 | base_step: 50
sender got pong: function 1

View file

@ -19,8 +19,8 @@ expect: 160
160
expect: 225
225
expect: 290
290
expect: 225
225
tables:

View file

@ -1,11 +1,9 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in ./invalid.zeek, line 9: hook cannot be called directly, use hook operator (myhook)
warning in ./invalid.zeek, line 9: expression value ignored (myhook(3))
error in ./invalid.zeek, line 10: hook cannot be called directly, use hook operator (myhook)
error in ./invalid.zeek, line 11: hook cannot be called directly, use hook operator (myhook)
error in ./invalid.zeek, line 12: not a valid hook call expression (2 + 2)
warning in ./invalid.zeek, line 12: expression value ignored (2 + 2)
error in ./invalid.zeek, line 13: not a valid hook call expression (2 + 2)
error in ./invalid.zeek, line 15: hook cannot be called directly, use hook operator (h)
warning in ./invalid.zeek, line 15: expression value ignored (h(3))
error in ./invalid.zeek, line 16: hook cannot be called directly, use hook operator (h)

View file

@ -33,7 +33,7 @@ function send_event()
local log : myfunctype = function(c: count) : function(d: count) : count
{
# print fmt("inside: %s | outside: %s | global: %s", c, event_count, global_with_same_name);
return function(d: count) : count { return d + c; };
return function[c](d: count) : count { return d + c; };
};
local e2 = Broker::make_event(ping, "function 1", log);
@ -85,7 +85,7 @@ function my_funcs()
local l : myfunctype = function(c: count) : function(d: count) : count
{
print fmt("dogs");
return function(d: count) : count { return d + c; };
return function[c](d: count) : count { return d + c; };
};
}

View file

@ -54,6 +54,7 @@ function send_event()
local stepper = l(50);
++n;
++event_count;
if ( n % 2 == 0)
{
local e2 = Broker::make_event(ping, "function 1", l);

View file

@ -3,9 +3,11 @@
global numberone : count = 1;
type mutable_aggregate: record { x: count; };
function make_count_upper (start : count) : function(step : count) : count
{
return function(step : count) : count
return function[start](step : count) : count
{ return (start += (step + numberone)); };
}
@ -14,7 +16,7 @@ function dog_maker(name: string, weight: count) : function (action: string)
local eat = function (lbs: count) { print fmt("eat i weigh %s", lbs); };
local bark = function (who: string) { print fmt("bark i am %s", who); };
local dog = function (action: string)
local dog = function [eat, bark, name, weight](action: string)
{
switch action
{
@ -72,14 +74,14 @@ event zeek_init()
print c(1) == two(3);
# a little more complicated ...
local cat_dog = 100;
local add_n_and_m = function(n: count) : function(m : count) : function(o : count) : count
local cat_dog = mutable_aggregate($x=100);
local add_n_and_m = function[cat_dog](n: count) : function(m : count) : function(o : count) : count
{
cat_dog += 1;
cat_dog$x += 1;
local can_we_make_variables_inside = 11;
return function(m : count) : function(o : count) : count
{ return function(o : count) : count
{ return n + m + o + cat_dog + can_we_make_variables_inside; }; };
return function[can_we_make_variables_inside, cat_dog, n](m : count) : function(o : count) : count
{ return function[cat_dog, can_we_make_variables_inside, m, n](o : count) : count
{ return n + m + o + cat_dog$x + can_we_make_variables_inside; }; };
};
local add_m = add_n_and_m(2);
@ -95,14 +97,14 @@ event zeek_init()
# can mutate closure:
print "expect: 101";
print cat_dog;
print cat_dog$x;
# complicated - has state across calls
local two_part_adder_maker = function (begin : count) : function (base_step : count) : function ( step : count) : count
{
return function (base_step : count) : function (step : count) : count
return function [begin](base_step : count) : function (step : count) : count
{
return function (step : count) : count
return function [base_step, begin](step : count) : count
{
return (begin += base_step + step); }; }; };
@ -115,10 +117,17 @@ event zeek_init()
print stepper(15);
# another copy check
print "expect: 290";
#
# under old reference capture semantics, this would print 290 because
# the twotwofive copy wouldn't have a copy of the "begin" variable but
# instead a reference to it; under copy capture semantics, though,
# those are separate values, so executing stepper() after the copy
# won't affect the copy
#
print "expect: 225";
print twotwofive(15);
local hamster : count = 3;
local hamster = mutable_aggregate($x=3);
print "";
print "tables:";
@ -128,10 +137,10 @@ event zeek_init()
[1] = "symmetric active",
[2] = "symmetric passive",
[3] = "client",
} &default = function(i: count):string { return fmt("unknown-%d. outside-%d", i, hamster += 1); } &redef;
} &default = function[hamster](i: count):string { return fmt("unknown-%d. outside-%d", i, hamster$x += 1); } &redef;
# changing the value here will show in the function.
hamster += hamster;
hamster$x += hamster$x;
print "expect: unknown-11. outside-7";
print modes[11];
@ -156,7 +165,7 @@ event zeek_init()
[1] = "symmetric active",
[2] = "symmetric passive",
[3] = "client"
)&default = function(i: count):string { return fmt("unknown-%d. outside-%d", i, hamster_also += 1); } &redef;
)&default = function[hamster_also](i: count):string { return fmt("unknown-%d. outside-%d", i, hamster_also += 1); } &redef;
print "expect: unknown-11. outside-4";
print modes_also[11];

View file

@ -13,7 +13,7 @@ event zeek_init() &priority=+10
{
local outer = 101;
local lambda = function()
local lambda = function[outer]()
{ print outer; };
lambda();

View file

@ -3,9 +3,9 @@
local outer = 100;
local lambda = function()
local lambda = function[outer]()
{
local inner = function(a: count, b: count, c: count, d: count, e: count, f: count)
local inner = function[outer](a: count, b: count, c: count, d: count, e: count, f: count)
{
print outer + f;
};

View file

@ -8,6 +8,6 @@ type myrec: record {
event zeek_init()
{
local w = "world";
local mr = myrec($foo(a: string) = { print a + w; });
local mr = myrec($foo[w](a: string) = { print a + w; });
mr$foo("hello");
}

View file

@ -5,7 +5,7 @@ event zeek_init() &priority=+10
{
local outer = 101;
local lambda = function()
local lambda = function[outer]()
{ print outer + 2; };
lambda();

View file

@ -17,7 +17,7 @@ function map_1 (f: function(a: count): count, v: vector of count) : vector of co
# stacks two functions
function stacker (one : function(a: count): count, two: function (b: count): count): function(c: count): count
{
return function (c: count): count
return function [one,two](c: count): count
{
return one(two(c));
};
@ -25,7 +25,7 @@ function stacker (one : function(a: count): count, two: function (b: count): cou
function make_dog(name: string, weight: count) : function(i: string, item: string)
{
return function(i: string, item: string)
return function[name, weight](i: string, item: string)
{
switch i
{
@ -69,7 +69,7 @@ event zeek_init()
local make_laster = function(start: count) : function(i: count): count
{
return function(i: count): count
return function[start](i: count): count
{
local temp = i;
i += start;
@ -111,7 +111,7 @@ event zeek_init()
local vs = vector("dog", "cat", "fish");
for (i in vs)
{
mfs += function() { print i, vs[i]; };
mfs += function[i, vs]() { print i, vs[i]; };
}
for ( i in mfs)
mfs[i]();

View file

@ -9,7 +9,7 @@ function bar(b: string, c: string)
{
local f: Foo;
local d = 8;
f = [$x=function(a: string) : string
f = [$x=function[b, c, d](a: string) : string
{
local x = 0;
# Fail here: we've captured the closure.