Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
7c54c614
Commit
7c54c614
authored
Apr 19, 2018
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Provide exec_all_fixtures utility function
parent
3d645069
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
32 additions
and
39 deletions
+32
-39
libcaf_test/caf/test/io_dsl.hpp
libcaf_test/caf/test/io_dsl.hpp
+32
-39
No files found.
libcaf_test/caf/test/io_dsl.hpp
View file @
7c54c614
...
...
@@ -131,6 +131,31 @@ private:
}
};
template
<
class
Iterator
>
void
exec_all_fixtures
(
Iterator
first
,
Iterator
last
)
{
using
fixture_ptr
=
caf
::
detail
::
decay_t
<
decltype
(
*
first
)
>
;
auto
advance
=
[](
fixture_ptr
x
)
{
return
x
->
sched
.
try_run_once
()
||
x
->
mpx
.
read_data
()
||
x
->
mpx
.
try_exec_runnable
()
||
x
->
mpx
.
try_accept_connection
();
};
auto
trigger_timeouts
=
[](
fixture_ptr
x
)
{
auto
&
sched
=
x
->
sched
;
sched
.
clock
().
current_time
+=
x
->
credit_round_interval
;
sched
.
dispatch
();
};
for
(;;)
{
// Exhaust all messages in the system.
while
(
std
::
any_of
(
first
,
last
,
advance
))
;
// repeat
// Try to "revive" the system by dispatching timeouts.
std
::
for_each
(
first
,
last
,
trigger_timeouts
);
// Stop if the timeouts didn't cause new activity.
if
(
std
::
none_of
(
first
,
last
,
advance
))
return
;
}
}
/// Binds `test_coordinator_fixture<Config>` to `test_node_fixture`.
template
<
class
Config
=
caf
::
actor_system_config
>
using
test_node_fixture_t
=
test_node_fixture
<
test_coordinator_fixture
<
Config
>>
;
...
...
@@ -157,32 +182,19 @@ public:
// Convenience function for transmitting all "network" traffic.
void
network_traffic
()
{
repeat
(
[](
planet_type
*
x
)
{
auto
f
=
[](
planet_type
*
x
)
{
return
x
->
mpx
.
try_exec_runnable
()
||
x
->
mpx
.
read_data
();
});
};
planet_type
*
planets
[]
=
{
&
earth
,
&
mars
};
while
(
std
::
any_of
(
std
::
begin
(
planets
),
std
::
end
(
planets
),
f
))
;
// repeat
}
// Convenience function for transmitting all "network" traffic and running
// all executables on earth and mars.
void
exec_all
()
{
auto
advance
=
[](
planet_type
*
x
)
{
return
x
->
mpx
.
try_exec_runnable
()
||
x
->
mpx
.
read_data
()
||
x
->
sched
.
try_run_once
();
};
auto
trigger_timeouts
=
[](
planet_type
*
x
)
{
auto
&
sched
=
x
->
sched
;
sched
.
clock
().
current_time
+=
x
->
credit_round_interval
;
sched
.
dispatch
();
};
for
(;;)
{
// Exhaust all messages in the system.
repeat
(
advance
);
// Try to "revive" the system by dispatching timeouts.
once_for_each
(
trigger_timeouts
);
// Stop if the timeouts didn't cause new activity.
if
(
!
on_any
(
advance
))
return
;
}
planet_type
*
planets
[]
=
{
&
earth
,
&
mars
};
exec_all_fixtures
(
std
::
begin
(
planets
),
std
::
end
(
planets
));
}
void
prepare_connection
(
planet_type
&
server
,
planet_type
&
client
,
...
...
@@ -190,25 +202,6 @@ public:
server
.
mpx
.
prepare_connection
(
server
.
acc
,
server
.
conn
,
client
.
mpx
,
std
::
move
(
host
),
port
,
client
.
conn
);
}
private:
template
<
class
F
>
bool
on_any
(
F
f
)
{
planet_type
*
planets
[]
=
{
&
earth
,
&
mars
};
return
std
::
any_of
(
std
::
begin
(
planets
),
std
::
end
(
planets
),
f
);
}
template
<
class
F
>
void
repeat
(
F
f
)
{
while
(
on_any
(
f
))
;
// rince and repeat
}
template
<
class
F
>
void
once_for_each
(
F
f
)
{
planet_type
*
planets
[]
=
{
&
earth
,
&
mars
};
std
::
for_each
(
std
::
begin
(
planets
),
std
::
end
(
planets
),
f
);
}
};
/// Binds `test_coordinator_fixture<Config>` to `point_to_point_fixture`.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment