1# Command covered: geomap::place 2# 3# This script file tests the commands in the tclgeomap package. See the 4# tclgeomap man page for a description of the package. See the tcltest 5# man page for a description of Tcl's testing proc's. 6# 7# Copyright (c) 2004 Gordon D. Carrie. All rights reserved. 8# 9# Licensed under the Open Software License version 2.1 10# 11# Please address questions and feedback to user0@tkgeomap.org 12# 13# @(#) $Id: tcl_geomap_place.test,v 1.4 2004/09/22 21:57:51 tkgeomap Exp $ 14 15if {[lsearch [namespace children] ::tcltest] == -1} { 16 package require tcltest 17 namespace import ::tcltest::* 18} 19 20package require tclgeomap 2 21 22test tcl_geomap_place-1.1 {::geomap::place new, wrong number of arguments} { 23 catch {::geomap::place new p1} msg 24 set msg 25} {wrong # args: should be "::geomap::place new placeName {lat lon}"} 26 27test tcl_geomap_place-1.2 {::geomap::place new, normal call} { 28 ::geomap::place new p1 {0.0 10.0} 29 list p1 [p1 set] 30} {p1 {0.0 10.0}} 31 32rename p1 {} 33 34test tcl_geomap_place-2.1 {place set, wrong number of arguments} { 35 catch {::geomap::place set} msg 36 set msg 37} {wrong # args: should be "::geomap::place set placeName ?{lat lon}?"} 38 39test tcl_geomap_place-2.2 {::geomap::place set, creating a place} { 40 ::geomap::place set p1 {10.0 10.0} 41 list p1 [p1 set] 42} {p1 {10.0 10.0}} 43 44rename p1 {} 45 46test tcl_geomap_place-2.3 {::geomap::place set, moving places} { 47 ::geomap::place new p1 {10.0 10.0} 48 ::geomap::place set p2 {20.0 20.0} 49 set placeList [list p1 [p1 set] p2 [p2 set]] 50 ::geomap::place set p1 {11.0 11.0} 51 ::geomap::place set p2 {21.0 21.0} 52 concat $placeList [list p1 [p1 set] p2 [p2 set]] 53} {p1 {10.0 10.0} p2 {20.0 20.0} p1 {11.0 11.0} p2 {21.0 21.0}} 54 55rename p1 {} 56rename p2 {} 57 58test tcl_geomap_place-2.4 {::geomap::place set, placeName set, moving places} { 59 ::geomap::place set p1 {11.0 11.0} 60 ::geomap::place set p2 {21.0 21.0} 61 set placeList [list p1 [p1 set] p2 [p2 set]] 62 p1 set {12.0 12.0} 63 p2 set {22.0 22.0} 64 concat $placeList [list p1 [p1 set] p2 [p2 set]] 65} {p1 {11.0 11.0} p2 {21.0 21.0} p1 {12.0 12.0} p2 {22.0 22.0}} 66 67rename p1 {} 68rename p2 {} 69 70test tcl_geomap_place-4.1 {::geomap::place distance, wrong number of arguments} { 71 catch {::geomap::place distance} msg 72 set msg 73} {wrong # args: should be "::geomap::place distance placeOR{lat lon} placeOR{lat lon} ?unit?"} 74 75test tcl_geomap_place-4.2 {::geomap::place distance, two places} { 76 ::geomap::place new p1 {0.0 0.0} 77 ::geomap::place new p2 {0.0 10.0} 78 ::geomap::place distance p1 p2 79} {10.0} 80 81rename p1 {} 82rename p2 {} 83 84test tcl_geomap_place-4.3 {::geomap::place distance, two coordinate pairs} { 85 ::geomap::place distance {80.0 -10.0} {75.0 170.0} 86} {25.0} 87 88test tcl_geomap_place-4.4 {::geomap::place distance, place and coordinate pair} { 89 ::geomap::place new p1 {0.0 170.0} 90 ::geomap::place distance p1 {75.0 170.0} 91} {75.0} 92 93rename p1 {} 94 95test tcl_geomap_place-4.5 {::geomap::place distance, error with a place in namespace} { 96 namespace eval n1 { 97 ::geomap::place new [namespace current]::p1 {0.0 170.0} 98 } 99 catch {::geomap::place distance {75.0 170.0} p1} msg 100 set msg 101} {p1 not a location} 102 103namespace delete n1 104 105test tcl_geomap_place-4.6 {::geomap::place distance, with a place in namespace} { 106 namespace eval n1 { 107 ::geomap::place new [namespace current]::p1 {0.0 170.0} 108 } 109 namespace eval n1 { 110 ::geomap::place distance {75.0 170.0} p1 111 } 112} {75.0} 113 114namespace delete n1 115 116test tcl_geomap_place-4.7 {::geomap::place distance, two places, answer with unit} { 117 ::geomap::place new p1 {0.0 0.0} 118 ::geomap::place new p2 {0.0 10.0} 119 ::geomap::place distance p1 p2 km 120} {1111.2} 121 122rename p1 {} 123rename p2 {} 124 125test tcl_geomap_place-4.8 {::geomap::place distance, two places, answer with unit} { 126 ::geomap::place new p1 {0.0 0.0} 127 ::geomap::place new p2 {0.0 10.0} 128 ::geomap::place distance p1 p2 nmile 129} {600.0} 130 131rename p1 {} 132rename p2 {} 133 134test tcl_geomap_place-5.1 {::geomap::place azrng, wrong number of arguments} { 135 catch {::geomap::place azrng} msg 136 set msg 137} {wrong # args: should be "::geomap::place azrng placeOR{lat lon} placeOR{lat lon} ?unit?"} 138 139test tcl_geomap_place-5.2 {::geomap::place azrng} { 140 ::geomap::place new p1 {-1.0 -1.0} 141 ::geomap::place new p2 {1.0 1.0} 142 eval format {%.1f\ %.1f} [::geomap::place azrng p1 p2] 143} {45.0 2.8} 144 145rename p1 {} 146rename p2 {} 147 148test tcl_geomap_place-6.1 {::geomap::place nearest, wrong number of arguments} { 149 catch {::geomap::place nearest} msg 150 set msg 151} {wrong # args: should be "::geomap::place nearest placeOR{lat lon} {place place ...}"} 152 153test tcl_geomap_place-6.2 {::geomap::place nearest} { 154 ::geomap::place new p1 {0 0} 155 ::geomap::place new p2 {1 1} 156 ::geomap::place new p3 {2 2} 157 ::geomap::place nearest p1 {p1 p2 p3} 158} {p2} 159 160rename p1 {} 161rename p2 {} 162rename p3 {} 163 164test tcl_geomap_place-6.3 {placeName nearest, bad place list} { 165 ::geomap::place new p1 {0 0} 166 catch {p1 nearest foo} msg 167 set msg 168} {No place named foo in current namespace.} 169 170rename p1 {} 171 172test tcl_geomap_place-6.4 {::geomap::place nearest, placeName command} { 173 ::geomap::place new p1 {0 0} 174 ::geomap::place new p2 {1 1} 175 ::geomap::place new p3 {2 2} 176 p1 nearest {p1 p2 p3} 177} {p2} 178 179rename p1 {} 180rename p2 {} 181rename p3 {} 182 183test tcl_geomap_place-7.1 {::geomap::place step, wrong number of arguments} { 184 catch {::geomap::place step} msg 185 set msg 186} {wrong # args: should be "::geomap::place step placeName bearing range ?unit?"} 187 188test tcl_geomap_place-7.2 {::geomap::place step} { 189 ::geomap::place new p1 {0 0} 190 ::geomap::place step p1 0.0 10.0 191} {10.0 0.0} 192 193rename p1 {} 194 195test tcl_geomap_place-7.3 {::geomap::place step with unit} { 196 ::geomap::place new p1 {0 0} 197 eval format {%.2f\ %.2f} [::geomap::place step p1 45.0 100.0 km] 198} {0.64 0.64} 199 200rename p1 {} 201 202test tcl_geomap_place-7.4 {::geomap::place step with unit error} { 203 ::geomap::place new p1 {0 0} 204 catch "::geomap::place step p1 45.0 100.0 leagues" msg 205 set msg 206} {bad unit "leagues": must be nmiles, smiles, km, or gsdeg} 207 208rename p1 {} 209 210test tcl_geomap_place-7.5 {::geomap::place step with bearing word} { 211 ::geomap::place new p1 {0 0} 212 eval format {%.2f\ %.2f} [::geomap::place step p1 ne 100.0 km] 213} {0.64 0.64} 214 215rename p1 {} 216 217test tcl_geomap_place-7.6 {::geomap::place step with bad bearing word} { 218 ::geomap::place new p1 {0 0} 219 catch "::geomap::place step p1 thataway 100.0 km" msg 220 set msg 221} {bad bearing "thataway": must be north, nneast, neast, eneast, east, eseast, seast, sseast, south, sswest, swest, wswest, west, wnwest, nwest, or nnwest, or a double value} 222 223rename p1 {} 224 225test tcl_geomap_place-7.7 {placeName step, wrong number of arguments} { 226 ::geomap::place new p1 {0 0} 227 catch {p1 step} msg 228 set msg 229} {wrong # args: should be "p1 step bearing range ?unit?"} 230 231rename p1 {} 232 233test tcl_geomap_place-8.1 {::geomap::place inrange} { 234 ::geomap::place new p1 {0 0} 235 ::geomap::place new p2 {3 3} 236 ::geomap::place new p3 {4 4} 237 ::geomap::place new p4 {2 2} 238 lsort [::geomap::place inrange p1 4.5 {p1 p2 p3 p4}] 239} {p2 p4} 240 241rename p1 {} 242rename p2 {} 243rename p3 {} 244rename p4 {} 245 246test tcl_geomap_place-8.2 {::geomap::place inrange, wrong number of arguments} { 247 catch {::geomap::place inrange} msg 248 set msg 249} {wrong # args: should be "::geomap::place inrange placeNameOR{lat lon} {range ?unit?} {place place ...}"} 250 251test tcl_geomap_place-8.3 {::geomap::place inrange, with placeName command} { 252 ::geomap::place new p1 {0 0} 253 ::geomap::place new p2 {1 1} 254 ::geomap::place new p3 {4 4} 255 ::geomap::place new p4 {1 1} 256 lsort [p1 inrange 4.0 {p1 p2 p3 p4}] 257} {p2 p4} 258 259rename p1 {} 260rename p2 {} 261rename p3 {} 262rename p4 {} 263 264test tcl_geomap_place-8.5 {::geomap::place inrange, with unit} { 265 ::geomap::place new p1 {0 0} 266 ::geomap::place new p2 {1 1} 267 ::geomap::place new p3 {4 4} 268 ::geomap::place new p4 {1 1} 269 lsort [p1 inrange {400.0 km} {p1 p2 p3 p4}] 270} {p2 p4} 271 272cleanupTests 273