1\set ECHO none
2SELECT set_sphere_output_precision(8);
3SET extra_float_digits = 0;
4\set ECHO all
5
6-- Input/Output ---
7
8SELECT set_sphere_output( 'RAD' );
9
10SELECT '< (1h 2m 30s , +1d 2m 30s), 1.0d >'::scircle;
11
12SELECT '< (1h 2m 30s , +1d 2m 30s), 1d 30m >'::scircle;
13
14SELECT '< (1h 2m 30s , +1d 2m 30s), 0.1 >'::scircle;
15
16SELECT '< (1h 2m 30s , +1d 2m 30s), 90d >'::scircle;
17
18SELECT set_sphere_output( 'DEG' );
19
20SELECT '< (1h 2m 30s , +1d 2m 30s), 1.0d >'::scircle;
21
22SELECT '< (1h 2m 30s , +1d 2m 30s), 1d 30m >'::scircle;
23
24SELECT '< (1h 2m 30s , +1d 2m 30s), 0.1 >'::scircle;
25
26SELECT '< (1h 2m 30s , +1d 2m 30s), 90d >'::scircle;
27
28SELECT set_sphere_output( 'DMS' );
29
30SELECT '< (1h 2m 30s , +1d 2m 30s), 1.0d >'::scircle;
31
32SELECT '< (1h 2m 30s , +1d 2m 30s), 1d 30m >'::scircle;
33
34SELECT '< (1h 2m 30s , +1d 2m 30s), 0.1 >'::scircle;
35
36SELECT '< (1h 2m 30s , +1d 2m 30s), 90d >'::scircle;
37
38SELECT set_sphere_output( 'HMS' );
39
40SELECT '< (1h 2m 30s , +1d 2m 30s), 1.0d >'::scircle;
41
42SELECT '< (1h 2m 30s , +1d 2m 30s), 1d 30m >'::scircle;
43
44SELECT '< (1h 2m 30s , +1d 2m 30s), 0.1 >'::scircle;
45
46SELECT '< (1h 2m 30s , +1d 2m 30s), 90d >'::scircle;
47
48SELECT set_sphere_output( 'DMS' );
49
50
51
52-- Functions
53
54
55-- checking spherical circle operators
56
57SELECT scircle '<(0, 90d),1>'   = '<(0, 90d),1>' ;
58SELECT scircle '<(0,-90d),1>'  <> '<(0, 90d),1>' ;
59
60
61-- float8 dist(scircle,scircle)
62
63SELECT 180.0*dist('<( 0h 2m 30s , 10d 0m 0s), 0.1d>'::scircle,'<( 0h 2m 30s , -10d 0m 0s),0.1d>'::scircle)/pi();
64
65SELECT 180.0*dist('<( 0h 0m 00s , 0d 0m 0s), 1.0d>'::scircle,'<( 1h 0m 00s , 0d 0m 0s),1.0d>'::scircle)/pi();
66
67SELECT 180.0*dist('<( 23h 30m 00s , 0d 0m 0s), 1.0d>'::scircle,'<( 1h 0m 00s , 0d 0m 0s),1.5d>'::scircle)/pi();
68
69SELECT 180.0*dist('<( 0h 40m 00s , 0d 0m 0s), 1.0d>'::scircle,'<( 0h 50m 00s , 0d 0m 0s),1.0d>'::scircle)/pi();
70
71SELECT 180.0*dist('<( 0h 40m 00s , 0d 0m 0s), 1.5d>'::scircle,'<( 0h 50m 00s , 0d 0m 0s),1.5d>'::scircle)/pi();
72
73SELECT 180.0*dist('<( 0h 40m 00s , 90d 0m 0s), 1.5d>'::scircle,'<( 0h 50m 00s , 0d 0m 0s),1.5d>'::scircle)/pi();
74
75SELECT 180.0*dist('<( 0h 40m 00s , 90d 0m 0s), 1.0d>'::scircle,'<( 0h 50m 00s , -90d 0m 0s),1.0d>'::scircle)/pi();
76
77
78
79-- spoint center(scircle)
80
81SELECT center('< (1h 2m 30s , +1d 2m 30s), 1.0d >'::scircle);
82
83SELECT center('< (1h 2m 30s , +90d 0m 0s), 1.0d >'::scircle);
84
85
86
87-- scircle scircle(spoint)
88
89SELECT scircle('(0d,0d)'::spoint);
90
91SELECT scircle('(0d,90d)'::spoint);
92
93SELECT scircle('(0d,-90d)'::spoint);
94
95
96
97-- Operators
98
99-- = operator
100
101-- should be "true"
102
103SELECT '< (1h 0m 0s,+1d), 1.5d >'::scircle='< (1h 0m 0s,+1d), 1.5d >'::scircle ;
104
105SELECT '< (1h 0m 0s,+1d), 1.5d >'::scircle='< (25h 0m 0s,+1d), 1d 30m >'::scircle ;
106
107SELECT '< (1h 0m 0s,+95d), 1.5d >'::scircle='< (13h 0m 0s,+85d), 1.5d >'::scircle ;
108
109SELECT '< (1h 0m 0s,-95d), 1.5d >'::scircle='< (13h 0m 0s,-85d), 1.5d >'::scircle ;
110
111SELECT '< (1h 0m 0s,+90d), 1.5d >'::scircle='< (2h 0m 0s,+90d), 1.5d >'::scircle ;
112
113SELECT '< (1h 0m 0s,-90d), 1.5d >'::scircle='< (2h 0m 0s,-90d), 1.5d >'::scircle ;
114
115-- should be "false"
116
117SELECT '< (1h 0m 0s,+1d), 1.5d >'::scircle='< (1h 0m 0s,-1d), 1.5d >'::scircle ;
118
119SELECT '< (1h 0m 0s,+1d), 1.5d >'::scircle='< (1h 0m 0s,+1d), 2.5d >'::scircle ;
120
121
122
123-- <> operator
124
125-- should be "false"
126
127SELECT '< (1h 0m 0s,+1d), 1.5d >'::scircle <> '< (1h 0m 0s,+1d), 1.5d >'::scircle ;
128
129SELECT '< (1h 0m 0s,+1d), 1.5d >'::scircle <> '< (25h 0m 0s,+1d), 1d 30m >'::scircle ;
130
131SELECT '< (1h 0m 0s,+95d), 1.5d >'::scircle <> '< (13h 0m 0s,+85d), 1.5d >'::scircle ;
132
133SELECT '< (1h 0m 0s,-95d), 1.5d >'::scircle <> '< (13h 0m 0s,-85d), 1.5d >'::scircle ;
134
135SELECT '< (1h 0m 0s,+90d), 1.5d >'::scircle <> '< (2h 0m 0s,+90d), 1.5d >'::scircle ;
136
137SELECT '< (1h 0m 0s,-90d), 1.5d >'::scircle <> '< (2h 0m 0s,-90d), 1.5d >'::scircle ;
138
139-- should be "true"
140
141SELECT '< (1h 0m 0s,+1d), 1.5d >'::scircle <> '< (1h 0m 0s,-1d), 1.5d >'::scircle ;
142
143SELECT '< (1h 0m 0s,+1d), 1.5d >'::scircle <> '< (1h 0m 0s,+1d), 2.5d >'::scircle ;
144
145
146
147-- && operator
148
149-- should be "true"
150
151SELECT  '< (1h 0m 0s,+1d), 1.5d >'::scircle && '< (1h 0m 0s,+1d), 1.5d >'::scircle;
152
153SELECT  '< (1h 0m 0s,+1d), 1.5d >'::scircle && '< (1h 0m 0s,+1d), 0.5d >'::scircle;
154
155SELECT  '< (1h 0m 0s,+1d), 1.5d >'::scircle && '< (1h 0m 0s,-1d), 1.5d >'::scircle;
156
157SELECT  '< (1h 0m 0s,0d), 15d >'::scircle && '< (0h 0m 0s,0d), 15d >'::scircle;
158
159SELECT  '< (2h 0m 0s,0d), 15d >'::scircle && '< (0h 0m 0.1s,0d), 15d >'::scircle;
160
161SELECT  '< (1h 0m 0s,0d), 15d >'::scircle && '< (23h 0m 0.1s,0d), 15d >'::scircle;
162
163-- should be "false"
164
165SELECT  '< (1h 0m 0s,+1d), 0.5d >'::scircle && '< (1h 0m 0s,-1d), 0.5d >'::scircle;
166
167SELECT  '< (1d 0m 0s,+1d), 1.0d >'::scircle && '< (0d 0m 0s,0d), 0.1d >'::scircle;
168
169
170
171-- @@ operator
172
173SELECT @@ '< (1h 2m 3s , +1d 2m 3s), 1.0d >'::scircle;
174
175SELECT @@ '< (1h 2m 3s , +90d 0m 0s), 1.0d >'::scircle;
176
177
178
179-- <-> operator
180
181SELECT 180.0*('<( 0h 2m 30s , 10d 0m 0s), 0.1d>'::scircle<->'<( 0h 2m 30s , -10d 0m 0s),0.1d>'::scircle)/pi();
182
183SELECT 180.0*('<( 0h 0m 00s , 0d 0m 0s), 1.0d>'::scircle<->'<( 1h 0m 00s , 0d 0m 0s),1.0d>'::scircle)/pi();
184
185SELECT 180.0*('<( 23h 30m 00s , 0d 0m 0s), 1.0d>'::scircle<->'<( 1h 0m 00s , 0d 0m 0s),1.5d>'::scircle)/pi();
186
187SELECT 180.0*('<( 0h 40m 00s , 0d 0m 0s), 1.0d>'::scircle<->'<( 0h 50m 00s , 0d 0m 0s),1.0d>'::scircle)/pi();
188
189SELECT 180.0*('<( 0h 40m 00s , 0d 0m 0s), 1.5d>'::scircle<->'<( 0h 50m 00s , 0d 0m 0s),1.5d>'::scircle)/pi();
190
191SELECT 180.0*('<( 0h 40m 00s , 90d 0m 0s), 1.5d>'::scircle<->'<( 0h 50m 00s , 0d 0m 0s),1.5d>'::scircle)/pi();
192
193SELECT 180.0*('<( 0h 40m 00s , 90d 0m 0s), 1.0d>'::scircle<->'<( 0h 50m 00s , -90d 0m 0s),1.0d>'::scircle)/pi();
194
195
196
197-- scircle @ scircle operator
198
199-- should be "true"
200
201SELECT  '< (1h 0m 0s,+1d),  0.5d >'::scircle @ '< (1h 0m 0s,+1d),  1.5d >'::scircle;
202
203SELECT  '< (2d 0m 0s,+1d),  0.5d >'::scircle @ '< (1d 0m 0s,0d),   3.5d >'::scircle;
204
205SELECT  '< (1h 0m 0s,+89d), 0.5d >'::scircle @ '< (1h 0m 0s,+90d), 1.5d >'::scircle;
206
207SELECT  '< (1h 0m 0s,-89d), 0.5d >'::scircle @ '< (1h 0m 0s,-90d), 1.5d >'::scircle;
208
209-- should be "false"
210
211SELECT  '< (1h 0m 0s,+1d),  0.5d >'::scircle @ '< (2h 0m 0s,+1d),  1.5d >'::scircle;
212
213SELECT  '< (2d 0m 0s,+1d),  1.5d >'::scircle @ '< (0d 0m 0s, 0d),  3.5d >'::scircle;
214
215SELECT  '< (1h 0m 0s,+89d), 0.5d >'::scircle @ '< (1h 0m 0s,+90d), 1.0d >'::scircle;
216
217SELECT  '< (1h 0m 0s,-89d), 0.5d >'::scircle @ '< (1h 0m 0s,-90d), 1.0d >'::scircle;
218
219
220
221-- scircle ~ scircle operator
222
223-- should be "true"
224
225SELECT '< (1h 0m 0s,+1d),  1.5d >'::scircle  ~ '< (1h 0m 0s,+1d),  0.5d >'::scircle;
226
227SELECT '< (1d 0m 0s,0d),   3.5d >'::scircle  ~ '< (2d 0m 0s,+1d),  0.5d >'::scircle;
228
229SELECT '< (1h 0m 0s,+90d), 1.5d >'::scircle  ~ '< (1h 0m 0s,+89d), 0.5d >'::scircle;
230
231SELECT '< (1h 0m 0s,-90d), 1.5d >'::scircle  ~ '< (1h 0m 0s,-89d), 0.5d >'::scircle;
232
233-- should be "false"
234
235SELECT '< (2h 0m 0s,+1d),  1.5d >'::scircle  ~ '< (1h 0m 0s,+1d),  0.5d >'::scircle;
236
237SELECT '< (0d 0m 0s, 0d),  3.5d >'::scircle  ~ '< (2d 0m 0s,+1d),  1.5d >'::scircle;
238
239SELECT '< (1h 0m 0s,+90d), 1.0d >'::scircle  ~ '< (1h 0m 0s,+89d), 0.5d >'::scircle;
240
241SELECT '< (1h 0m 0s,-90d), 1.0d >'::scircle  ~ '< (1h 0m 0s,-89d), 0.5d >'::scircle;
242
243
244
245-- spoint @ scircle operator
246
247-- should be "true"
248
249SELECT  '(1h 0m 0s,+1d) '::spoint @ '< (1h 0m 0s,+1d),  1.5d >'::scircle;
250
251SELECT  '(2d 0m 0s,+1d) '::spoint @ '< (1d 0m 0s, 0d),  3.5d >'::scircle;
252
253SELECT  '(1h 0m 0s,+89d)'::spoint @ '< (1h 0m 0s,+90d), 1.5d >'::scircle;
254
255SELECT  '(1h 0m 0s,-89d)'::spoint @ '< (1h 0m 0s,-90d), 1.5d >'::scircle;
256
257SELECT  '(1h 0m 0s,+89d)'::spoint @ '< (1h 0m 0s,+90d), 1.0d >'::scircle;
258
259SELECT  '(1h 0m 0s,-89d)'::spoint @ '< (1h 0m 0s,-90d), 1.0d >'::scircle;
260
261-- should be "false"
262
263SELECT  '(1h 0m  0s,+1d    )'::spoint @ '< (2h 0m 0s,-1d),  1.5d >'::scircle;
264
265SELECT  '(3d 30m 0s,+1d    )'::spoint @ '< (0d 0m 0s, 0d),  3.5d >'::scircle;
266
267SELECT  '(1h 0m  0s,+88.99d)'::spoint @ '< (1h 0m 0s,+90d), 1.0d >'::scircle;
268
269SELECT  '(1h 0m  0s,-88.99d)'::spoint @ '< (1h 0m 0s,-90d), 1.0d >'::scircle;
270
271
272
273-- spoint ~ scircle operator
274
275-- should be "true"
276
277SELECT '< (1h 0m 0s,+1d),  1.5d >'::scircle ~ '(1h 0m 0s,+1d) '::spoint;
278
279SELECT '< (1d 0m 0s, 0d),  3.5d >'::scircle ~ '(2d 0m 0s,+1d) '::spoint;
280
281SELECT '< (1h 0m 0s,+90d), 1.5d >'::scircle ~ '(1h 0m 0s,+89d)'::spoint;
282
283SELECT '< (1h 0m 0s,-90d), 1.5d >'::scircle ~ '(1h 0m 0s,-89d)'::spoint;
284
285SELECT '< (1h 0m 0s,+90d), 1.0d >'::scircle ~ '(1h 0m 0s,+89d)'::spoint;
286
287SELECT '< (1h 0m 0s,-90d), 1.0d >'::scircle ~ '(1h 0m 0s,-89d)'::spoint;
288
289-- should be "false"
290
291SELECT '< (2h 0m 0s,-1d),  1.5d >'::scircle ~ '(1h 0m  0s,+1d    )'::spoint;
292
293SELECT '< (0d 0m 0s, 0d),  3.5d >'::scircle ~ '(3d 30m 0s,+1d    )'::spoint;
294
295SELECT '< (1h 0m 0s,+90d), 1.0d >'::scircle ~ '(1h 0m  0s,+88.99d)'::spoint;
296
297SELECT '< (1h 0m 0s,-90d), 1.0d >'::scircle ~ '(1h 0m  0s,-88.99d)'::spoint;
298