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