LCOV - code coverage report
Current view: top level - UTests - testWindow.cpp (source / functions) Hit Total Coverage
Test: Coverage example Lines: 39 42 92.9 %
Date: 2021-12-02 17:21:05 Functions: 6 6 100.0 %

          Line data    Source code
       1             : ///////////////////////////////////////////////////////////////////////////
       2             : // Spetabaru - Berenger Bramas MPCDF - 2017
       3             : // Under LGPL Licence, please you must read the LICENCE file.
       4             : ///////////////////////////////////////////////////////////////////////////
       5             : 
       6             : #include <future>
       7             : 
       8             : #include "UTester.hpp"
       9             : 
      10             : #include "Data/SpDataAccessMode.hpp"
      11             : #include "Utils/SpUtils.hpp"
      12             : 
      13             : #include "Task/SpTask.hpp"
      14             : #include "Legacy/SpRuntime.hpp"
      15             : 
      16             : class TestWindow : public UTester< TestWindow > {
      17             :     using Parent = UTester< TestWindow >;
      18             : 
      19           1 :     void TestBasic(){
      20             :         {
      21           1 :             const int NbTasks = 10;
      22          22 :             std::promise<int> promises[NbTasks];
      23             : 
      24           1 :             const int NbThreads = 10;
      25           2 :             SpRuntime runtime(NbThreads);
      26             : 
      27           1 :             int readVal = 0;
      28             : 
      29          11 :             for(int idxTask = 0 ; idxTask < NbTasks ; ++idxTask){
      30           0 :                 runtime.task(SpRead(readVal),
      31          20 :                              [&,idxTask](const int& /*readVal*/){
      32          10 :                     promises[idxTask].get_future().get();
      33          10 :                     usleep(1000);
      34          32 :                 });
      35             :             }
      36             : 
      37          11 :             for(int idxTask = NbTasks ; idxTask < 2*NbTasks ; ++idxTask){
      38          10 :                 runtime.waitRemain(idxTask);
      39             :             }
      40             : 
      41          11 :             for(int idxTaskPromise = 0 ; idxTaskPromise < NbTasks ; ++idxTaskPromise){
      42          10 :                 promises[idxTaskPromise].set_value(0);
      43         165 :                 for(int idxTask = NbTasks-idxTaskPromise-1 ; idxTask < 2*NbTasks ; ++idxTask){
      44         155 :                     runtime.waitRemain(idxTask);
      45             :                 }
      46             :             }
      47             : 
      48           1 :             runtime.waitAllTasks();
      49             :         }
      50             :         {
      51           1 :             const int NbThreads = 10;
      52           2 :             SpRuntime runtime(NbThreads);
      53             : 
      54           1 :             int readVal = 0;
      55           2 :             std::promise<int> promise0;
      56           2 :             std::promise<int> promise1;
      57             : 
      58           0 :             runtime.task(SpRead(readVal),
      59           1 :                          [&](const int& /*readVal*/){
      60           1 :                 promise0.get_future().get();
      61           2 :             });
      62             : 
      63           0 :             runtime.task(SpRead(readVal),
      64           1 :                          [&](const int& /*readVal*/){
      65           1 :                 promise1.get_future().get();
      66           2 :             });
      67             : 
      68           1 :             runtime.waitRemain(3);
      69             : 
      70           1 :             promise0.set_value(0);
      71           1 :             runtime.waitRemain(2);
      72             : 
      73           1 :             promise1.set_value(0);
      74             : 
      75           1 :             runtime.waitAllTasks();
      76             :         }
      77           1 :     }
      78             : 
      79           1 :     void SetTests() {
      80           1 :         Parent::AddTest(&TestWindow::TestBasic, "Basic test for commute access");
      81           1 :     }
      82             : };
      83             : 
      84             : // You must do this
      85           1 : TestClass(TestWindow)
      86             : 
      87             : 

Generated by: LCOV version 1.14