summaryrefslogtreecommitdiff
path: root/graphics/asymptote/tests/types/guide.asy
blob: ec16e0ed7ce7db57cd096e3b5e0d2fb1f51c8683 (plain)
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import TestLib;
StartTest("guide");

guide g;
assert(size(g) == 0);
assert(length(g) == -1);

guide g=(0,0){curl 2}..(1,1){W}..tension 5 and 6 ..{N}(4,2)..{curl 3}(0,1);

g=reverse(reverse(g));

assert(size(g) == 4);
assert(length(g) == 3);

assert(size((path) g) == 4);
assert(length((path) g) == 3);

assert(size((guide) (path) g) == 4);
assert(length((guide) (path) g) == 3);

assert(close(point(g,-1),(0,0)));
assert(close(point(g,0),(0,0)));
assert(close(point(g,1),(1,1)));
assert(close(point(g,3),(0,1)));
assert(close(point(g,4),(0,1)));

tensionSpecifier t=tensionSpecifier(g,1);
assert(close(t.out,5));
assert(close(t.in,6));
assert(t.atLeast == false);

pair[] z=dirSpecifier(g,0);
assert(close(z[0],0));
assert(close(z[1],0));

pair[] z=dirSpecifier(g,1);
assert(close(z[0],W));
assert(close(z[1],N));

real[] x=curlSpecifier(g,0);
assert(close(x[0],2));
assert(close(x[1],1));

real[] x=curlSpecifier(g,length(g)-1);
assert(close(x[0],1));
assert(close(x[1],3));

assert(!cyclic(g));
assert(!cyclic((path) g));
assert(!cyclic((guide) (path) g));

guide g=(0,0)..controls (3,5)..(1,1){W}..tension atleast 5 and 6 ..{N}(4,2)..
controls(1,2) and (2,4).. (0,1)..cycle;

g=reverse(reverse(g));

assert(size(g) == 4);
assert(length(g) == 4);

assert(size((path) g) == 4);
assert(length((path) g) == 4);

assert(size((guide) (path) g) == 4);
assert(length((guide) (path) g) == 4);

tensionSpecifier t=tensionSpecifier(g,1);
assert(close(t.out,5));
assert(close(t.in,6));
assert(t.atLeast == true);

pair[] z=controlSpecifier(g,0);
assert(close(z[0],(3,5)));
assert(close(z[1],(3,5)));

pair[] z=controlSpecifier(g,2);
assert(close(z[0],(1,2)));
assert(close(z[1],(2,4)));

real[] x=curlSpecifier(g,0);
assert(close(x[0],1));
assert(close(x[1],1));

real[] x=curlSpecifier(g,length(g)-1);
assert(close(x[0],1));
assert(close(x[1],1));

assert(cyclic(g));
assert(cyclic((path) g));
assert(cyclic((guide) (path) g));

guide g=(0,0)..controls (3,5)..(1,1){W}..tension atleast 5 and 6 ..{N}(4,2)..
cycle..controls(1,2) and (2,4)..(0,1)..cycle;

assert(size(g) == 5);
assert(length(g) == 5);

assert(size((path) g) == 5);
assert(length((path) g) == 5);

assert(size((guide) (path) g) == 5);
assert(length((guide) (path) g) == 5);

pair[] z=dirSpecifier(g,0);
assert(close(z[0],0));
assert(close(z[1],0));

pair[] z=dirSpecifier(g,1);
assert(close(z[0],W));
assert(close(z[1],N));

tensionSpecifier t=tensionSpecifier(g,1);
assert(close(t.out,5));
assert(close(t.in,6));
assert(t.atLeast == true);

pair[] z=controlSpecifier(g,0);
assert(close(z[0],(3,5)));
assert(close(z[1],(3,5)));

real[] x=curlSpecifier(g,0);
assert(close(x[0],1));
assert(close(x[1],1));

real[] x=curlSpecifier(g,length(g)-1);
assert(close(x[0],1));
assert(close(x[1],1));

assert(cyclic(g));
assert(cyclic((path) g));
assert(cyclic((guide) (path) g));

guide g=(0,0)..controls (3,5) and (4,6)..cycle;

g=reverse(g);

assert(size(g) == 1);
assert(length(g) == 1);

pair[] z=controlSpecifier(g,0);
assert(close(z[0],(4,6)));
assert(close(z[1],(3,5)));

// Test building guides in loops.
int N = 100;
guide g;
for (int i = 0; i < N; ++i)
    g = g--(i,i^2);
path p=g;
for (int i = 0; i < N; ++i)
    assert(point(p, i) == (i,i^2));

int N = 100;
guide g;
for (int i = 0; i < N; ++i)
    g = (i,i^2)--g;
path p=g;
for (int i = N-1, j = 0; i >= 0; --i, ++j)
    assert(point(p, j) == (i,i^2));
EndTest();