Swath_test.py
Go to the documentation of this file.
1 #==============================================================================
2 # Copyright (C) 2021-2024 Wageningen University - All Rights Reserved
3 # Author: Gonzalo Mier
4 # BSD-3 License
5 #==============================================================================
6 
7 import pytest
8 import math
9 import fields2cover as f2c
10 
11 def near(a, b, error = 1e-7):
12  assert abs(a - b) < error
13 
14 
16  swath1 = f2c.Swath(f2c.LineString(f2c.VectorPoint(
17  [f2c.Point(0, 0), f2c.Point(1, 1)])), 1.0);
18  swath2 = swath1.clone();
19  swath2.reverse();
20  assert (swath1.hasSameDir(swath1));
21  assert not (swath1.hasSameDir(swath2));
22  assert not (swath2.hasSameDir(swath1));
23 
25  swath1 = f2c.Swath(f2c.LineString(f2c.VectorPoint([
26  f2c.Point(0, 0), f2c.Point(1, 1)])), 1.0, 1);
27  swath2 = f2c.Swath(f2c.LineString(f2c.VectorPoint(
28  [f2c.Point(0, 0), f2c.Point(2, 2)])), 1.0, 2);
29  swath3 = f2c.Swath(f2c.LineString(f2c.VectorPoint(
30  [f2c.Point(1, 1), f2c.Point(0, 0)])), 1.0, 3);
31  swath4 = f2c.Swath(f2c.LineString(f2c.VectorPoint(
32  [f2c.Point(0, 0), f2c.Point(1, 1)])), 2.0, 4);
33  swath5 = f2c.Swath(f2c.LineString(f2c.VectorPoint(
34  [f2c.Point(1, 0), f2c.Point(2, 2)])), 1.0, 5);
35  swath6 = f2c.Swath(f2c.LineString(f2c.VectorPoint(
36  [f2c.Point(0, 1), f2c.Point(2, 2)])), 1.0, 6);
37 
38  assert not (swath1 != swath1);
39  assert (swath1 == swath1);
40  assert (swath1 >= swath1);
41  assert (swath1 <= swath1);
42  assert not (swath1 < swath1);
43  assert not (swath1 > swath1);
44  assert (swath1 != swath3);
45  assert not (swath1 == swath3);
46  assert (swath1 != swath4);
47  assert not (swath1 == swath4);
48  assert not (swath1 > swath4);
49  assert (swath1 < swath4);
50  assert not (swath1 >= swath4);
51  assert (swath1 <= swath4);
52  assert (swath1 < swath5);
53  assert not (swath1 > swath5);
54  assert (swath1 <= swath5);
55  assert not (swath1 >= swath5);
56  assert (swath5 > swath1);
57  assert not (swath5 < swath1);
58  assert (swath5 >= swath1);
59  assert not (swath5 <= swath1);
60  assert (swath1 < swath6);
61  assert not (swath1 > swath6);
62  assert (swath1 <= swath6);
63  assert not (swath1 >= swath6);
64  assert (swath6 > swath1);
65  assert not (swath6 < swath1);
66  assert (swath6 >= swath1);
67  assert not (swath6 <= swath1);
68 
69 
70 
72  path1 = f2c.LineString();
73  path2 = f2c.LineString();
74  path3 = f2c.LineString();
75  path1.addPoint( 0.0, 1.0);
76  path1.addPoint( 4.0, 1.0);
77  path2.addPoint( 0.0, 3.0);
78  path2.addPoint( 4.0, 3.0);
79  path3.addPoint( 0.0, 0.0);
80  path3.addPoint( 1.0, 1.0);
81  swath1 = f2c.Swath(path1);
82  swath2 = f2c.Swath(path2);
83  swath3 = f2c.Swath(path3);
84 
85  near(swath1.length(), 4);
86  near(swath2.length(), 4);
87  near(pow(swath3.length(),2), 2, 1e-7);
88 
90  swath = f2c.Swath(5.0);
91  near(swath.getWidth(), 5.0);
92 
93  swath2 = f2c.Swath(0.2);
94  near(swath2.getWidth(), 0.2);
95 
96  path = f2c.LineString();
97  path.addPoint(0.0, 1.0);
98  path.addPoint(4.0, 1.0);
99  """
100  EXPECT_THROW(f2c.Swath(path, -10), std::invalid_argument);
101  EXPECT_THROW(f2c.Swath(0), std::invalid_argument);
102  EXPECT_THROW(f2c.Swath(-10), std::invalid_argument);
103  """
104 
105 
107  swath_empty = f2c.Swath(f2c.LineString(), 1.0);
108  assert (swath_empty.areaCovered().isEmpty());
109 
110  line = f2c.LineString(f2c.VectorPoint(
111  [f2c.Point(0, 1), f2c.Point(4, 1)]));
112  swath = f2c.Swath(line, 2.0);
113  cell = swath.areaCovered();
114  assert (swath.getWidth() * swath.length() == cell.getGeometry(0).area());
115  assert (swath.getWidth() * swath.length() >= 0.5 * swath.area());
116  assert (swath.getWidth() * swath.length() <= swath.area());
117 
118 
119 
121  path1 = f2c.LineString();
122  path2 = f2c.LineString();
123  path3 = f2c.LineString();
124  path1.addPoint( 0.0, 1.0);
125  path1.addPoint( 4.0, 1.0);
126  path2.addPoint( 3.0, 1.0);
127  path2.addPoint( 3.0, 4.0);
128  path3.addPoint( 0.0, 0.0);
129  path3.addPoint( 1.0, 1.0);
130  swath_empty = f2c.Swath();
131  swath1 = f2c.Swath(path1);
132  swath2 = f2c.Swath(path2);
133  swath3 = f2c.Swath(path3);
134 
135  near(swath_empty.getInAngle(), -1.0);
136  near(swath_empty.getOutAngle(), -1.0);
137  near(math.fmod(swath1.getInAngle(), 2*math.pi), 0.0, 1e-5);
138  near(math.fmod(swath2.getInAngle(),2*math.pi), math.pi/2, 1e-5);
139  near(math.fmod(swath3.getInAngle(),2*math.pi), math.pi / 4.0, 1e-5);
140  near(math.fmod(swath1.getInAngle(),2*math.pi), math.fmod(swath1.getOutAngle(),2*math.pi), 1e-5);
141  near(math.fmod(swath2.getInAngle(),2*math.pi), math.fmod(swath2.getOutAngle(),2*math.pi), 1e-5);
142  near(math.fmod(swath3.getInAngle(),2*math.pi), math.fmod(swath3.getOutAngle(),2*math.pi), 1e-5);
143 
145  path1 = f2c.LineString();
146  path1.addPoint( -100.0, 30.0);
147  path1.addPoint( 4.0, 24.2);
148  path1.addPoint( 50.0, -34.2);
149  swath1 = f2c.Swath(path1);
150 
151  near(swath1.startPoint().getX(), -100.0, 1e-5);
152  near(swath1.startPoint().getY(), 30.0, 1e-5);
153  near(swath1.endPoint().getX(), 50.0, 1e-5);
154  near(swath1.endPoint().getY(), -34.2, 1e-5);
155 
Swath_test.test_fields2cover_types_swath_angles
def test_fields2cover_types_swath_angles()
Definition: Swath_test.py:120
Swath_test.test_fields2cover_types_swath_comparison
def test_fields2cover_types_swath_comparison()
Definition: Swath_test.py:24
Swath_test.test_fields2cover_types_swath_startAndEndPoints
def test_fields2cover_types_swath_startAndEndPoints()
Definition: Swath_test.py:144
Swath_test.near
def near(a, b, error=1e-7)
Definition: Swath_test.py:11
Swath_test.test_fields2cover_types_swath_length
def test_fields2cover_types_swath_length()
Definition: Swath_test.py:71
Swath_test.test_fields2cover_types_swath_area
def test_fields2cover_types_swath_area()
Definition: Swath_test.py:106
Swath_test.test_fields2cover_types_swath_width
def test_fields2cover_types_swath_width()
Definition: Swath_test.py:89
Swath_test.test_fields2cover_types_swath_hasSameDir
def test_fields2cover_types_swath_hasSameDir()
Definition: Swath_test.py:15


fields2cover
Author(s):
autogenerated on Fri Apr 25 2025 02:18:31