3 #=======================================================================
8 # ©opyleft 2006– Øyvind A. Holm <sunny@sunbase.org>
9 # License: GNU General Public License version 2 or later, see end of
10 # file for legal stuff.
11 #=======================================================================
14 push(@INC, "$ENV{'HOME'}/bin/src/gpstools");
20 use Test
::More
qw{no_plan
};
42 $progname =~ s/^.*\/(.*?)$/$1/;
45 my $id_date = $rcs_id;
46 $id_date =~ s/^.*?\d+ (\d\d\d\d-.*?\d\d:\d\d:\d\d\S+).*/$1/;
48 push(@main::version_array
, $rcs_id);
50 Getopt
::Long
::Configure
("bundling");
52 "all|a" => \
$Opt{'all'},
53 "debug" => \
$Opt{'debug'},
54 "help|h" => \
$Opt{'help'},
55 "todo|t" => \
$Opt{'todo'},
56 "verbose|v+" => \
$Opt{'verbose'},
57 "version" => \
$Opt{'version'},
58 ) || die("$progname: Option error. Use -h for help.\n");
61 'gpsbabel' => '/usr/local/bin/gpsbabel',
64 $Opt{'debug'} && ($Debug = 1);
65 $Opt{'help'} && usage
(0);
66 $Opt{'version'} && print_version
();
68 chomp(my $gpx_header = <<END);
69 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
72 creator="gpst - http://svn.sunbase.org/repos/utils/trunk/src/gpstools/"
73 xmlns="http://www.topografix.com/GPX/1/1"
74 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
75 xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
78 my $stripped_gpx_header = $gpx_header;
79 $stripped_gpx_header =~ s/^\s*(.*)$/$1/mg;
81 if ($Opt{'todo'} && !$Opt{'all'}) {
85 diag
("Testing conversion routines...");
87 # txt_to_xml() and xml_to_txt() {{{
91 "txt_to_xml(\"abc\")");
94 "txt_to_xml(\"<&>\")");
95 is
(txt_to_xml
("first line\nsecond <\rthird\r\n<&>"),
96 "first line\nsecond <\rthird\r\n<&>",
97 "txt_to_xml() with multiline string");
101 "xml_to_txt(\"abc\")");
102 is
(xml_to_txt
("<&>"),
104 "xml_to_txt(\"<&>\")");
105 is
(xml_to_txt
("first line\nsecond <\rthird\r\n<&>"),
106 "first line\nsecond <\rthird\r\n<&>",
107 "xml_to_txt() with multiline string");
109 # txt_to_xml() and xml_to_txt() }}}
110 # postgresql_copy_safe() {{{
112 is
(postgresql_copy_safe
(""),
114 "postgresql_copy_safe() with empty string");
116 is
(postgresql_copy_safe
("abcæøåÆØÅ"),
118 "postgresql_copy_safe(\"abcæøåÆØÅ\")");
120 is
(postgresql_copy_safe
("abc\t'\r\n"),
122 "postgresql_copy_safe(\"abc\\t'\\r\\n\")");
124 is
(postgresql_copy_safe
("¤%/&gurgle\t325\\wer\ndfv'\r!\"#\n%\twe\r\x00sdf\xFFsadc\n\t\x00sdc\n"),
125 "¤%/&gurgle\\t325\\\\wer\\ndfv'\\r!\"#\\n%\\twe\\r\x00sdf\xFFsadc\\n\\t\x00sdc\\n",
126 "postgresql_copy_safe() with multiline, nulls and stuff");
128 # postgresql_copy_safe() }}}
130 diag
("Testing date routines...");
132 # sec_to_string() {{{
134 is
(sec_to_string
(1148220825),
135 "2006-05-21 14:13:45",
136 "sec_to_string() without separator");
137 is
(sec_to_string
(1148220825, "T"),
138 "2006-05-21T14:13:45",
139 "sec_to_string() with separator");
140 is
(sec_to_string
(-5000),
142 "sec_to_string(-5000) — negative numbers unsupported atm");
143 is
(sec_to_string
(""),
145 "sec_to_string(\"\")");
146 is
(sec_to_string
("pH()rtY tW0"),
148 "sec_to_string() with invalid string");
149 is
(sec_to_string
("00000000000000000000001148220825"),
150 "2006-05-21 14:13:45",
151 "sec_to_string() with a bunch of leading zeros");
152 is
(sec_to_string
("1148220825.93"),
153 "2006-05-21 14:13:45.93",
154 "sec_to_string() with decimals");
155 is
(sec_to_string
("000000000000000000000000000001148220825.7312"),
156 "2006-05-21 14:13:45.7312",
157 "sec_to_string() with decimals and prefixing zeros");
158 is
(sec_to_string
("1148220825.93000"),
159 "2006-05-21 14:13:45.93",
160 "sec_to_string() with decimals and extra trailing zeros");
161 is
(sec_to_string
(".863"),
162 "1970-01-01 00:00:00.863",
163 "sec_to_string() with missing zero before decimal point");
165 # sec_to_string() }}}
166 # sec_to_readable() {{{
168 is
(sec_to_readable
(0),
170 "sec_to_readable(0)");
171 is
(sec_to_readable
("pH()rtY tW0"),
173 "sec_to_readable() with invalid string");
174 is
(sec_to_readable
(86400),
176 "sec_to_readable(86400)");
177 is
(sec_to_readable
(86400*1000),
179 "sec_to_readable(86400*1000)");
180 is
(sec_to_readable
(86400+7200+180+4),
182 "sec_to_readable(86400+7200+180+4)");
183 is
(sec_to_readable
("3.14"),
185 "sec_to_readable(\"3.14\")");
186 is
(sec_to_readable
("-124"),
188 "sec_to_readable() rejects negative numbers");
189 is
(sec_to_readable
("-2.34"),
191 "sec_to_readable() rejects negative decimal");
192 is
(sec_to_readable
(".87"),
194 "sec_to_readable(), missing zero before decimal point");
195 is
(sec_to_readable
(""),
197 "sec_to_readable() with empty string");
199 # sec_to_readable() }}}
201 diag
("Testing geo routines...");
205 is
(ddd_to_dms
("12.34567"),
207 "ddd_to_dms(\"12.34567\")");
211 "ddd_to_dms(\"0\")");
213 is
(ddd_to_dms
("0.00001"),
215 "ddd_to_dms(\"0.00001\") — Precision of DDD with five decimals");
221 is
(ddd_to_dms
("pH()rtY tW0"),
223 "ddd_to_dms(\"pH()rtY tW0\")");
225 is
(ddd_to_dms
("-12.34567"),
227 "ddd_to_dms(\"-12.34567\")");
229 is
(ddd_to_dms
("0.34567"),
231 "ddd_to_dms(\"0.34567\")");
233 is
(ddd_to_dms
(".34567"),
235 "ddd_to_dms(\".34567\")");
237 is
(ddd_to_dms
("-.34567"),
239 "ddd_to_dms(\"-.34567\")");
241 is
(ddd_to_dms
("-0.34567"),
243 "ddd_to_dms(\"-0.34567\")");
245 is
(ddd_to_dms
("180"),
247 "ddd_to_dms(\"180\")");
249 is
(ddd_to_dms
("-180"),
251 "ddd_to_dms(\"-180\")");
255 "ddd_to_dms(\"-1\")");
257 is
(ddd_to_dms
("2-3"),
259 "ddd_to_dms(\"2-3\")");
265 "dms_to_ddd() with no parameters");
266 is
(dms_to_ddd
(0, 0, 0),
268 "dms_to_ddd(0, 0, 0)");
269 is
(dms_to_ddd
(12, 30, 45),
271 "dms_to_ddd(12, 30, 45)");
272 is
(dms_to_ddd
("asd", 0, 0),
274 "dms_to_ddd() with invalid degrees");
275 is
(dms_to_ddd
(0, "asd", 0),
277 "dms_to_ddd() with invalid minutes");
278 is
(dms_to_ddd
(0, 0, "asd"),
280 "dms_to_ddd() with invalid seconds");
281 is
(dms_to_ddd
("", 0, 0),
283 "dms_to_ddd() with empty degree string");
284 is
(dms_to_ddd
(0, 0, ""),
286 "dms_to_ddd() with empty second string");
287 is
(dms_to_ddd
(-12, 30, 45),
289 "dms_to_ddd() doesn’t accept negative degrees atm");
290 is
(dms_to_ddd
(12, -30, 45),
292 "dms_to_ddd() doesn’t accept negative minutes atm");
293 is
(dms_to_ddd
(12, 30, -45),
295 "dms_to_ddd() doesn’t accept negative seconds atm");
296 # Weird behaviour, this scientific notation thing.
297 is
(num_expand
(sprintf("%.08f", dms_to_ddd
(0, 0, 0.1))),
299 "dms_to_ddd(0, 0, 0.1) — Precision of DMS with one decimal");
300 is
(dms_to_ddd
(2, 30),
302 "dms_to_ddd(2, 30)");
309 is
(dms_to_ddd
(120.5, 0.3),
311 "dms_to_ddd(120.5, 0.3)");
315 diag
("Testing trackpoint()..."); # {{{
321 "trackpoint() receives empty hash");
340 # trackpoint() (gpsml) {{{
344 "<tp> <time>2003-06-13T14:36:10Z</time> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
345 "trackpoint() (gpsml)"
348 # trackpoint() (gpsml) }}}
349 # trackpoint() (gpx) {{{
351 $Dat{'format'} = "gpx";
354 qq{ <trkpt lat
="59.5214" lon
="7.392133"> <ele
>762</ele> <time>2003-06-13T14:36:10Z</time> </trkpt
>\n},
358 # trackpoint() (gpx) }}}
360 # trackpoint(): Various loop tests {{{
362 for my $Elem (qw{format lat lon type
}) {
365 $Dat{"$Elem"} = '2d';
368 "trackpoint(): {'$Elem'} with invalid value (\"$Dat{$Elem}\") returns undef"
373 for my $Elem (qw{year month day hour min sec
}) {
380 "<tp> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
381 "trackpoint(): {'$Elem'} with empty value skips time"
385 $Dat{"$Elem"} = '2d';
387 "<tp> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
388 "trackpoint(): {'$Elem'} with invalid value (\"$Dat{$Elem}\") skips time"
392 $Dat{$Elem} = "00000$Dat{$Elem}";
394 "<tp> <time>2003-06-13T14:36:10Z</time> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
395 "trackpoint(): Strip prefixing zeros from {'$Elem'}"
399 $Dat{"$Elem"} = 0-$Dat{$Elem};
401 "<tp> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
402 "trackpoint(): {'$Elem'} is negative, skip time"
405 if ($Elem ne "sec") {
407 $Dat{"$Elem"} = "$Dat{$Elem}.00";
409 "<tp> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
410 "trackpoint(): Decimals in {'$Elem'}, skip time"
418 $Dat{'sec'} = "$Dat{'sec'}.00";
420 "<tp> <time>2003-06-13T14:36:10Z</time> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>\n",
421 "trackpoint(): Remove trailing zeros in {'sec'} decimals"
424 for my $Elem (qw{format type error
}) {
429 "trackpoint(): Missing {'$Elem'}, return undef"
433 # Various loop tests }}}
437 diag
("Testing output from ../gpst");
439 diag
("Read empty input (/dev/null)..."); # {{{
440 testcmd
("../gpst </dev/null", # {{{
442 <?xml version="1.0" encoding="UTF-8"?>
449 "Read from /dev/null",
453 testcmd
("../gpst -o gpx </dev/null", # {{{
463 "Output gpx from /dev/null",
468 diag
("Read empty files..."); # {{{
469 testcmd
("echo '<tp> </tp>' | ../gpst", # {{{
471 <?xml version="1.0" encoding="UTF-8"?>
478 "Don’t print empty trackpoints",
482 # Read empty files }}}
483 diag
("Testing --chronology option..."); # {{{
484 testcmd
("../gpst --chronology chronology-error.gpsml", # {{{
486 <?xml version="1.0" encoding="UTF-8"?>
489 <title>Chronology errors</title>
490 <tp> <time>2006-05-02T09:46:37Z</time> <lat>60.45369</lat> <lon>5.31559</lon> <ele>95</ele> </tp>
491 <tp> <time>2006-05-02T09:46:42Z</time> <lat>60.45353</lat> <lon>5.31548</lon> <ele>94</ele> </tp>
492 <tp> <time>2006-05-02T09:46:46Z</time> <lat>60.45353</lat> <lon>5.31561</lon> <ele>94</ele> </tp>
494 <tp> <time>2006-05-02T09:40:07Z</time> <lat>60.45369</lat> <lon>5.31597</lon> <desc>Out of chronology</desc> </tp>
496 <pause>0:00:37:54</pause>
497 <tp> <time>2006-05-02T10:18:01Z</time> <lat>60.45418</lat> <lon>5.31517</lon> <ele>92</ele> </tp>
498 <tp> <time>2006-05-02T10:18:06Z</time> <lat>60.45407</lat> <lon>5.31542</lon> <ele>91</ele> </tp>
499 <tp> <time>2006-05-02T10:18:09Z</time> <lat>60.45401</lat> <lon>5.31543</lon> <ele>98</ele> </tp>
500 <tp> <time>2006-05-02T10:18:09Z</time> <lat>60.45401</lat> <lon>5.31543</lon> <ele>98</ele> </tp>
501 <tp> <time>2006-05-02T10:18:10Z</time> <lat>60.45395</lat> <lon>5.31544</lon> <ele>103</ele> </tp>
502 <tp> <time>2006-05-02T10:18:11Z</time> <lat>60.45391</lat> <lon>5.31545</lon> <ele>107</ele> </tp>
506 "gpst: chronology-error.gpsml: \"2006-05-02T09:46:46Z\": Next date is 0:00:06:39 in the past (2006-05-02T09:40:07Z)\n" .
507 "gpst: chronology-error.gpsml: \"2006-05-02T10:18:09Z\": Duplicated time\n",
508 "Check for chronology errors and duplicated times",
512 # --chronology option }}}
513 diag
("Testing --skip-dups option..."); # {{{
514 testcmd
("../gpst -d no_signal.mayko", # {{{
516 <?xml version="1.0" encoding="UTF-8"?>
519 <tp> <time>2002-12-22T21:42:24Z</time> <lat>70.6800486</lat> <lon>23.6746151</lon> </tp>
520 <tp> <time>2002-12-22T21:42:32Z</time> <lat>70.6799322</lat> <lon>23.6740038</lon> </tp>
521 <tp> <time>2002-12-22T21:42:54Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </tp>
522 <etp err="dup"> <time>2002-12-22T21:43:51Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
523 <etp err="dup"> <time>2002-12-22T21:43:52Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
524 <etp err="dup"> <time>2002-12-22T21:43:54Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
525 <tp> <time>2002-12-22T21:44:45Z</time> <lat>70.6800774</lat> <lon>23.6757566</lon> </tp>
526 <tp> <time>2002-12-22T21:44:52Z</time> <lat>70.6801502</lat> <lon>23.6753442</lon> </tp>
527 <tp> <time>2002-12-22T21:45:04Z</time> <lat>70.6801905</lat> <lon>23.6757542</lon> </tp>
532 "Remove duplicated positions from gpsml",
536 testcmd
("../gpst -d -o csv no_signal.mayko", # {{{
538 2002-12-22T21:42:24Z\t23.6746151\t70.6800486\t\t
539 2002-12-22T21:42:32Z\t23.6740038\t70.6799322\t\t
540 2002-12-22T21:42:54Z\t23.6723991\t70.6796266\t\t
541 2002-12-22T21:44:45Z\t23.6757566\t70.6800774\t\t
542 2002-12-22T21:44:52Z\t23.6753442\t70.6801502\t\t
543 2002-12-22T21:45:04Z\t23.6757542\t70.6801905\t\t
546 "Remove duplicated positions from csv output format",
550 testcmd
("../gpst -d -o clean no_signal.mayko", # {{{
552 23.6746151\t70.6800486\t
553 23.6740038\t70.6799322\t
554 23.6723991\t70.6796266\t
555 23.6757566\t70.6800774\t
556 23.6753442\t70.6801502\t
557 23.6757542\t70.6801905\t
560 "Remove duplicated positions from clean output format",
564 testcmd
("../gpst -d -o pgtab no_signal.mayko", # {{{
566 2002-12-22T21:42:24Z\t(70.6800486,23.6746151)\t\\N\t\\N\t\\N\t\\N\t\\N
567 2002-12-22T21:42:32Z\t(70.6799322,23.6740038)\t\\N\t\\N\t\\N\t\\N\t\\N
568 2002-12-22T21:42:54Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N\t\\N
569 2002-12-22T21:44:45Z\t(70.6800774,23.6757566)\t\\N\t\\N\t\\N\t\\N\t\\N
570 2002-12-22T21:44:52Z\t(70.6801502,23.6753442)\t\\N\t\\N\t\\N\t\\N\t\\N
571 2002-12-22T21:45:04Z\t(70.6801905,23.6757542)\t\\N\t\\N\t\\N\t\\N\t\\N
574 "Remove duplicated positions from pgtab output format",
578 # --skip-dups option }}}
579 diag
("Testing --epoch option..."); # {{{
580 testcmd
("../gpst -e pause.gpx", # {{{
582 <?xml version="1.0" encoding="UTF-8"?>
585 <title>ACTIVE LOG164705</title>
586 <tp> <time>2006-05-21T16:49:11Z</time> <lat>60.425494</lat> <lon>5.299534</lon> <ele>25.26</ele> </tp>
587 <tp> <time>2006-05-21T16:49:46Z</time> <lat>60.425464</lat> <lon>5.29961</lon> <ele>24.931</ele> </tp>
588 <tp> <time>2006-05-21T16:52:04Z</time> <lat>60.425314</lat> <lon>5.299694</lon> <ele>27.975</ele> </tp>
589 <tp> <time>2006-05-21T16:56:36Z</time> <lat>60.425384</lat> <lon>5.299741</lon> <ele>31.017</ele> </tp>
590 <tp> <time>2006-05-21T16:56:47Z</time> <lat>60.425339</lat> <lon>5.299958</lon> <ele>30.98</ele> </tp>
591 <tp> <time>2006-05-21T16:56:56Z</time> <lat>60.425238</lat> <lon>5.29964</lon> <ele>30.538</ele> </tp>
592 <tp> <time>2006-05-21T16:57:03Z</time> <lat>60.425246</lat> <lon>5.299686</lon> <ele>30.515</ele> </tp>
593 <tp> <time>2006-05-21T16:59:08Z</time> <lat>60.425345</lat> <lon>5.299773</lon> <ele>31.936</ele> </tp>
594 <tp> <time>2006-05-21T17:00:54Z</time> <lat>60.425457</lat> <lon>5.299419</lon> <ele>31.794</ele> </tp>
599 "--epoch is ignored in gpsml output",
603 testcmd
("../gpst -e -o gpx pause.gpx", # {{{
608 <trkpt lat="60.425494" lon="5.299534"> <ele>25.260</ele> <time>2006-05-21T16:49:11Z</time> </trkpt>
609 <trkpt lat="60.425464" lon="5.299610"> <ele>24.931</ele> <time>2006-05-21T16:49:46Z</time> </trkpt>
610 <trkpt lat="60.425314" lon="5.299694"> <ele>27.975</ele> <time>2006-05-21T16:52:04Z</time> </trkpt>
611 <trkpt lat="60.425384" lon="5.299741"> <ele>31.017</ele> <time>2006-05-21T16:56:36Z</time> </trkpt>
612 <trkpt lat="60.425339" lon="5.299958"> <ele>30.980</ele> <time>2006-05-21T16:56:47Z</time> </trkpt>
613 <trkpt lat="60.425238" lon="5.299640"> <ele>30.538</ele> <time>2006-05-21T16:56:56Z</time> </trkpt>
614 <trkpt lat="60.425246" lon="5.299686"> <ele>30.515</ele> <time>2006-05-21T16:57:03Z</time> </trkpt>
615 <trkpt lat="60.425345" lon="5.299773"> <ele>31.936</ele> <time>2006-05-21T16:59:08Z</time> </trkpt>
616 <trkpt lat="60.425457" lon="5.299419"> <ele>31.794</ele> <time>2006-05-21T17:00:54Z</time> </trkpt>
622 "--epoch is ignored in gpx output",
627 diag
("Testing --fix option..."); # {{{
628 testcmd
("../gpst --fix --chronology chronology-error.gpsml", # {{{
630 <?xml version="1.0" encoding="UTF-8"?>
633 <title>Chronology errors</title>
634 <tp> <time>2006-05-02T09:46:37Z</time> <lat>60.45369</lat> <lon>5.31559</lon> <ele>95</ele> </tp>
635 <tp> <time>2006-05-02T09:46:42Z</time> <lat>60.45353</lat> <lon>5.31548</lon> <ele>94</ele> </tp>
636 <tp> <time>2006-05-02T09:46:46Z</time> <lat>60.45353</lat> <lon>5.31561</lon> <ele>94</ele> </tp>
638 <etp err="chrono"> <time>2006-05-02T09:40:07Z</time> <lat>60.45369</lat> <lon>5.31597</lon> <desc>Out of chronology</desc> </etp>
640 <pause>0:00:37:54</pause>
641 <tp> <time>2006-05-02T10:18:01Z</time> <lat>60.45418</lat> <lon>5.31517</lon> <ele>92</ele> </tp>
642 <tp> <time>2006-05-02T10:18:06Z</time> <lat>60.45407</lat> <lon>5.31542</lon> <ele>91</ele> </tp>
643 <tp> <time>2006-05-02T10:18:09Z</time> <lat>60.45401</lat> <lon>5.31543</lon> <ele>98</ele> </tp>
644 <etp err="duptime"> <time>2006-05-02T10:18:09Z</time> <lat>60.45401</lat> <lon>5.31543</lon> <ele>98</ele> </etp>
645 <tp> <time>2006-05-02T10:18:10Z</time> <lat>60.45395</lat> <lon>5.31544</lon> <ele>103</ele> </tp>
646 <tp> <time>2006-05-02T10:18:11Z</time> <lat>60.45391</lat> <lon>5.31545</lon> <ele>107</ele> </tp>
650 "gpst: chronology-error.gpsml: \"2006-05-02T09:46:46Z\": Next date is 0:00:06:39 in the past (2006-05-02T09:40:07Z)\n" .
651 "gpst: chronology-error.gpsml: \"2006-05-02T10:18:09Z\": Duplicated time\n",
652 "Remove bad timestamps",
657 diag
("Testing --from-date option..."); # {{{
658 # --from-date option }}}
659 diag
("Testing --help option..."); # {{{
660 like
(`../gpst -h`, # {{{
661 '/Converts between various GPS formats\./',
662 "Check -h (--help) option"
666 diag
("Testing --inside option..."); # {{{
667 testcmd
("../gpst --pos1 2.11,2.12 --pos2 3.31,3.32 --inside multitrack-pause.gpx", # {{{
669 <?xml version="1.0" encoding="UTF-8"?>
672 <title>track1</title>
674 <title>track2</title>
675 <tp> <time>2006-01-02T00:00:00Z</time> <lat>2.11</lat> <lon>2.12</lon> </tp>
676 <tp> <time>2006-01-02T00:00:04Z</time> <lat>2.21</lat> <lon>2.22</lon> </tp>
677 <tp> <time>2006-01-02T00:00:16Z</time> <lat>2.31</lat> <lon>2.32</lon> </tp>
678 <tp> <time>2006-01-02T01:00:16Z</time> <lat>2.41</lat> <lon>2.42</lon> </tp>
680 <tp> <time>2006-01-02T01:00:17Z</time> <lat>2.451</lat> <lon>2.452</lon> </tp>
682 <title>track3</title>
683 <tp> <time>2006-01-03T02:00:20Z</time> <lat>3.11</lat> <lon>3.12</lon> </tp>
684 <tp> <time>2006-01-03T02:00:21Z</time> <lat>3.21</lat> <lon>3.22</lon> </tp>
685 <tp> <time>2006-01-03T02:00:22Z</time> <lat>3.31</lat> <lon>3.32</lon> </tp>
690 "Check --inside option (gpx to gpst)",
694 # --inside option }}}
695 diag
("Testing --undefined option..."); # {{{
696 # --undefined option }}}
697 diag
("Testing --near option..."); # {{{
699 diag
("Testing --output option..."); # {{{
701 testcmd
("../gpst log.mcsv", # {{{
703 <?xml version="1.0" encoding="UTF-8"?>
707 <title>ACTIVE LOG 125</title>
708 <tp> <time>2006-03-04T11:12:30Z</time> <lat>54.96883</lat> <lon>-1.62439</lon> <ele>77</ele> </tp>
709 <tp> <time>2006-03-04T11:12:47Z</time> <lat>54.96878</lat> <lon>-1.62413</lon> <ele>77</ele> </tp>
710 <tp> <time>2006-03-04T11:12:55Z</time> <lat>54.96913</lat> <lon>-1.62616</lon> <ele>77</ele> </tp>
711 <tp> <time>2006-03-04T11:13:04Z</time> <lat>54.96934</lat> <lon>-1.62624</lon> <ele>77.5</ele> </tp>
712 <tp> <time>2006-03-04T11:13:33Z</time> <lat>54.96934</lat> <lon>-1.62596</lon> <ele>78</ele> </tp>
713 <tp> <time>2006-03-04T11:13:48Z</time> <lat>54.96931</lat> <lon>-1.62645</lon> <ele>78</ele> </tp>
714 <tp> <time>2006-03-04T11:14:05Z</time> <lat>54.96918</lat> <lon>-1.62603</lon> <ele>79</ele> </tp>
715 <tp> <time>2006-03-04T11:14:33Z</time> <lat>54.96901</lat> <lon>-1.62364</lon> <ele>76.1</ele> </tp>
716 <tp> <time>2006-03-04T11:15:02Z</time> <lat>54.96922</lat> <lon>-1.6254</lon> <ele>76.1</ele> </tp>
717 <tp> <time>2006-03-04T11:15:27Z</time> <lat>54.96914</lat> <lon>-1.62526</lon> <ele>75.1</ele> </tp>
718 <tp> <time>2006-03-04T11:15:50Z</time> <lat>54.96911</lat> <lon>-1.62494</lon> <ele>75.1</ele> </tp>
719 <tp> <time>2006-03-04T11:16:03Z</time> <lat>54.9693</lat> <lon>-1.62489</lon> <ele>75.1</ele> </tp>
720 <tp> <time>2006-03-04T11:16:19Z</time> <lat>54.96901</lat> <lon>-1.62496</lon> <ele>75.1</ele> </tp>
721 <tp> <time>2006-03-04T11:16:52Z</time> <lat>54.96871</lat> <lon>-1.62466</lon> <ele>74.6</ele> </tp>
722 <tp> <time>2006-03-04T11:17:25Z</time> <lat>54.96908</lat> <lon>-1.62488</lon> <ele>72.7</ele> </tp>
724 <title>ACTIVE LOG 126</title>
725 <tp> <time>2006-03-04T11:18:32Z</time> <lat>54.96904</lat> <lon>-1.62482</lon> <ele>72.7</ele> </tp>
726 <tp> <time>2006-03-04T11:18:35Z</time> <lat>54.96913</lat> <lon>-1.62499</lon> <ele>71.3</ele> </tp>
727 <tp> <time>2006-03-04T11:18:38Z</time> <lat>54.96904</lat> <lon>-1.62497</lon> <ele>70.8</ele> </tp>
728 <tp> <time>2006-03-04T11:18:48Z</time> <lat>54.96913</lat> <lon>-1.62496</lon> <ele>71.8</ele> </tp>
729 <tp> <time>2006-03-04T11:18:55Z</time> <lat>54.96924</lat> <lon>-1.62501</lon> <ele>72.2</ele> </tp>
730 <tp> <time>2006-03-04T11:19:11Z</time> <lat>54.9694</lat> <lon>-1.62521</lon> <ele>71.8</ele> </tp>
731 <tp> <time>2006-03-04T11:19:30Z</time> <lat>54.96916</lat> <lon>-1.62515</lon> <ele>71.3</ele> </tp>
732 <tp> <time>2006-03-04T11:19:53Z</time> <lat>54.96921</lat> <lon>-1.625</lon> <ele>71.3</ele> </tp>
733 <tp> <time>2006-03-04T11:20:21Z</time> <lat>54.96801</lat> <lon>-1.62417</lon> <ele>71.8</ele> </tp>
735 <title>ACTIVE LOG 127</title>
736 <tp> <time>2006-03-04T11:21:16Z</time> <lat>54.96887</lat> <lon>-1.62504</lon> <ele>70.8</ele> </tp>
737 <tp> <time>2006-03-04T11:21:18Z</time> <lat>54.96898</lat> <lon>-1.62476</lon> <ele>69.8</ele> </tp>
738 <tp> <time>2006-03-04T11:21:29Z</time> <lat>54.9691</lat> <lon>-1.62475</lon> <ele>69.4</ele> </tp>
739 <tp> <time>2006-03-04T11:21:46Z</time> <lat>54.96918</lat> <lon>-1.62468</lon> <ele>70.3</ele> </tp>
740 <tp> <time>2006-03-04T11:22:39Z</time> <lat>54.9692</lat> <lon>-1.62465</lon> <ele>69.4</ele> </tp>
741 <tp> <time>2006-03-04T11:22:43Z</time> <lat>54.96924</lat> <lon>-1.62462</lon> <ele>71.8</ele> </tp>
742 <tp> <time>2006-03-04T11:22:45Z</time> <lat>54.96928</lat> <lon>-1.62463</lon> <ele>71.8</ele> </tp>
743 <tp> <time>2006-03-04T11:23:00Z</time> <lat>54.96945</lat> <lon>-1.62466</lon> <ele>69.4</ele> </tp>
748 "Read Mapsource TAB-separated format",
752 testcmd
("../gpst two-digit_year.mcsv", # {{{
754 <?xml version="1.0" encoding="UTF-8"?>
758 <title>ACTIVE LOG 032</title>
759 <tp> <time>2006-03-20T20:35:33Z</time> <lat>60.41324</lat> <lon>5.33352</lon> <ele>14</ele> </tp>
760 <tp> <time>2006-03-20T20:35:38Z</time> <lat>60.38802</lat> <lon>5.33845</lon> <ele>18</ele> </tp>
761 <tp> <time>2006-03-20T20:35:44Z</time> <lat>60.38709</lat> <lon>5.3379</lon> <ele>19</ele> </tp>
762 <tp> <time>2006-03-20T20:35:49Z</time> <lat>60.38641</lat> <lon>5.33732</lon> <ele>18</ele> </tp>
763 <tp> <time>2006-03-20T20:35:54Z</time> <lat>60.38581</lat> <lon>5.33647</lon> <ele>18</ele> </tp>
764 <tp> <time>2006-03-20T20:36:00Z</time> <lat>60.38516</lat> <lon>5.33528</lon> <ele>15</ele> </tp>
765 <tp> <time>2006-03-20T20:36:02Z</time> <lat>60.38495</lat> <lon>5.3349</lon> <ele>13</ele> </tp>
770 "Read Mapsource TAB-separated format with two-digit year",
774 testcmd
("../gpst log.gpstxt", # {{{
776 <?xml version="1.0" encoding="UTF-8"?>
779 <tp> <time>2003-06-13T14:36:09Z</time> <lat>59.521517</lat> <lon>7.391867</lon> <ele>762</ele> </tp>
780 <tp> <time>2003-06-13T14:36:10Z</time> <lat>59.5214</lat> <lon>7.392133</lon> <ele>762</ele> </tp>
781 <tp> <time>2003-06-13T14:36:11Z</time> <lat>59.5213</lat> <lon>7.392417</lon> <ele>761</ele> </tp>
782 <tp> <time>2003-06-13T14:36:12Z</time> <lat>59.521183</lat> <lon>7.3927</lon> <ele>761</ele> </tp>
783 <etp err="nosignal"> <time>2003-06-13T14:36:13Z</time> </etp>
784 <tp> <time>2003-06-13T14:36:15Z</time> <lat>59.52085</lat> <lon>7.393517</lon> <ele>760</ele> </tp>
785 <tp> <time>2003-06-13T14:36:16Z</time> <lat>59.520733</lat> <lon>7.393783</lon> <ele>760</ele> </tp>
786 <tp> <time>2003-06-13T14:36:17Z</time> <lat>59.52065</lat> <lon>7.39405</lon> <ele>760</ele> </tp>
787 <tp> <time>2003-06-13T14:36:18Z</time> <lat>59.520583</lat> <lon>7.394333</lon> <ele>760</ele> </tp>
788 <tp> <time>2003-06-13T14:36:19Z</time> <lat>59.520533</lat> <lon>7.394633</lon> <ele>759</ele> </tp>
789 <tp> <time>2003-06-13T14:36:20Z</time> <lat>59.520483</lat> <lon>7.394917</lon> <ele>759</ele> </tp>
790 <tp> <time>2003-06-13T14:36:21Z</time> <lat>59.520433</lat> <lon>7.395233</lon> <ele>759</ele> </tp>
791 <etp err="nosignal"> <time>2003-06-13T14:36:22Z</time> </etp>
792 <tp> <time>2003-06-13T14:36:24Z</time> <lat>59.520283</lat> <lon>7.396233</lon> <ele>758</ele> </tp>
793 <tp> <time>2003-06-13T14:36:25Z</time> <lat>59.520233</lat> <lon>7.39655</lon> <ele>758</ele> </tp>
794 <tp> <time>2003-06-13T14:36:26Z</time> <lat>59.520183</lat> <lon>7.396883</lon> <ele>757</ele> </tp>
795 <tp> <time>2003-06-13T14:36:27Z</time> <lat>59.520133</lat> <lon>7.397217</lon> <ele>757</ele> </tp>
796 <tp> <time>2003-06-13T14:36:28Z</time> <lat>59.5201</lat> <lon>7.397567</lon> <ele>757</ele> </tp>
801 "Read Garmin serial text format",
805 testcmd
("../gpst log.dos.mayko", # {{{
807 <?xml version="1.0" encoding="UTF-8"?>
810 <tp> <time>2003-06-15T10:27:45Z</time> <lat>58.1818158</lat> <lon>8.1225077</lon> </tp>
811 <tp> <time>2003-06-15T10:27:53Z</time> <lat>58.1818712</lat> <lon>8.12532</lon> </tp>
812 <tp> <time>2003-06-15T10:27:57Z</time> <lat>58.1816347</lat> <lon>8.1266031</lon> </tp>
813 <tp> <time>2003-06-15T10:28:03Z</time> <lat>58.1812099</lat> <lon>8.1284612</lon> </tp>
814 <tp> <time>2003-06-15T10:28:06Z</time> <lat>58.1810315</lat> <lon>8.129395</lon> </tp>
815 <tp> <time>2003-06-15T10:28:10Z</time> <lat>58.1809621</lat> <lon>8.13074</lon> </tp>
820 "Read DOS-formatted Mayko format",
824 testcmd
("../gpst log.dos.gpstxt", # {{{
826 <?xml version="1.0" encoding="UTF-8"?>
829 <tp> <time>2003-01-05T16:47:11Z</time> <lat>66.908167</lat> <lon>15.022983</lon> <ele>11472</ele> </tp>
830 <tp> <time>2003-01-05T16:47:12Z</time> <lat>66.90625</lat> <lon>15.020667</lon> <ele>11472</ele> </tp>
831 <tp> <time>2003-01-05T16:47:13Z</time> <lat>66.904317</lat> <lon>15.01835</lon> <ele>11472</ele> </tp>
832 <tp> <time>2003-01-05T16:47:14Z</time> <lat>66.9024</lat> <lon>15.016017</lon> <ele>11473</ele> </tp>
833 <tp> <time>2003-01-05T16:47:15Z</time> <lat>66.900483</lat> <lon>15.0137</lon> <ele>11474</ele> </tp>
834 <tp> <time>2003-01-05T16:47:16Z</time> <lat>66.898567</lat> <lon>15.011383</lon> <ele>11474</ele> </tp>
835 <tp> <time>2003-01-05T16:47:17Z</time> <lat>66.896633</lat> <lon>15.009067</lon> <ele>11475</ele> </tp>
836 <tp> <time>2003-01-05T16:47:18Z</time> <lat>66.894717</lat> <lon>15.006733</lon> <ele>11475</ele> </tp>
837 <tp> <time>2003-01-05T16:47:19Z</time> <lat>66.8928</lat> <lon>15.004417</lon> <ele>11475</ele> </tp>
838 <tp> <time>2003-01-05T16:47:20Z</time> <lat>66.890867</lat> <lon>15.0021</lon> <ele>11475</ele> </tp>
839 <tp> <time>2003-01-05T16:47:21Z</time> <lat>66.88895</lat> <lon>14.999783</lon> <ele>11475</ele> </tp>
844 "Read DOS-formatted Garmin serial text format",
848 testcmd
("../gpst log.unix.mcsv", # {{{
850 <?xml version="1.0" encoding="UTF-8"?>
854 <title>ACTIVE LOG 058</title>
855 <tp> <time>2006-02-21T15:14:25Z</time> <lat>60.36662</lat> <lon>5.24885</lon> <ele>31.9</ele> </tp>
856 <tp> <time>2006-02-21T15:14:30Z</time> <lat>60.37057</lat> <lon>5.22956</lon> <ele>35.2</ele> </tp>
857 <tp> <time>2006-02-21T15:14:35Z</time> <lat>60.37019</lat> <lon>5.22817</lon> <ele>39.6</ele> </tp>
858 <tp> <time>2006-02-21T15:14:36Z</time> <lat>60.37012</lat> <lon>5.2279</lon> <ele>41</ele> </tp>
859 <tp> <time>2006-02-21T15:14:40Z</time> <lat>60.37009</lat> <lon>5.22682</lon> <ele>47.2</ele> </tp>
860 <tp> <time>2006-02-21T15:14:42Z</time> <lat>60.37011</lat> <lon>5.22641</lon> <ele>49.2</ele> </tp>
861 <tp> <time>2006-02-21T15:14:44Z</time> <lat>60.37011</lat> <lon>5.22607</lon> <ele>50.1</ele> </tp>
862 <tp> <time>2006-02-21T15:14:48Z</time> <lat>60.37002</lat> <lon>5.22568</lon> <ele>51.1</ele> </tp>
863 <tp> <time>2006-02-21T15:14:51Z</time> <lat>60.3701</lat> <lon>5.22548</lon> <ele>52.5</ele> </tp>
868 "Read UNIX-formatted Garmin Mapsource TAB-separated format",
872 testcmd
("../gpst multitrack.gpx", # {{{
874 <?xml version="1.0" encoding="UTF-8"?>
877 <title>Track 1</title>
878 <tp> <time>2003-02-11T23:35:39Z</time> <lat>51.4968266</lat> <lon>-0.1448824</lon> </tp>
879 <tp> <time>2003-02-11T23:35:49Z</time> <lat>51.4968227</lat> <lon>-0.1449938</lon> </tp>
880 <tp> <time>2003-02-11T23:36:14Z</time> <lat>51.496904</lat> <lon>-0.1453202</lon> </tp>
882 <title>Track 2</title>
883 <tp> <time>2003-02-11T23:36:16Z</time> <lat>51.4969214</lat> <lon>-0.1453398</lon> </tp>
884 <tp> <time>2003-02-11T23:36:31Z</time> <lat>51.4969816</lat> <lon>-0.1455514</lon> </tp>
885 <tp> <time>2003-02-11T23:36:43Z</time> <lat>51.4970224</lat> <lon>-0.1457489</lon> <ele>1000</ele> </tp>
886 <tp> <time>2003-02-11T23:36:50Z</time> <lat>51.4970452</lat> <lon>-0.1457804</lon> </tp>
888 <title>Track 3</title>
889 <tp> <time>2003-02-11T23:37:05Z</time> <lat>51.497068</lat> <lon>-0.1458608</lon> </tp>
890 <tp> <time>2003-02-11T23:37:22Z</time> <lat>51.4971658</lat> <lon>-0.1460047</lon> </tp>
891 <tp> <time>2003-02-11T23:37:36Z</time> <lat>51.4972469</lat> <lon>-0.1461614</lon> </tp>
893 <title>Track 4</title>
894 <tp> <time>2003-02-11T23:37:43Z</time> <lat>51.4972731</lat> <lon>-0.1462394</lon> </tp>
895 <tp> <time>2003-02-11T23:38:04Z</time> <lat>51.4973437</lat> <lon>-0.1463232</lon> </tp>
896 <tp> <time>2003-02-11T23:38:28Z</time> <lat>51.4973337</lat> <lon>-0.1462949</lon> </tp>
897 <tp> <time>2003-02-11T23:38:34Z</time> <lat>51.4973218</lat> <lon>-0.1462825</lon> </tp>
898 <tp> <time>2003-02-11T23:38:35Z</time> <lat>51.4973145</lat> <lon>-0.1462732</lon> </tp>
903 "Read GPX file with multiple tracks",
907 testcmd
("../gpst compact.gpx", # {{{
909 <?xml version="1.0" encoding="UTF-8"?>
912 <title>All whitespace stripped</title>
913 <tp> <time>2002-12-30T15:22:04Z</time> <lat>70.660932</lat> <lon>23.7028354</lon> </tp>
914 <tp> <time>2002-12-30T15:22:06Z</time> <lat>70.6609392</lat> <lon>23.7028468</lon> </tp>
915 <tp> <time>2002-12-30T15:22:08Z</time> <lat>70.6609429</lat> <lon>23.7028499</lon> </tp>
916 <tp> <time>2002-12-30T15:22:11Z</time> <lat>70.6609381</lat> <lon>23.702862</lon> </tp>
917 <tp> <time>2002-12-30T15:22:12Z</time> <lat>70.6609368</lat> <lon>23.7028648</lon> </tp>
918 <tp> <time>2002-12-30T15:22:13Z</time> <lat>70.6609344</lat> <lon>23.7028652</lon> </tp>
919 <tp> <time>2002-12-30T15:22:15Z</time> <lat>70.6609349</lat> <lon>23.7028707</lon> </tp>
920 <tp> <time>2002-12-30T15:22:17Z</time> <lat>70.6609348</lat> <lon>23.7028654</lon> </tp>
921 <tp> <time>2002-12-30T15:22:19Z</time> <lat>70.6609347</lat> <lon>23.7028599</lon> </tp>
922 <tp> <time>2002-12-30T15:22:20Z</time> <lat>70.6609348</lat> <lon>23.7028609</lon> </tp>
923 <tp> <time>2002-12-30T15:22:23Z</time> <lat>70.6609388</lat> <lon>23.7028653</lon> </tp>
924 <tp> <time>2002-12-30T15:22:25Z</time> <lat>70.6609426</lat> <lon>23.7028732</lon> </tp>
929 "Read GPX one-liner",
933 testcmd
("../gpst missing.gpsml", # {{{
935 <?xml version="1.0" encoding="UTF-8"?>
938 <title>Missing various elements</title>
939 <tp> <time>2006-04-30T17:16:59Z</time> </tp>
940 <tp> <time>2006-04-30T17:17:00Z</time> </tp>
941 <tp> <time>2006-04-30T17:17:09Z</time> <lat>60.42353</lat> <lon>5.34185</lon> </tp>
942 <tp> <time>2006-04-30T17:17:11Z</time> <ele>483</ele> </tp>
943 <tp> <time>2006-04-30T17:17:22Z</time> <ele>485</ele> </tp>
944 <tp> <lat>60.42347</lat> <lon>5.34212</lon> <ele>486</ele> </tp>
945 <tp> <ele>484</ele> </tp>
946 <tp> <ele>486</ele> </tp>
947 <tp> <desc>Missing everything</desc> </tp>
948 <tp> <time>2006-04-30T17:18:03Z</time> <ele>490</ele> </tp>
949 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
954 "Read gpsml with various data missing",
958 testcmd
("../gpst different_dateformats.gpsml", # {{{
960 <?xml version="1.0" encoding="UTF-8"?>
963 <title>Date format variations</title>
964 <tp> <time>2006-01-01T00:00:01Z</time> <lat>1</lat> <lon>1</lon> </tp>
965 <tp> <time>2006-01-01T00:00:02Z</time> <lat>2</lat> <lon>2</lon> </tp>
966 <tp> <time>2006-01-01T00:00:03Z</time> <lat>3</lat> <lon>3</lon> </tp>
967 <tp> <time>2006-01-01T00:00:04Z</time> <lat>4</lat> <lon>4</lon> </tp>
972 "Read different date formats from gpsml file",
976 testcmd
("../gpst multitrack-pause.gpx", # {{{
977 file_data
("multitrack-pause.gpsml"),
979 "Should be equal to multitrack-pause.gpsml",
984 testcmd
("../gpst -o gpx no_signal.mayko", # {{{
989 <trkpt lat="70.6800486" lon="23.6746151"> <time>2002-12-22T21:42:24Z</time> </trkpt>
990 <trkpt lat="70.6799322" lon="23.6740038"> <time>2002-12-22T21:42:32Z</time> </trkpt>
991 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:42:54Z</time> </trkpt>
992 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:51Z</time> </trkpt>
993 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:52Z</time> </trkpt>
994 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:54Z</time> </trkpt>
995 <trkpt lat="70.6800774" lon="23.6757566"> <time>2002-12-22T21:44:45Z</time> </trkpt>
996 <trkpt lat="70.6801502" lon="23.6753442"> <time>2002-12-22T21:44:52Z</time> </trkpt>
997 <trkpt lat="70.6801905" lon="23.6757542"> <time>2002-12-22T21:45:04Z</time> </trkpt>
1003 "Output GPX from Mayko file with duplicates",
1007 testcmd
("../gpst -o gpx comments.mayko", # {{{
1012 <trkpt lat="70.6800486" lon="23.6746151"> <time>2002-12-22T21:42:24Z</time> </trkpt>
1013 <trkpt lat="70.6799322" lon="23.6740038"> <time>2002-12-22T21:42:32Z</time> </trkpt>
1014 <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:42:54Z</time> </trkpt>
1015 <!-- <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:51Z</time> <extensions> <error>desc</error> </extensions> </trkpt> -->
1016 <!-- <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:52Z</time> <extensions> <error>desc</error> </extensions> </trkpt> -->
1017 <!-- <trkpt lat="70.6796266" lon="23.6723991"> <time>2002-12-22T21:43:54Z</time> <extensions> <error>desc</error> </extensions> </trkpt> -->
1018 <trkpt lat="70.6800774" lon="23.6757566"> <time>2002-12-22T21:44:45Z</time> </trkpt>
1021 <trkpt lat="70.6801502" lon="23.6753442"> <time>2002-12-22T21:44:52Z</time> </trkpt>
1022 <trkpt lat="70.6801905" lon="23.6757542"> <time>2002-12-22T21:45:04Z</time> </trkpt>
1028 "Output GPX from Mayko file with commented-out lines",
1032 testcmd
("../gpst -o gpx missing.gpsml", # {{{
1037 <trkpt lat="60.42353" lon="5.34185"> <time>2006-04-30T17:17:09Z</time> </trkpt>
1038 <trkpt> <ele>483</ele> <time>2006-04-30T17:17:11Z</time> </trkpt>
1039 <trkpt> <ele>485</ele> <time>2006-04-30T17:17:22Z</time> </trkpt>
1040 <trkpt lat="60.42347" lon="5.34212"> <ele>486</ele> </trkpt>
1041 <trkpt> <ele>484</ele> </trkpt>
1042 <trkpt> <ele>486</ele> </trkpt>
1043 <trkpt> <ele>490</ele> <time>2006-04-30T17:18:03Z</time> </trkpt>
1044 <trkpt lat="60.42338" lon="5.34269"> <ele>487</ele> <time>2006-04-30T17:18:05Z</time> </trkpt>
1050 "Output GPX from gpsml with missing data",
1055 testcmd
("../gpst -o xgraph multitrack.gpx", # {{{
1057 -0.1448824 51.4968266
1058 -0.1449938 51.4968227
1059 -0.1453202 51.4969040
1060 move -0.1453398 51.4969214
1061 -0.1455514 51.4969816
1062 -0.1457489 51.4970224
1063 -0.1457804 51.4970452
1064 move -0.1458608 51.4970680
1065 -0.1460047 51.4971658
1066 -0.1461614 51.4972469
1067 move -0.1462394 51.4972731
1068 -0.1463232 51.4973437
1069 -0.1462949 51.4973337
1070 -0.1462825 51.4973218
1071 -0.1462732 51.4973145
1074 "Output xgraph format from GPX",
1079 testcmd
("../gpst -o pgtab compact.gpx", # {{{
1081 2002-12-30T15:22:04Z\t(70.6609320,23.7028354)\t\\N\t\\N\t\\N\t\\N\t\\N
1082 2002-12-30T15:22:06Z\t(70.6609392,23.7028468)\t\\N\t\\N\t\\N\t\\N\t\\N
1083 2002-12-30T15:22:08Z\t(70.6609429,23.7028499)\t\\N\t\\N\t\\N\t\\N\t\\N
1084 2002-12-30T15:22:11Z\t(70.6609381,23.7028620)\t\\N\t\\N\t\\N\t\\N\t\\N
1085 2002-12-30T15:22:12Z\t(70.6609368,23.7028648)\t\\N\t\\N\t\\N\t\\N\t\\N
1086 2002-12-30T15:22:13Z\t(70.6609344,23.7028652)\t\\N\t\\N\t\\N\t\\N\t\\N
1087 2002-12-30T15:22:15Z\t(70.6609349,23.7028707)\t\\N\t\\N\t\\N\t\\N\t\\N
1088 2002-12-30T15:22:17Z\t(70.6609348,23.7028654)\t\\N\t\\N\t\\N\t\\N\t\\N
1089 2002-12-30T15:22:19Z\t(70.6609347,23.7028599)\t\\N\t\\N\t\\N\t\\N\t\\N
1090 2002-12-30T15:22:20Z\t(70.6609348,23.7028609)\t\\N\t\\N\t\\N\t\\N\t\\N
1091 2002-12-30T15:22:23Z\t(70.6609388,23.7028653)\t\\N\t\\N\t\\N\t\\N\t\\N
1092 2002-12-30T15:22:25Z\t(70.6609426,23.7028732)\t\\N\t\\N\t\\N\t\\N\t\\N
1095 "Output pgtab from gpx format",
1099 testcmd
("../gpst -o pgtab no_signal.mayko", # {{{
1101 2002-12-22T21:42:24Z\t(70.6800486,23.6746151)\t\\N\t\\N\t\\N\t\\N\t\\N
1102 2002-12-22T21:42:32Z\t(70.6799322,23.6740038)\t\\N\t\\N\t\\N\t\\N\t\\N
1103 2002-12-22T21:42:54Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N\t\\N
1104 2002-12-22T21:43:51Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N\t\\N
1105 2002-12-22T21:43:52Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N\t\\N
1106 2002-12-22T21:43:54Z\t(70.6796266,23.6723991)\t\\N\t\\N\t\\N\t\\N\t\\N
1107 2002-12-22T21:44:45Z\t(70.6800774,23.6757566)\t\\N\t\\N\t\\N\t\\N\t\\N
1108 2002-12-22T21:44:52Z\t(70.6801502,23.6753442)\t\\N\t\\N\t\\N\t\\N\t\\N
1109 2002-12-22T21:45:04Z\t(70.6801905,23.6757542)\t\\N\t\\N\t\\N\t\\N\t\\N
1112 "Output pgtab from mayko format",
1116 testcmd
("../gpst -o pgtab missing.gpsml", # {{{
1118 2006-04-30T17:17:09Z\t(60.42353,5.34185)\t\\N\t\\N\t\\N\t\\N\t\\N
1119 \\N\t(60.42347,5.34212)\t486\t\\N\t\\N\t\\N\t\\N
1120 2006-04-30T17:18:05Z\t(60.42338,5.34269)\t487\t\\N\t\\N\t\\N\t\\N
1123 "Output pgtab from missing.gpsml",
1128 testcmd
("../gpst -o csv log.dos.mayko", # {{{
1130 2003-06-15T10:27:45Z\t8.1225077\t58.1818158\t\t
1131 2003-06-15T10:27:53Z\t8.1253200\t58.1818712\t\t
1132 2003-06-15T10:27:57Z\t8.1266031\t58.1816347\t\t
1133 2003-06-15T10:28:03Z\t8.1284612\t58.1812099\t\t
1134 2003-06-15T10:28:06Z\t8.1293950\t58.1810315\t\t
1135 2003-06-15T10:28:10Z\t8.1307400\t58.1809621\t\t
1138 "Output csv from DOS-formatted Mayko format",
1143 testcmd
("../gpst -o pgwtab multitrack.gpx", # {{{
1145 (51.477880000,-0.001470000)\t0-Meridian\t\\N\t\\N\t\\N\t11-FEB-03 15:46\t11-FEB-03 15:46\t\\N\t\\N
1146 (51.532030,-0.177330)\tAbbey Road\t34.492798\t\\N\t\\N\tDet hellige gangfeltet der Beatles valsa over.\t26-FEB-06 17:29:46\t\\N\t\\N
1147 (61.636684,8.312254)\tGaldhøpiggen med ', &, < og >. ☺\t2469.012939\tmountain\t2006-05-08T18:27:59Z\tHer er det &, < og >. ☺\tSchwæra greie\thttp://www.example.org/\tWaypoint
1148 (60.397460000,5.350610000)\tHalfdan Griegs vei\t\\N\t\\N\t\\N\t04-AUG-02 19:42\t04-AUG-02 19:42\t\\N\t\\N
1149 (51.510130000,-0.130410000)\tLeicester Square\t\\N\t\\N\t\\N\t11-FEB-03 18:00\t11-FEB-03 18:00\t\\N\t\\N
1150 (60.968540000,9.285350000)\tLeira camping\t\\N\t\\N\t\\N\t03-OKT-02 21:58\t03-OKT-02 21:58\t\\N\t\\N
1153 "Test pgwtab format",
1158 testcmd
("../gpst -o pgwupd multitrack.gpx", # {{{
1161 UPDATE logg SET sted = clname(coor) WHERE (point(51.477880000,-0.001470000) <-> coor) < 0.05;
1162 UPDATE logg SET dist = cldist(coor) WHERE (point(51.477880000,-0.001470000) <-> coor) < 0.05;
1165 UPDATE logg SET sted = clname(coor) WHERE (point(51.532030,-0.177330) <-> coor) < 0.05;
1166 UPDATE logg SET dist = cldist(coor) WHERE (point(51.532030,-0.177330) <-> coor) < 0.05;
1169 UPDATE logg SET sted = clname(coor) WHERE (point(61.636684,8.312254) <-> coor) < 0.05;
1170 UPDATE logg SET dist = cldist(coor) WHERE (point(61.636684,8.312254) <-> coor) < 0.05;
1173 UPDATE logg SET sted = clname(coor) WHERE (point(60.397460000,5.350610000) <-> coor) < 0.05;
1174 UPDATE logg SET dist = cldist(coor) WHERE (point(60.397460000,5.350610000) <-> coor) < 0.05;
1177 UPDATE logg SET sted = clname(coor) WHERE (point(51.510130000,-0.130410000) <-> coor) < 0.05;
1178 UPDATE logg SET dist = cldist(coor) WHERE (point(51.510130000,-0.130410000) <-> coor) < 0.05;
1181 UPDATE logg SET sted = clname(coor) WHERE (point(60.968540000,9.285350000) <-> coor) < 0.05;
1182 UPDATE logg SET dist = cldist(coor) WHERE (point(60.968540000,9.285350000) <-> coor) < 0.05;
1186 "Test pgwupd format",
1191 testcmd
("../gpst -t -o clean pause.gpx", # {{{
1193 5.299534\t60.425494\t25.260
1194 5.299610\t60.425464\t24.931
1196 5.299694\t60.425314\t27.975
1198 5.299741\t60.425384\t31.017
1199 5.299958\t60.425339\t30.980
1200 5.299640\t60.425238\t30.538
1201 5.299686\t60.425246\t30.515
1203 5.299773\t60.425345\t31.936
1204 5.299419\t60.425457\t31.794
1207 "Output clean format with time breaks",
1215 # --output option }}}
1216 diag
("Testing --outside option..."); # {{{
1217 testcmd
("../gpst --pos1 2.11,2.12 --pos2 3.31,3.32 --outside multitrack-pause.gpx", # {{{
1219 <?xml version="1.0" encoding="UTF-8"?>
1222 <title>track1</title>
1223 <tp> <time>2006-01-01T00:00:00Z</time> <lat>1.11</lat> <lon>1.12</lon> </tp>
1224 <tp> <time>2006-01-01T00:00:01Z</time> <lat>1.21</lat> <lon>1.22</lon> </tp>
1225 <tp> <time>2006-01-01T00:00:02Z</time> <lat>1.31</lat> <lon>1.32</lon> </tp>
1227 <title>track2</title>
1229 <title>track3</title>
1231 <tp> <time>2006-01-03T02:00:23Z</time> <lat>3.41</lat> <lon>3.42</lon> </tp>
1232 <tp> <time>2006-01-03T02:00:24Z</time> <lat>3.51</lat> <lon>3.52</lon> </tp>
1233 <tp> <time>2006-01-03T02:00:25Z</time> <lat>3.61</lat> <lon>3.62</lon> </tp>
1234 <tp> <time>2006-01-03T02:00:26Z</time> <lat>3.71</lat> <lon>3.72</lon> </tp>
1235 <tp> <time>2006-01-03T02:00:27Z</time> <lat>3.81</lat> <lon>3.82</lon> </tp>
1240 "Check --outside option (gpx to gpst)",
1244 # --outside option }}}
1245 diag
("Testing --pos1 and --pos2 options..."); # {{{
1246 # --pos1 and --pos2 options }}}
1247 diag
("Testing --require option..."); # {{{
1248 testcmd
("../gpst -re multitrack.gpx", # {{{
1250 <?xml version="1.0" encoding="UTF-8"?>
1253 <title>Track 1</title>
1255 <title>Track 2</title>
1256 <tp> <time>2003-02-11T23:36:43Z</time> <lat>51.4970224</lat> <lon>-0.1457489</lon> <ele>1000</ele> </tp>
1258 <title>Track 3</title>
1260 <title>Track 4</title>
1265 "Require elevation from GPX data",
1268 testcmd
("../gpst tracks.gpsman", # {{{
1270 <?xml version="1.0" encoding="UTF-8"?>
1273 <title>ACTIVE LOG</title>
1274 <tp> <time>2003-12-01T04:21:09Z</time> <lat>60.2891111111111</lat> <lon>5.22761111111111</lon> <ele>54.4517822266</ele> </tp>
1275 <tp> <time>2003-12-01T04:21:26Z</time> <lat>60.2885833333333</lat> <lon>5.22616666666667</lon> <ele>54.4517822266</ele> </tp>
1277 <tp> <time>2003-12-01T09:27:21Z</time> <lat>52.1221666666667</lat> <lon>14.0295277777778</lon> <ele>1494.98730469</ele> </tp>
1279 <tp> <time>2003-12-01T09:27:42Z</time> <lat>52.0858888888889</lat> <lon>14.0401388888889</lon> <ele>1494.98730469</ele> </tp>
1280 <tp> <time>2003-12-01T09:27:43Z</time> <lat>52.0842777777778</lat> <lon>14.0406666666667</lon> <ele>1494.02612305</ele> </tp>
1282 <tp> <time>2003-12-01T21:26:07Z</time> <lat>50.0858333333333</lat> <lon>14.4290833333333</lon> <ele>183.268432617</ele> </tp>
1283 <tp> <time>2003-12-01T21:26:31Z</time> <lat>50.0859722222222</lat> <lon>14.4291111111111</lon> <ele>184.710571289</ele> </tp>
1285 <tp> <time>2003-12-01T21:47:30Z</time> <lat>50.092</lat> <lon>14.43625</lon> <ele>180.384521484</ele> </tp>
1286 <tp> <time>2003-12-01T21:47:47Z</time> <lat>50.092</lat> <lon>14.43625</lon> <ele>181.345825195</ele> </tp>
1287 <tp> <time>2003-12-01T21:47:53Z</time> <lat>50.092</lat> <lon>14.4362222222222</lon> <ele>182.307128906</ele> </tp>
1292 "Output gpsml format from gpsman",
1296 testcmd
("../gpst -o gpx -R lat=7,lon=7,ele=2 tracks.gpsman", # {{{
1298 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1301 creator="gpst - http://svn.sunbase.org/repos/utils/trunk/src/gpstools/"
1302 xmlns="http://www.topografix.com/GPX/1/1"
1303 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1304 xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
1307 <title>ACTIVE LOG</title>
1309 <trkpt lat="60.2891111" lon="5.2276111"> <ele>54.45</ele> <time>2003-12-01T04:21:09Z</time> </trkpt>
1310 <trkpt lat="60.2885833" lon="5.2261667"> <ele>54.45</ele> <time>2003-12-01T04:21:26Z</time> </trkpt>
1313 <trkpt lat="52.1221667" lon="14.0295278"> <ele>1494.99</ele> <time>2003-12-01T09:27:21Z</time> </trkpt>
1316 <trkpt lat="52.0858889" lon="14.0401389"> <ele>1494.99</ele> <time>2003-12-01T09:27:42Z</time> </trkpt>
1317 <trkpt lat="52.0842778" lon="14.0406667"> <ele>1494.03</ele> <time>2003-12-01T09:27:43Z</time> </trkpt>
1320 <trkpt lat="50.0858333" lon="14.4290833"> <ele>183.27</ele> <time>2003-12-01T21:26:07Z</time> </trkpt>
1321 <trkpt lat="50.0859722" lon="14.4291111"> <ele>184.71</ele> <time>2003-12-01T21:26:31Z</time> </trkpt>
1324 <trkpt lat="50.092" lon="14.43625"> <ele>180.38</ele> <time>2003-12-01T21:47:30Z</time> </trkpt>
1325 <trkpt lat="50.092" lon="14.43625"> <ele>181.35</ele> <time>2003-12-01T21:47:47Z</time> </trkpt>
1326 <trkpt lat="50.092" lon="14.4362222"> <ele>182.31</ele> <time>2003-12-01T21:47:53Z</time> </trkpt>
1332 "Output GPX format from gpsman",
1335 testcmd
("../gpst -re one_ele.dos.gpsml", # {{{
1337 <?xml version="1.0" encoding="UTF-8"?>
1340 <title>Only one point has elevation</title>
1341 <tp> <time>2006-05-21T16:52:04Z</time> <lat>60.425314</lat> <lon>5.299694</lon> <ele>27.975</ele> </tp>
1346 "Require elevation from gpsml",
1352 local $TODO = "Shall lat/lon be cleared if one is missing?";
1353 testcmd
("../gpst -re missing.gpsml", # {{{
1355 <?xml version="1.0" encoding="UTF-8"?>
1358 <title>Missing various elements</title>
1359 <tp> <time>2006-04-30T17:17:11Z</time> <ele>483</ele> </tp>
1360 <tp> <time>2006-04-30T17:17:22Z</time> <ele>485</ele> </tp>
1361 <tp> <lat>60.42347</lat> <lon>5.34212</lon> <ele>486</ele> </tp>
1362 <tp> <ele>484</ele> </tp>
1363 <tp> <ele>486</ele> </tp>
1364 <tp> <time>2006-04-30T17:18:03Z</time> <ele>490</ele> </tp>
1365 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1370 "Require elevation",
1374 testcmd
("../gpst -rt missing.gpsml", # {{{
1376 <?xml version="1.0" encoding="UTF-8"?>
1379 <title>Missing various elements</title>
1380 <tp> <time>2006-04-30T17:16:59Z</time> </tp>
1381 <tp> <time>2006-04-30T17:17:00Z</time> </tp>
1382 <tp> <time>2006-04-30T17:17:09Z</time> <lat>60.42353</lat> <lon>5.34185</lon> </tp>
1383 <tp> <time>2006-04-30T17:17:11Z</time> <ele>483</ele> </tp>
1384 <tp> <time>2006-04-30T17:17:22Z</time> <ele>485</ele> </tp>
1385 <tp> <time>2006-04-30T17:18:03Z</time> <ele>490</ele> </tp>
1386 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1395 testcmd
("../gpst -rp missing.gpsml", # {{{
1397 <?xml version="1.0" encoding="UTF-8"?>
1400 <title>Missing various elements</title>
1401 <tp> <time>2006-04-30T17:17:09Z</time> <lat>60.42353</lat> <lon>5.34185</lon> </tp>
1402 <tp> <lat>60.42347</lat> <lon>5.34212</lon> <ele>486</ele> </tp>
1403 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1412 testcmd
("../gpst -ret missing.gpsml", # {{{
1414 <?xml version="1.0" encoding="UTF-8"?>
1417 <title>Missing various elements</title>
1418 <tp> <time>2006-04-30T17:17:11Z</time> <ele>483</ele> </tp>
1419 <tp> <time>2006-04-30T17:17:22Z</time> <ele>485</ele> </tp>
1420 <tp> <time>2006-04-30T17:18:03Z</time> <ele>490</ele> </tp>
1421 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1426 "Require elevation and time",
1430 testcmd
("../gpst -retp missing.gpsml", # {{{
1432 <?xml version="1.0" encoding="UTF-8"?>
1435 <title>Missing various elements</title>
1436 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1441 "Require elevation, time and position",
1445 testcmd
("../gpst -rep missing.gpsml", # {{{
1447 <?xml version="1.0" encoding="UTF-8"?>
1450 <title>Missing various elements</title>
1451 <tp> <lat>60.42347</lat> <lon>5.34212</lon> <ele>486</ele> </tp>
1452 <tp> <time>2006-04-30T17:18:05Z</time> <lat>60.42338</lat> <lon>5.34269</lon> <ele>487</ele> </tp>
1457 "Require elevation and position",
1462 # --require option }}}
1463 diag
("Testing --round option..."); # {{{
1464 testcmd
("../gpst -R lat=4,lon=5,ele=1 pause.gpx", # {{{
1466 <?xml version="1.0" encoding="UTF-8"?>
1469 <title>ACTIVE LOG164705</title>
1470 <tp> <time>2006-05-21T16:49:11Z</time> <lat>60.4255</lat> <lon>5.29953</lon> <ele>25.3</ele> </tp>
1471 <tp> <time>2006-05-21T16:49:46Z</time> <lat>60.4255</lat> <lon>5.29961</lon> <ele>24.9</ele> </tp>
1472 <tp> <time>2006-05-21T16:52:04Z</time> <lat>60.4253</lat> <lon>5.29969</lon> <ele>28</ele> </tp>
1473 <tp> <time>2006-05-21T16:56:36Z</time> <lat>60.4254</lat> <lon>5.29974</lon> <ele>31</ele> </tp>
1474 <tp> <time>2006-05-21T16:56:47Z</time> <lat>60.4253</lat> <lon>5.29996</lon> <ele>31</ele> </tp>
1475 <tp> <time>2006-05-21T16:56:56Z</time> <lat>60.4252</lat> <lon>5.29964</lon> <ele>30.5</ele> </tp>
1476 <tp> <time>2006-05-21T16:57:03Z</time> <lat>60.4252</lat> <lon>5.29969</lon> <ele>30.5</ele> </tp>
1477 <tp> <time>2006-05-21T16:59:08Z</time> <lat>60.4253</lat> <lon>5.29977</lon> <ele>31.9</ele> </tp>
1478 <tp> <time>2006-05-21T17:00:54Z</time> <lat>60.4255</lat> <lon>5.29942</lon> <ele>31.8</ele> </tp>
1483 "--round works with lat, lon, ele from gpx",
1487 # --round option }}}
1488 diag
("Testing --short-date option..."); # {{{
1489 # --short-date option }}}
1490 diag
("Testing --save-to-file option..."); # {{{
1491 # --save-to-file option }}}
1492 diag
("Testing --create-breaks option..."); # {{{
1493 testcmd
("../gpst -t pause.gpx", # {{{
1495 <?xml version="1.0" encoding="UTF-8"?>
1498 <title>ACTIVE LOG164705</title>
1499 <tp> <time>2006-05-21T16:49:11Z</time> <lat>60.425494</lat> <lon>5.299534</lon> <ele>25.26</ele> </tp>
1500 <tp> <time>2006-05-21T16:49:46Z</time> <lat>60.425464</lat> <lon>5.29961</lon> <ele>24.931</ele> </tp>
1501 <pause>0:00:02:18</pause>
1502 <tp> <time>2006-05-21T16:52:04Z</time> <lat>60.425314</lat> <lon>5.299694</lon> <ele>27.975</ele> </tp>
1503 <pause>0:00:04:32</pause>
1504 <tp> <time>2006-05-21T16:56:36Z</time> <lat>60.425384</lat> <lon>5.299741</lon> <ele>31.017</ele> </tp>
1505 <tp> <time>2006-05-21T16:56:47Z</time> <lat>60.425339</lat> <lon>5.299958</lon> <ele>30.98</ele> </tp>
1506 <tp> <time>2006-05-21T16:56:56Z</time> <lat>60.425238</lat> <lon>5.29964</lon> <ele>30.538</ele> </tp>
1507 <tp> <time>2006-05-21T16:57:03Z</time> <lat>60.425246</lat> <lon>5.299686</lon> <ele>30.515</ele> </tp>
1508 <pause>0:00:02:05</pause>
1509 <tp> <time>2006-05-21T16:59:08Z</time> <lat>60.425345</lat> <lon>5.299773</lon> <ele>31.936</ele> </tp>
1510 <tp> <time>2006-05-21T17:00:54Z</time> <lat>60.425457</lat> <lon>5.299419</lon> <ele>31.794</ele> </tp>
1515 "Output gpsml with <pause> elements from GPX files",
1519 testcmd
("../gpst -t multitrack-pause.gpx", # {{{
1521 <?xml version="1.0" encoding="UTF-8"?>
1524 <title>track1</title>
1525 <tp> <time>2006-01-01T00:00:00Z</time> <lat>1.11</lat> <lon>1.12</lon> </tp>
1526 <tp> <time>2006-01-01T00:00:01Z</time> <lat>1.21</lat> <lon>1.22</lon> </tp>
1527 <tp> <time>2006-01-01T00:00:02Z</time> <lat>1.31</lat> <lon>1.32</lon> </tp>
1529 <title>track2</title>
1530 <pause>0:23:59:58</pause>
1531 <tp> <time>2006-01-02T00:00:00Z</time> <lat>2.11</lat> <lon>2.12</lon> </tp>
1532 <tp> <time>2006-01-02T00:00:04Z</time> <lat>2.21</lat> <lon>2.22</lon> </tp>
1533 <tp> <time>2006-01-02T00:00:16Z</time> <lat>2.31</lat> <lon>2.32</lon> </tp>
1534 <pause>0:01:00:00</pause>
1535 <tp> <time>2006-01-02T01:00:16Z</time> <lat>2.41</lat> <lon>2.42</lon> </tp>
1537 <tp> <time>2006-01-02T01:00:17Z</time> <lat>2.451</lat> <lon>2.452</lon> </tp>
1539 <title>track3</title>
1540 <pause>1:01:00:03</pause>
1541 <tp> <time>2006-01-03T02:00:20Z</time> <lat>3.11</lat> <lon>3.12</lon> </tp>
1542 <tp> <time>2006-01-03T02:00:21Z</time> <lat>3.21</lat> <lon>3.22</lon> </tp>
1543 <tp> <time>2006-01-03T02:00:22Z</time> <lat>3.31</lat> <lon>3.32</lon> </tp>
1545 <tp> <time>2006-01-03T02:00:23Z</time> <lat>3.41</lat> <lon>3.42</lon> </tp>
1546 <tp> <time>2006-01-03T02:00:24Z</time> <lat>3.51</lat> <lon>3.52</lon> </tp>
1547 <tp> <time>2006-01-03T02:00:25Z</time> <lat>3.61</lat> <lon>3.62</lon> </tp>
1548 <tp> <time>2006-01-03T02:00:26Z</time> <lat>3.71</lat> <lon>3.72</lon> </tp>
1549 <tp> <time>2006-01-03T02:00:27Z</time> <lat>3.81</lat> <lon>3.82</lon> </tp>
1554 "Insert <pause> between gpx tracks",
1558 testcmd
("../gpst -t multitrack-pause.gpsml", # {{{
1560 <?xml version="1.0" encoding="UTF-8"?>
1563 <title>track1</title>
1564 <tp> <time>2006-01-01T00:00:00Z</time> <lat>1.11</lat> <lon>1.12</lon> </tp>
1565 <tp> <time>2006-01-01T00:00:01Z</time> <lat>1.21</lat> <lon>1.22</lon> </tp>
1566 <tp> <time>2006-01-01T00:00:02Z</time> <lat>1.31</lat> <lon>1.32</lon> </tp>
1568 <title>track2</title>
1569 <pause>0:23:59:58</pause>
1570 <tp> <time>2006-01-02T00:00:00Z</time> <lat>2.11</lat> <lon>2.12</lon> </tp>
1571 <tp> <time>2006-01-02T00:00:04Z</time> <lat>2.21</lat> <lon>2.22</lon> </tp>
1572 <tp> <time>2006-01-02T00:00:16Z</time> <lat>2.31</lat> <lon>2.32</lon> </tp>
1573 <pause>0:01:00:00</pause>
1574 <tp> <time>2006-01-02T01:00:16Z</time> <lat>2.41</lat> <lon>2.42</lon> </tp>
1576 <tp> <time>2006-01-02T01:00:17Z</time> <lat>2.451</lat> <lon>2.452</lon> </tp>
1578 <title>track3</title>
1579 <pause>1:01:00:03</pause>
1580 <tp> <time>2006-01-03T02:00:20Z</time> <lat>3.11</lat> <lon>3.12</lon> </tp>
1581 <tp> <time>2006-01-03T02:00:21Z</time> <lat>3.21</lat> <lon>3.22</lon> </tp>
1582 <tp> <time>2006-01-03T02:00:22Z</time> <lat>3.31</lat> <lon>3.32</lon> </tp>
1584 <tp> <time>2006-01-03T02:00:23Z</time> <lat>3.41</lat> <lon>3.42</lon> </tp>
1585 <tp> <time>2006-01-03T02:00:24Z</time> <lat>3.51</lat> <lon>3.52</lon> </tp>
1586 <tp> <time>2006-01-03T02:00:25Z</time> <lat>3.61</lat> <lon>3.62</lon> </tp>
1587 <tp> <time>2006-01-03T02:00:26Z</time> <lat>3.71</lat> <lon>3.72</lon> </tp>
1588 <tp> <time>2006-01-03T02:00:27Z</time> <lat>3.81</lat> <lon>3.82</lon> </tp>
1593 "Insert <pause> between gpsml titles",
1597 # --create-breaks option }}}
1598 diag
("Testing --comment-out-dups option..."); # {{{
1599 testcmd
("../gpst -u no_signal.mayko >nosignal.tmp", # {{{
1606 testcmd
("../gpst nosignal.tmp", # {{{
1608 <?xml version="1.0" encoding="UTF-8"?>
1611 <tp> <time>2002-12-22T21:42:24Z</time> <lat>70.6800486</lat> <lon>23.6746151</lon> </tp>
1612 <tp> <time>2002-12-22T21:42:32Z</time> <lat>70.6799322</lat> <lon>23.6740038</lon> </tp>
1613 <tp> <time>2002-12-22T21:42:54Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </tp>
1614 <desc>20021222T214351-20021222T214354: CO: No signal \x7B\x7B\x7B</desc>
1615 <etp err="desc"> <time>2002-12-22T21:43:51Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
1616 <etp err="desc"> <time>2002-12-22T21:43:52Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
1617 <etp err="desc"> <time>2002-12-22T21:43:54Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
1618 <desc>20021222T214351-20021222T214354: CO: No signal \x7D\x7D\x7D</desc>
1620 <tp> <time>2002-12-22T21:44:45Z</time> <lat>70.6800774</lat> <lon>23.6757566</lon> </tp>
1621 <tp> <time>2002-12-22T21:44:52Z</time> <lat>70.6801502</lat> <lon>23.6753442</lon> </tp>
1622 <tp> <time>2002-12-22T21:45:04Z</time> <lat>70.6801905</lat> <lon>23.6757542</lon> </tp>
1627 "Read output from 'gpst -u *.mayko'",
1631 unlink("nosignal.tmp") || warn("nosignal.tmp: Cannot delete file: $!\n");
1632 testcmd
("../gpst -u no_signal.mayko", # {{{
1634 xmaplog 1.0 Mon Dec 23 02:00:50 2002
1635 1 70.6800486 23.6746151 57.4 0 12/22/2002 21:42:24
1636 1 70.6799322 23.6740038 6.3 0 12/22/2002 21:42:32
1637 1 70.6796266 23.6723991 6.0 0 12/22/2002 21:42:54
1638 # 20021222T214351-20021222T214354: CO: No signal \x7B\x7B\x7B
1639 # 1 70.6796266 23.6723991 0.0 0 12/22/2002 21:43:51
1640 # 1 70.6796266 23.6723991 0.0 0 12/22/2002 21:43:52
1641 # 1 70.6796266 23.6723991 0.0 0 12/22/2002 21:43:54
1642 # 20021222T214351-20021222T214354: CO: No signal \x7D\x7D\x7D
1644 1 70.6800774 23.6757566 5.1 0 12/22/2002 21:44:45
1645 1 70.6801502 23.6753442 4.8 0 12/22/2002 21:44:52
1646 1 70.6801905 23.6757542 2.5 0 12/22/2002 21:45:04
1649 "Read Mayko format with no signal, output old Mayko format",
1653 # --comment-out-dups option }}}
1654 diag
("Testing --verbose option..."); # {{{
1655 # --verbose option }}}
1656 diag
("Testing --version option..."); # {{{
1657 like
(`../gpst --version`, # {{{
1658 qr/^(\$Id: .*? \$\n)+$/s,
1659 '"../gpst --version" - The --version option outputs Id strings',
1663 # --version option }}}
1664 diag
("Testing --strip-whitespace option..."); # {{{
1665 testcmd
("../gpst -w -o gpx pause.gpx", # {{{
1667 $stripped_gpx_header
1670 <trkpt lat="60.425494" lon="5.299534"><ele>25.260</ele><time>2006-05-21T16:49:11Z</time></trkpt>
1671 <trkpt lat="60.425464" lon="5.299610"><ele>24.931</ele><time>2006-05-21T16:49:46Z</time></trkpt>
1672 <trkpt lat="60.425314" lon="5.299694"><ele>27.975</ele><time>2006-05-21T16:52:04Z</time></trkpt>
1673 <trkpt lat="60.425384" lon="5.299741"><ele>31.017</ele><time>2006-05-21T16:56:36Z</time></trkpt>
1674 <trkpt lat="60.425339" lon="5.299958"><ele>30.980</ele><time>2006-05-21T16:56:47Z</time></trkpt>
1675 <trkpt lat="60.425238" lon="5.299640"><ele>30.538</ele><time>2006-05-21T16:56:56Z</time></trkpt>
1676 <trkpt lat="60.425246" lon="5.299686"><ele>30.515</ele><time>2006-05-21T16:57:03Z</time></trkpt>
1677 <trkpt lat="60.425345" lon="5.299773"><ele>31.936</ele><time>2006-05-21T16:59:08Z</time></trkpt>
1678 <trkpt lat="60.425457" lon="5.299419"><ele>31.794</ele><time>2006-05-21T17:00:54Z</time></trkpt>
1684 "Strip whitespace from GPX output",
1688 testcmd
("../gpst -o gpx -w comments.mayko", # {{{
1690 $stripped_gpx_header
1693 <trkpt lat="70.6800486" lon="23.6746151"><time>2002-12-22T21:42:24Z</time></trkpt>
1694 <trkpt lat="70.6799322" lon="23.6740038"><time>2002-12-22T21:42:32Z</time></trkpt>
1695 <trkpt lat="70.6796266" lon="23.6723991"><time>2002-12-22T21:42:54Z</time></trkpt>
1696 <!-- <trkpt lat="70.6796266" lon="23.6723991"><time>2002-12-22T21:43:51Z</time><extensions><error>desc</error></extensions></trkpt> -->
1697 <!-- <trkpt lat="70.6796266" lon="23.6723991"><time>2002-12-22T21:43:52Z</time><extensions><error>desc</error></extensions></trkpt> -->
1698 <!-- <trkpt lat="70.6796266" lon="23.6723991"><time>2002-12-22T21:43:54Z</time><extensions><error>desc</error></extensions></trkpt> -->
1699 <trkpt lat="70.6800774" lon="23.6757566"><time>2002-12-22T21:44:45Z</time></trkpt>
1702 <trkpt lat="70.6801502" lon="23.6753442"><time>2002-12-22T21:44:52Z</time></trkpt>
1703 <trkpt lat="70.6801905" lon="23.6757542"><time>2002-12-22T21:45:04Z</time></trkpt>
1709 "Output whitespace-stripped GPX from Mayko file with commented-out lines",
1713 # --strip-whitespace option }}}
1714 diag
("Testing --double-y-scale option..."); # {{{
1715 testcmd
("../gpst -y -o clean pause.gpx", # {{{
1717 5.299534\t120.850988\t25.260
1718 5.299610\t120.850928\t24.931
1719 5.299694\t120.850628\t27.975
1720 5.299741\t120.850768\t31.017
1721 5.299958\t120.850678\t30.980
1722 5.299640\t120.850476\t30.538
1723 5.299686\t120.850492\t30.515
1724 5.299773\t120.85069\t31.936
1725 5.299419\t120.850914\t31.794
1728 "Double y scale, clean output from gpx format",
1732 testcmd
("../gpst -y -o clean log.dos.mayko", # {{{
1734 8.1225077\t116.3636316\t
1735 8.1253200\t116.3637424\t
1736 8.1266031\t116.3632694\t
1737 8.1284612\t116.3624198\t
1738 8.1293950\t116.362063\t
1739 8.1307400\t116.3619242\t
1742 "Double y scale, clean output from mayko format",
1746 # --double-y-scale option }}}
1747 diag
("Testing --debug option..."); # {{{
1748 # --debug option }}}
1749 diag
("Strip error from Mayko format..."); # {{{
1751 testcmd
("../gpst -o csv date_error.mayko", # {{{
1753 2003-06-13T09:12:36Z\t5.5794667\t60.4280897\t\t
1754 2003-06-13T09:12:38Z\t5.5802255\t60.4281867\t\t
1755 2003-06-13T09:12:41Z\t5.5813636\t60.4283320\t\t
1756 2003-06-13T09:12:42Z\t5.5817430\t60.4283806\t\t
1759 "Strip error from mayko format in csv output",
1763 testcmd
("../gpst -o clean date_error.mayko", # {{{
1765 5.5794667\t60.4280897\t
1766 5.5802255\t60.4281867\t
1767 5.5813636\t60.4283320\t
1768 5.5817430\t60.4283806\t
1771 "Strip error from mayko format in clean output",
1775 testcmd
("../gpst -o gpsml date_error.mayko", # {{{
1777 <?xml version="1.0" encoding="UTF-8"?>
1780 <tp> <time>2003-06-13T09:12:36Z</time> <lat>60.4280897</lat> <lon>5.5794667</lon> </tp>
1781 <tp> <time>2003-06-13T09:12:38Z</time> <lat>60.4281867</lat> <lon>5.5802255</lon> </tp>
1782 <etp err="error"> <time>2037-06-25T17:19:22Z</time> <lat>103.4034054</lat> <lon>129.7271053</lon> </etp>
1783 <tp> <time>2003-06-13T09:12:41Z</time> <lat>60.428332</lat> <lon>5.5813636</lon> </tp>
1784 <tp> <time>2003-06-13T09:12:42Z</time> <lat>60.4283806</lat> <lon>5.581743</lon> </tp>
1789 "Strip error from mayko format in gpsml output",
1793 testcmd
("../gpst -o gpx date_error.mayko", # {{{
1795 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1798 creator="gpst - http://svn.sunbase.org/repos/utils/trunk/src/gpstools/"
1799 xmlns="http://www.topografix.com/GPX/1/1"
1800 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1801 xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
1805 <trkpt lat="60.4280897" lon="5.5794667"> <time>2003-06-13T09:12:36Z</time> </trkpt>
1806 <trkpt lat="60.4281867" lon="5.5802255"> <time>2003-06-13T09:12:38Z</time> </trkpt>
1807 <!-- <trkpt lat="103.4034054" lon="129.7271053"> <time>2037-06-25T17:19:22Z</time> <extensions> <error>error</error> </extensions> </trkpt> -->
1808 <trkpt lat="60.4283320" lon="5.5813636"> <time>2003-06-13T09:12:41Z</time> </trkpt>
1809 <trkpt lat="60.4283806" lon="5.5817430"> <time>2003-06-13T09:12:42Z</time> </trkpt>
1815 "Strip error from mayko format in gpx output",
1819 testcmd
("../gpst -o gpstrans date_error.mayko", # {{{
1821 Format: DMS UTC Offset: 0.00 hrs Datum[100]: WGS 84
1822 T\t06/13/2003 09:12:36\t60\xB025'41.1"\t5\xB034'46.1"
1823 T\t06/13/2003 09:12:38\t60\xB025'41.5"\t5\xB034'48.8"
1824 T\t06/13/2003 09:12:41\t60\xB025'42.0"\t5\xB034'52.9"
1825 T\t06/13/2003 09:12:42\t60\xB025'42.2"\t5\xB034'54.3"
1828 "Strip error from mayko format in gpstrans output",
1832 testcmd
("../gpst -o pgtab date_error.mayko", # {{{
1834 2003-06-13T09:12:36Z\t(60.4280897,5.5794667)\t\\N\t\\N\t\\N\t\\N\t\\N
1835 2003-06-13T09:12:38Z\t(60.4281867,5.5802255)\t\\N\t\\N\t\\N\t\\N\t\\N
1836 2003-06-13T09:12:41Z\t(60.4283320,5.5813636)\t\\N\t\\N\t\\N\t\\N\t\\N
1837 2003-06-13T09:12:42Z\t(60.4283806,5.5817430)\t\\N\t\\N\t\\N\t\\N\t\\N
1840 "Strip error from mayko format in pgtab output",
1844 testcmd
("../gpst -o poscount date_error.mayko", # {{{
1846 5.5802255\t60.4281867\t1
1847 5.5817430\t60.4283806\t1
1848 5.5813636\t60.4283320\t1
1849 5.5794667\t60.4280897\t1
1852 "Strip error from mayko format in poscount output",
1856 testcmd
("../gpst -o xgraph date_error.mayko", # {{{
1858 5.5794667 60.4280897
1859 5.5802255 60.4281867
1860 5.5813636 60.4283320
1861 5.5817430 60.4283806
1864 "Strip error from mayko format in xgraph output",
1868 testcmd
("../gpst -o ygraph date_error.mayko", # {{{
1871 5.5794667 60.4280897
1874 5.5802255 60.4281867
1877 5.5813636 60.4283320
1880 5.5817430 60.4283806
1884 "Strip error from mayko format in ygraph output",
1889 # Strip error from Mayko format }}}
1894 if ($Opt{'all'} || $Opt{'todo'}) {
1895 diag
("Running TODO tests..."); # {{{
1898 local $TODO = "Remove extra \\n in the beginning";
1899 testcmd
("../gpst -o csv multitrack.gpx", # {{{
1901 2003-02-11T23:35:39Z\t-0.1448824\t51.4968266\t\t
1902 2003-02-11T23:35:49Z\t-0.1449938\t51.4968227\t\t
1903 2003-02-11T23:36:14Z\t-0.1453202\t51.4969040\t\t
1905 2003-02-11T23:36:16Z\t-0.1453398\t51.4969214\t\t
1906 2003-02-11T23:36:31Z\t-0.1455514\t51.4969816\t\t
1907 2003-02-11T23:36:43Z\t-0.1457489\t51.4970224\t1000\t
1908 2003-02-11T23:36:50Z\t-0.1457804\t51.4970452\t\t
1910 2003-02-11T23:37:05Z\t-0.1458608\t51.4970680\t\t
1911 2003-02-11T23:37:22Z\t-0.1460047\t51.4971658\t\t
1912 2003-02-11T23:37:36Z\t-0.1461614\t51.4972469\t\t
1914 2003-02-11T23:37:43Z\t-0.1462394\t51.4972731\t\t
1915 2003-02-11T23:38:04Z\t-0.1463232\t51.4973437\t\t
1916 2003-02-11T23:38:28Z\t-0.1462949\t51.4973337\t\t
1917 2003-02-11T23:38:34Z\t-0.1462825\t51.4973218\t\t
1918 2003-02-11T23:38:35Z\t-0.1462732\t51.4973145\t\t
1921 "Output csv format from gpx",
1925 testcmd
("../gpst -o csv pause.gpx", # {{{
1927 2006-05-21 16:49:11\t5.299534\t60.425494\t25.260\t
1928 2006-05-21 16:49:46\t5.299610\t60.425464\t24.931\t
1929 2006-05-21 16:52:04\t5.299694\t60.425314\t27.975\t
1930 2006-05-21 16:56:36\t5.299741\t60.425384\t31.017\t
1931 2006-05-21 16:56:47\t5.299958\t60.425339\t30.980\t
1932 2006-05-21 16:56:56\t5.299640\t60.425238\t30.538\t
1933 2006-05-21 16:57:03\t5.299686\t60.425246\t30.515\t
1934 2006-05-21 16:59:08\t5.299773\t60.425345\t31.936\t
1935 2006-05-21 17:00:54\t5.299419\t60.425457\t31.794\t
1938 "csv format from gpx",
1942 testcmd
("../gpst -e -o csv pause.gpx", # {{{
1944 1148230151\t5.299534\t60.425494\t25.260\t
1945 1148230186\t5.299610\t60.425464\t24.931\t
1946 1148230324\t5.299694\t60.425314\t27.975\t
1947 1148230596\t5.299741\t60.425384\t31.017\t
1948 1148230607\t5.299958\t60.425339\t30.980\t
1949 1148230616\t5.299640\t60.425238\t30.538\t
1950 1148230623\t5.299686\t60.425246\t30.515\t
1951 1148230748\t5.299773\t60.425345\t31.936\t
1952 1148230854\t5.299419\t60.425457\t31.794\t
1955 "csv format with epoch seconds from gpx",
1959 $TODO = "Use gpsml, this Mayko thing is obsolete.";
1960 testcmd
("../gpst -u no_signal.mayko", # {{{
1962 <?xml version="1.0" encoding="UTF-8"?>
1965 <tp> <time>2002-12-22T21:42:24Z</time> <lat>70.6800486</lat> <lon>23.6746151</lon> </tp>
1966 <tp> <time>2002-12-22T21:42:32Z</time> <lat>70.6799322</lat> <lon>23.6740038</lon> </tp>
1967 <tp> <time>2002-12-22T21:42:54Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </tp>
1968 <desc>20021222T214351-20021222T214354: CO: No signal \x7B\x7B\x7B</desc>
1969 <etp err="nosignal"> <time>2002-12-22T21:43:51Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
1970 <etp err="nosignal"> <time>2002-12-22T21:43:52Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
1971 <etp err="nosignal"> <time>2002-12-22T21:43:54Z</time> <lat>70.6796266</lat> <lon>23.6723991</lon> </etp>
1972 <desc>20021222T214351-20021222T214354: CO: No signal \x7D\x7D\x7D</desc>
1974 <tp> <time>2002-12-22T21:44:45Z</time> <lat>70.6800774</lat> <lon>23.6757566</lon> </tp>
1975 <tp> <time>2002-12-22T21:44:52Z</time> <lat>70.6801502</lat> <lon>23.6753442</lon> </tp>
1976 <tp> <time>2002-12-22T21:45:04Z</time> <lat>70.6801905</lat> <lon>23.6757542</lon> </tp>
1981 "Output gpsml from the -u option",
1984 $TODO = "Tweak output";
1985 testcmd
("../gpst -o gpx multitrack-pause.gpsml", # {{{
1986 file_data
("multitrack-pause.gpx"),
1988 "Should be equal to multitrack-pause.gpx",
1993 # list_nearest_waypoints() {{{
1995 like
(list_nearest_waypoints
(60.42541, 5.29959, 3),
1997 "list_nearest_waypoints()"
2005 diag
("Testing finished.");
2009 my ($Cmd, $Exp_stdout, $Exp_stderr, $Desc) = @_;
2010 my $stderr_cmd = "";
2011 my $deb_str = $Opt{'debug'} ?
" --debug" : "";
2018 my $TMP_STDERR = "gpst-stderr.tmp";
2020 if (defined($Exp_stderr) && !length($deb_str)) {
2021 $stderr_cmd = " 2>$TMP_STDERR";
2023 is
(`$Cmd$deb_str$stderr_cmd`, $Exp_stdout, $Txt);
2024 if (defined($Exp_stderr)) {
2025 if (!length($deb_str)) {
2026 is
(file_data
($TMP_STDERR), $Exp_stderr, "$Txt (stderr)");
2027 unlink($TMP_STDERR);
2030 diag
("Warning: stderr not defined for '$Txt'");
2036 # Return file content as a string {{{
2039 if (open(FP
, "<", $File)) {
2040 $Txt = join("", <FP
>);
2050 # Print program version {{{
2051 for (@main::version_array
) {
2059 # Send the help message to stdout {{{
2066 Usage: $progname [options] [file [files [...]]]
2068 Contains tests for the gpst(1) program.
2073 Run all tests, also TODOs.
2077 Run only the TODO tests.
2079 Increase level of verbosity. Can be repeated.
2081 Print version information.
2083 Print debugging messages.
2091 # Print a status message to stderr based on verbosity level {{{
2092 my ($verbose_level, $Txt) = @_;
2094 if ($Opt{'verbose'} >= $verbose_level) {
2095 print(STDERR
"$progname: $Txt\n");
2102 # Plain Old Documentation (POD) {{{
2116 run-tests.pl [options] [file [files [...]]]
2120 Contains tests for the gpst(1) program.
2126 =item B<-a>, B<--all>
2128 Run all tests, also TODOs.
2130 =item B<-h>, B<--help>
2132 Print a brief help summary.
2134 =item B<-t>, B<--todo>
2136 Run only the TODO tests.
2138 =item B<-v>, B<--verbose>
2140 Increase level of verbosity. Can be repeated.
2144 Print version information.
2148 Print debugging messages.
2154 Made by Øyvind A. Holm S<E<lt>sunny@sunbase.orgE<gt>>.
2158 Copyleft © Øyvind A. Holm E<lt>sunny@sunbase.orgE<gt>
2159 This is free software; see the file F<COPYING> for legalese stuff.
2163 This program is free software; you can redistribute it and/or modify it
2164 under the terms of the GNU General Public License as published by the
2165 Free Software Foundation; either version 2 of the License, or (at your
2166 option) any later version.
2168 This program is distributed in the hope that it will be useful, but
2169 WITHOUT ANY WARRANTY; without even the implied warranty of
2170 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2171 See the GNU General Public License for more details.
2173 You should have received a copy of the GNU General Public License along
2174 with this program; if not, write to the Free Software Foundation, Inc.,
2175 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
2185 # vim: set fenc=UTF-8 ft=perl fdm=marker ts=4 sw=4 sts=4 et fo+=w :