File: distribute.cc

package info (click to toggle)
purify 5.0.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 186,836 kB
  • sloc: cpp: 17,731; python: 510; xml: 182; makefile: 7; sh: 6
file content (54 lines) | stat: -rw-r--r-- 2,611 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "purify/distribute.h"
#include "purify/types.h"
#include "catch2/catch_all.hpp"
#include "purify/directories.h"
#include "purify/utilities.h"

using namespace purify;
TEST_CASE("Distribute") {
  // Test splitting up of data for separate nodes
  auto const uv_data = utilities::read_visibility(vla_filename("at166B.3C129.c0.vis"));
  std::printf("Distributing groups\n");
  t_int number_of_groups = 4;
  t_int number_of_vis = uv_data.u.size();
  std::vector<t_int> groups_equal = distribute::distribute_measurements(
      uv_data.u.segment(0, number_of_vis), uv_data.v.segment(0, number_of_vis),
      uv_data.w.segment(0, number_of_vis), number_of_groups, distribute::plan::equal, 1024);
  // Testing number of visiblities in groups adds to total
  CHECK(number_of_vis == groups_equal.size());
  for (t_int i = 0; i < groups_equal.size(); i++) {
    // checking nodes are in allowable values
    CHECK(groups_equal[i] >= 0);
    CHECK(groups_equal[i] < number_of_groups);
  }
  std::vector<t_int> groups_distance = distribute::distribute_measurements(
      uv_data.u.segment(0, number_of_vis), uv_data.v.segment(0, number_of_vis),
      uv_data.w.segment(0, number_of_vis), number_of_groups, distribute::plan::radial);
  // Testing number of visiblities in groups adds to total
  CHECK(number_of_vis == groups_distance.size());
  for (t_int i = 0; i < groups_distance.size(); i++) {
    // checking nodes are in allowable values
    CHECK(groups_distance[i] >= 0);
    CHECK(groups_distance[i] < number_of_groups);
  }
  std::vector<t_int> groups_noorder = distribute::distribute_measurements(
      uv_data.u.segment(0, number_of_vis), uv_data.v.segment(0, number_of_vis),
      uv_data.w.segment(0, number_of_vis), number_of_groups, distribute::plan::none);
  // Testing number of visiblities in groups adds to total
  CHECK(number_of_vis == groups_noorder.size());
  for (t_int i = 0; i < groups_noorder.size(); i++) {
    // checking nodes are in allowable values
    CHECK(groups_noorder[i] >= 0);
    CHECK(groups_noorder[i] < number_of_groups);
  }
  std::vector<t_int> groups_w_term = distribute::distribute_measurements(
      uv_data.u.segment(0, number_of_vis), uv_data.v.segment(0, number_of_vis),
      uv_data.w.segment(0, number_of_vis), number_of_groups, distribute::plan::w_term);
  // Testing number of visiblities in groups adds to total
  CHECK(number_of_vis == groups_distance.size());
  for (t_int i = 0; i < groups_distance.size(); i++) {
    // checking nodes are in allowable values
    CHECK(groups_distance[i] >= 0);
    CHECK(groups_distance[i] < number_of_groups);
  }
}