<pre style='margin:0'>
Ryan Schmidt (ryandesign) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/b0dc49a18100050fd55c7bd2e3e99e465f7345e5">https://github.com/macports/macports-base/commit/b0dc49a18100050fd55c7bd2e3e99e465f7345e5</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new b0dc49a1 tests: Add modeline and fix whitespace
</span>b0dc49a1 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit b0dc49a18100050fd55c7bd2e3e99e465f7345e5
</span>Author: Ryan Schmidt <ryandesign@macports.org>
AuthorDate: Tue Jun 16 23:36:44 2020 -0500

<span style='display:block; white-space:pre;color:#404040;'>    tests: Add modeline and fix whitespace
</span>---
 src/pextlib1.0/tests/checksums.tcl   |  98 +++----
 src/pextlib1.0/tests/curl.tcl        |  96 +++----
 src/pextlib1.0/tests/filemap.tcl     | 492 ++++++++++++++++++-----------------
 src/pextlib1.0/tests/fs-traverse.tcl |  52 ++--
 src/pextlib1.0/tests/symlink.tcl     |  16 +-
 src/pextlib1.0/tests/system.tcl      |   2 +
 src/pextlib1.0/tests/unsetenv.tcl    |   2 +
 src/pextlib1.0/tests/vercomp.tcl     |  76 +++---
 8 files changed, 425 insertions(+), 409 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/tests/checksums.tcl b/src/pextlib1.0/tests/checksums.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index b39d1f57..a069644a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/tests/checksums.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/tests/checksums.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,57 +1,59 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Test file for Pextlib's md5 and sha1 commands.
 # Requires r/w access to /tmp/
 # Syntax:
 # tclsh checksums.tcl <Pextlib name>
 
 proc main {pextlibname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        load $pextlibname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   encoding system utf-8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set testfile "/tmp/macports-pextlib-testchecksums"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   file delete -force $testfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # create a dummy file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set chan [open $testfile w]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan "Article premier"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan "  Tous les êtres humains naissent libres et égaux en dignité "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " et en droits. Ils sont doués de raison et de conscience et "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " doivent agir les uns envers les autres dans un esprit de "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " fraternité."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan "Article 2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan "  Chacun peut se prévaloir de tous les droits et de toutes les "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " libertés proclamés dans la présente Déclaration, sans "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " distinction aucune, notamment de race, de couleur, de sexe, "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " de langue, de religion, d'opinion politique ou de toute autre "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " opinion, d'origine nationale ou sociale, de fortune, de "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " naissance ou de toute autre situation."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan "  De plus, il ne sera fait aucune distinction fondée sur le "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " statut politique, juridique ou international du pays ou du "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " territoire dont une personne est ressortissante, que ce pays "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " ou territoire soit indépendant, sous tutelle, non autonome ou "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan " soumis à une limitation quelconque de souveraineté."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   close $chan
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # checksum the file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[md5 file $testfile] != "91d3ef5cd86741957b0b5d8f8911166d"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[md5 file $testfile] != "91d3ef5cd86741957b0b5d8f8911166d"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[sha1 file $testfile] != "a40f8539f217a0032d194c3a8c42cc832b6379cf"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[sha1 file $testfile] != "a40f8539f217a0032d194c3a8c42cc832b6379cf"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[rmd160 file $testfile] != "b654ecbdced69aba8a4ea8d6824dd1ac103b3116"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[rmd160 file $testfile] != "b654ecbdced69aba8a4ea8d6824dd1ac103b3116"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[sha256 file $testfile] != "424359e1002a1d117f12f95346a81987037b3fde60a564a7aacb48c65a518fe5"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[sha256 file $testfile] != "424359e1002a1d117f12f95346a81987037b3fde60a564a7aacb48c65a518fe5"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # delete the file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   file delete -force $testfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    load $pextlibname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    encoding system utf-8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set testfile "/tmp/macports-pextlib-testchecksums"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file delete -force $testfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # create a dummy file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set chan [open $testfile w]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan "Article premier"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan "  Tous les êtres humains naissent libres et égaux en dignité "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " et en droits. Ils sont doués de raison et de conscience et "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " doivent agir les uns envers les autres dans un esprit de "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " fraternité."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan "Article 2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan "  Chacun peut se prévaloir de tous les droits et de toutes les "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " libertés proclamés dans la présente Déclaration, sans "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " distinction aucune, notamment de race, de couleur, de sexe, "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " de langue, de religion, d'opinion politique ou de toute autre "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " opinion, d'origine nationale ou sociale, de fortune, de "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " naissance ou de toute autre situation."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan "  De plus, il ne sera fait aucune distinction fondée sur le "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " statut politique, juridique ou international du pays ou du "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " territoire dont une personne est ressortissante, que ce pays "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " ou territoire soit indépendant, sous tutelle, non autonome ou "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chan " soumis à une limitation quelconque de souveraineté."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    close $chan
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # checksum the file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[md5 file $testfile] != "91d3ef5cd86741957b0b5d8f8911166d"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[md5 file $testfile] != "91d3ef5cd86741957b0b5d8f8911166d"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[sha1 file $testfile] != "a40f8539f217a0032d194c3a8c42cc832b6379cf"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[sha1 file $testfile] != "a40f8539f217a0032d194c3a8c42cc832b6379cf"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[rmd160 file $testfile] != "b654ecbdced69aba8a4ea8d6824dd1ac103b3116"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[rmd160 file $testfile] != "b654ecbdced69aba8a4ea8d6824dd1ac103b3116"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[sha256 file $testfile] != "424359e1002a1d117f12f95346a81987037b3fde60a564a7aacb48c65a518fe5"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[sha256 file $testfile] != "424359e1002a1d117f12f95346a81987037b3fde60a564a7aacb48c65a518fe5"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # delete the file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file delete -force $testfile
</span> }
 
 main $argv
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/tests/curl.tcl b/src/pextlib1.0/tests/curl.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index def4a625..01fd01c4 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/tests/curl.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/tests/curl.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,61 +1,63 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Test file for Pextlib's curl.
 # Syntax:
 # tclsh curl.tcl <Pextlib name>
 
 proc main {pextlibname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        load $pextlibname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set tempfile /tmp/macports-pextlib-testcurl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # download a dummy file over HTTP.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set dummyfile http://distfiles.macports.org/MacPorts/MacPorts-2.6.2.tar.gz.asc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   curl fetch $dummyfile $tempfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check the md5 sum of the file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   test "md5sum" {[md5 file $tempfile] == "41023b6070d3dda3b5d34b7e773b40fc"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check we indeed get a 404 a dummy file over HTTP.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   test "dummy404" {[catch {curl fetch $dummyfile/404 $tempfile}]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check the modification date of the dummy file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   test "mtime1" {[curl isnewer $dummyfile [clock scan 2019-10-20Z]]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   test "mtime2" {![curl isnewer $dummyfile [clock scan 2019-10-21Z]]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # use --disable-epsv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #curl fetch --disable-epsv ftp://ftp.cup.hp.com/dist/networking/benchmarks/netperf/archive/netperf-2.2pl5.tar.gz $tempfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #test {[md5 file $tempfile] == "a4b0f4a5fbd8bec23002ad8023e01729"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # use -u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # This URL does not work anymore, disabled the test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #curl fetch -u "I accept www.opensource.org/licenses/cpl:." http://www.research.att.com/~gsf/download/tgz/sfio.2005-02-01.tgz $tempfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #test {[md5 file $tempfile] == "48f45c7c77c23ab0ccca48c22b3870de"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   curl fetch --enable-compression https://www.whatsmyip.org/http-compression-test/ $tempfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   grepper $tempfile {gz_yes}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   curl fetch https://www.whatsmyip.org/http-compression-test/ $tempfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   grepper $tempfile {gz_no}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   file delete -force $tempfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    load $pextlibname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set tempfile /tmp/macports-pextlib-testcurl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # download a dummy file over HTTP.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set dummyfile http://distfiles.macports.org/MacPorts/MacPorts-2.6.2.tar.gz.asc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    curl fetch $dummyfile $tempfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # check the md5 sum of the file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test "md5sum" {[md5 file $tempfile] == "41023b6070d3dda3b5d34b7e773b40fc"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # check we indeed get a 404 a dummy file over HTTP.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test "dummy404" {[catch {curl fetch $dummyfile/404 $tempfile}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # check the modification date of the dummy file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test "mtime1" {[curl isnewer $dummyfile [clock scan 2019-10-20Z]]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test "mtime2" {![curl isnewer $dummyfile [clock scan 2019-10-21Z]]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # use --disable-epsv
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #curl fetch --disable-epsv ftp://ftp.cup.hp.com/dist/networking/benchmarks/netperf/archive/netperf-2.2pl5.tar.gz $tempfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #test {[md5 file $tempfile] == "a4b0f4a5fbd8bec23002ad8023e01729"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # use -u
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # This URL does not work anymore, disabled the test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #curl fetch -u "I accept www.opensource.org/licenses/cpl:." http://www.research.att.com/~gsf/download/tgz/sfio.2005-02-01.tgz $tempfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #test {[md5 file $tempfile] == "48f45c7c77c23ab0ccca48c22b3870de"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    curl fetch --enable-compression https://www.whatsmyip.org/http-compression-test/ $tempfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    grepper $tempfile {gz_yes}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    curl fetch https://www.whatsmyip.org/http-compression-test/ $tempfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    grepper $tempfile {gz_no}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file delete -force $tempfile
</span> }
 
 proc test {test_name args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {uplevel 1 expr $args} result] || !$result} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts "test $test_name failed: [uplevel 1 subst -nocommands $args] == $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {uplevel 1 expr $args} result] || !$result} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts "test $test_name failed: [uplevel 1 subst -nocommands $args] == $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> }
 
 proc grepper {filepath regex} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set hasMatch 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set fd [open $filepath]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   while {[gets $fd line] != -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if {[regexp $regex $line all]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   set hasMatch 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   close $fd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   test "grepper $regex" {$hasMatch == 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set hasMatch 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set fd [open $filepath]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    while {[gets $fd line] != -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[regexp $regex $line all]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set hasMatch 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    close $fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test "grepper $regex" {$hasMatch == 1}
</span> }
 
 main $argv
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/tests/filemap.tcl b/src/pextlib1.0/tests/filemap.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index c997b09c..47405141 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/tests/filemap.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/tests/filemap.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,254 +1,256 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Test file for Pextlib's filemap.
 # Requires r/w access to /tmp/
 # Syntax:
 # tclsh filemap.tcl <Pextlib name>
 
 proc main {pextlibname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        load $pextlibname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   file delete -force "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap open testmap "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap exists testmap "/foo/bar"]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap exists testmap "/foo/bar"]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/foo/bar" "foobar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {![filemap exists testmap "/foo/bar"]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {![filemap exists testmap "/foo/bar"]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap get testmap "/foo/bar"] ne "foobar"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap get testmap "/foo/bar"] ne "foobar"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap unset testmap "/foo/bar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap exists testmap "/foo/bar"]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap exists testmap "/foo/bar"] (2)}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/foo/bar" "foobar-1"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/foo/foo" "foobar-2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/bar/foo" "foobar-3"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/foobar" "foobar-4"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap get testmap "/foo/foo"] != "foobar-2"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap get testmap "/foo/foo"] != "foobar-2"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts [filemap get testmap "/foo/foo"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap save testmap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/foo/bar-1" "somevalue"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/foo/bar-2" "somevalue"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/bar/bar-3" "somevalue"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set theList [filemap list testmap "somevalue"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[llength $theList] != 3} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[llength $theList] != 3}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[lindex $theList 0] != "/bar/bar-3"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[lindex $theList 2] != "/bar/bar-3"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[lindex $theList 1] != "/foo/bar-1"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[lindex $theList 0] != "/foo/bar-1"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[lindex $theList 2] != "/foo/bar-2"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[lindex $theList 1] != "/foo/bar-2"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/a/b/c/d/e/f/g/foo.h" "foo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/a/b/c/d/e/f/g/foo/bar" "foo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # add 1000 subnodes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           filemap set testmap "/many/foo-$index" "foo-$index"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # add another 1000 subnodes, lexicographically before.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           filemap set testmap "/many/bar-$index" "foo-$index"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # save again
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap save testmap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # add some value that won't be saved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap "/unsaved" "unsaved"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # revert the map.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap revert testmap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap close testmap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap open testmap2 "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap exists testmap2 "/foo/foobar"]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap exists testmap2 "/foo/foobar"]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {![filemap exists testmap2 "/foo/bar"]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {![filemap exists testmap2 "/foo/bar"]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap get testmap2 "/foo/bar"] != "foobar-1"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap get testmap2 "/foo/bar"] != "foobar-1"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts [filemap get testmap2 "/foo/bar"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap get testmap2 "/foo/foo"] != "foobar-2"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap get testmap2 "/foo/foo"] != "foobar-2"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts [filemap get testmap2 "/foo/foo"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap get testmap2 "/bar/foo"] != "foobar-3"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap get testmap2 "/bar/foo"] != "foobar-3"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts [filemap get testmap2 "/bar/foo"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap get testmap2 "/foobar"] != "foobar-4"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap get testmap2 "/foobar"] != "foobar-4"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts [filemap get testmap2 "/foobar"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap get testmap2 "/bar/bar-3"] ne "somevalue"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap get testmap2 "/bar/bar-3"] ne "somevalue"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts [filemap get testmap2 "/bar/bar-3"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set theList [filemap list testmap2 "somevalue"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[llength $theList] != 3} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[llength $theList] != 3}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[lindex $theList 0] != "/bar/bar-3"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[lindex $theList 2] != "/bar/bar-3"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[lindex $theList 1] != "/foo/bar-1"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[lindex $theList 0] != "/foo/bar-1"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[lindex $theList 2] != "/foo/bar-2"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[lindex $theList 1] != "/foo/bar-2"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check the 1000 subnodes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if {[filemap get testmap2 "/many/foo-$index"] != "foo-$index"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts {[filemap get testmap2 "/many/foo-$index"] != "foo-$index"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts $index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts [filemap get testmap2 "/many/foo-$index"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if {[filemap get testmap2 "/many/bar-$index"] != "foo-$index"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts {[filemap get testmap2 "/many/bar-$index"] != "foo-$index"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts $index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts [filemap get testmap2 "/many/bar-$index"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap exists testmap2 "/unsaved"]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap exists testmap2 "/unsaved"]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap close testmap2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # open it again, r/o
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap open testmap3 "/tmp/macports-pextlib-testmap" readonly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # open it again, r/w
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap open testmap4 "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # put a key (r/w copy)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap4 "/rw/foobar" "foobar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # save the r/w copy.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap save testmap4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check the key is not there (r/o copy)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # (remark: the r/o copy uses the old version)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap exists testmap3 "/rw/foobar"]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap exists testmap3 "/rw/foobar"]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # reload the r/o copy.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap revert testmap3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check the key is here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {![filemap exists testmap3 "/rw/foobar"]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {![filemap exists testmap3 "/rw/foobar"]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap close testmap4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap close testmap3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # concurrency bug test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap open testmap7 "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap set testmap7 "/rw/foobar" "foobar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap save testmap7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap close testmap7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap open testmap6 "/tmp/macports-pextlib-testmap" readonly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap open testmap8 "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap unset testmap8 "/rw/foobar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap save testmap8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap close testmap8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap close testmap6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap open testmap9 "/tmp/macports-pextlib-testmap" readonly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[filemap exists testmap9 "/rw/foobar"]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[filemap exists testmap9 "/rw/foobar"]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap close testmap9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   file delete -force "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # delete the lock file as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   file delete -force "/tmp/macports-pextlib-testmap.lock"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # create a RAM-based map.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap create testmap5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # add 1000 subnodes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           filemap set testmap5 "/many/foo-$index" "foo-$index"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # add another 1000 subnodes, lexicographically before.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           filemap set testmap5 "/many/bar-$index" "foo-$index"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check the 1000 subnodes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if {[filemap get testmap5 "/many/foo-$index"] != "foo-$index"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts {[filemap get testmap5 "/many/foo-$index"] != "foo-$index"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts $index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts [filemap get testmap5 "/many/foo-$index"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if {[filemap get testmap5 "/many/bar-$index"] != "foo-$index"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts {[filemap get testmap5 "/many/bar-$index"] != "foo-$index"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts $index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   puts [filemap get testmap5 "/many/bar-$index"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # close the virtual filemap.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   filemap close testmap5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    load $pextlibname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file delete -force "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap open testmap "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap exists testmap "/foo/bar"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap exists testmap "/foo/bar"]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/foo/bar" "foobar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![filemap exists testmap "/foo/bar"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {![filemap exists testmap "/foo/bar"]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap get testmap "/foo/bar"] ne "foobar"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap get testmap "/foo/bar"] ne "foobar"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap unset testmap "/foo/bar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap exists testmap "/foo/bar"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap exists testmap "/foo/bar"] (2)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/foo/bar" "foobar-1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/foo/foo" "foobar-2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/bar/foo" "foobar-3"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/foobar" "foobar-4"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap get testmap "/foo/foo"] != "foobar-2"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap get testmap "/foo/foo"] != "foobar-2"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts [filemap get testmap "/foo/foo"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap save testmap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/foo/bar-1" "somevalue"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/foo/bar-2" "somevalue"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/bar/bar-3" "somevalue"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set theList [filemap list testmap "somevalue"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $theList] != 3} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[llength $theList] != 3}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lindex $theList 0] != "/bar/bar-3"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[lindex $theList 2] != "/bar/bar-3"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lindex $theList 1] != "/foo/bar-1"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[lindex $theList 0] != "/foo/bar-1"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lindex $theList 2] != "/foo/bar-2"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[lindex $theList 1] != "/foo/bar-2"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/a/b/c/d/e/f/g/foo.h" "foo"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/a/b/c/d/e/f/g/foo/bar" "foo"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # add 1000 subnodes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        filemap set testmap "/many/foo-$index" "foo-$index"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # add another 1000 subnodes, lexicographically before.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        filemap set testmap "/many/bar-$index" "foo-$index"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # save again
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap save testmap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # add some value that won't be saved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap "/unsaved" "unsaved"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # revert the map.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap revert testmap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap close testmap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap open testmap2 "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap exists testmap2 "/foo/foobar"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap exists testmap2 "/foo/foobar"]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![filemap exists testmap2 "/foo/bar"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {![filemap exists testmap2 "/foo/bar"]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap get testmap2 "/foo/bar"] != "foobar-1"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap get testmap2 "/foo/bar"] != "foobar-1"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts [filemap get testmap2 "/foo/bar"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap get testmap2 "/foo/foo"] != "foobar-2"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap get testmap2 "/foo/foo"] != "foobar-2"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts [filemap get testmap2 "/foo/foo"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap get testmap2 "/bar/foo"] != "foobar-3"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap get testmap2 "/bar/foo"] != "foobar-3"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts [filemap get testmap2 "/bar/foo"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap get testmap2 "/foobar"] != "foobar-4"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap get testmap2 "/foobar"] != "foobar-4"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts [filemap get testmap2 "/foobar"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap get testmap2 "/bar/bar-3"] ne "somevalue"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap get testmap2 "/bar/bar-3"] ne "somevalue"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts [filemap get testmap2 "/bar/bar-3"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set theList [filemap list testmap2 "somevalue"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $theList] != 3} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[llength $theList] != 3}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lindex $theList 0] != "/bar/bar-3"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[lindex $theList 2] != "/bar/bar-3"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lindex $theList 1] != "/foo/bar-1"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[lindex $theList 0] != "/foo/bar-1"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lindex $theList 2] != "/foo/bar-2"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[lindex $theList 1] != "/foo/bar-2"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # check the 1000 subnodes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[filemap get testmap2 "/many/foo-$index"] != "foo-$index"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts {[filemap get testmap2 "/many/foo-$index"] != "foo-$index"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts [filemap get testmap2 "/many/foo-$index"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[filemap get testmap2 "/many/bar-$index"] != "foo-$index"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts {[filemap get testmap2 "/many/bar-$index"] != "foo-$index"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts [filemap get testmap2 "/many/bar-$index"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap exists testmap2 "/unsaved"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap exists testmap2 "/unsaved"]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap close testmap2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # open it again, r/o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap open testmap3 "/tmp/macports-pextlib-testmap" readonly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # open it again, r/w
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap open testmap4 "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # put a key (r/w copy)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap4 "/rw/foobar" "foobar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # save the r/w copy.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap save testmap4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # check the key is not there (r/o copy)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # (remark: the r/o copy uses the old version)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap exists testmap3 "/rw/foobar"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap exists testmap3 "/rw/foobar"]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # reload the r/o copy.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap revert testmap3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # check the key is here.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![filemap exists testmap3 "/rw/foobar"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {![filemap exists testmap3 "/rw/foobar"]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap close testmap4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap close testmap3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # concurrency bug test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap open testmap7 "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap set testmap7 "/rw/foobar" "foobar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap save testmap7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap close testmap7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap open testmap6 "/tmp/macports-pextlib-testmap" readonly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap open testmap8 "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap unset testmap8 "/rw/foobar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap save testmap8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap close testmap8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap close testmap6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap open testmap9 "/tmp/macports-pextlib-testmap" readonly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[filemap exists testmap9 "/rw/foobar"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[filemap exists testmap9 "/rw/foobar"]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap close testmap9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file delete -force "/tmp/macports-pextlib-testmap"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # delete the lock file as well.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file delete -force "/tmp/macports-pextlib-testmap.lock"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # create a RAM-based map.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap create testmap5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # add 1000 subnodes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        filemap set testmap5 "/many/foo-$index" "foo-$index"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # add another 1000 subnodes, lexicographically before.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        filemap set testmap5 "/many/bar-$index" "foo-$index"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # check the 1000 subnodes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    for {set index 0} {$index < 1000} {incr index} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[filemap get testmap5 "/many/foo-$index"] != "foo-$index"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts {[filemap get testmap5 "/many/foo-$index"] != "foo-$index"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts [filemap get testmap5 "/many/foo-$index"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[filemap get testmap5 "/many/bar-$index"] != "foo-$index"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts {[filemap get testmap5 "/many/bar-$index"] != "foo-$index"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts [filemap get testmap5 "/many/bar-$index"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # close the virtual filemap.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filemap close testmap5
</span> }
 
 main $argv
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/tests/fs-traverse.tcl b/src/pextlib1.0/tests/fs-traverse.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 37569b95..955209b2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/tests/fs-traverse.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/tests/fs-traverse.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,3 +1,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Test file for Pextlib's fs-traverse
 # Requires r/w access to /tmp
 # Syntax:
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -361,31 +363,31 @@ proc setup_trees {root} {
</span>     "
 
     set trees(6) "
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        .         directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a         directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/a       file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/b       file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/c       directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/c/a     {link ../d}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/c/b     file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/c/c     directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/c/d     file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/d       directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/d/a     file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/d/b     {link ../../b/a}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/d/c     directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/d/d     file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        a/e       file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b         directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b/a       directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b/a/a     file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b/a/b     file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b/a/c     file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b/b       directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b/c       directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b/c/a     file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b/c/b     file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        b/c/c     file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        .               directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a               directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/a             file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/b             file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/c             directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/c/a           {link ../d}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/c/b           file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/c/c           directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/c/d           file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/d             directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/d/a           file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/d/b           {link ../../b/a}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/d/c           directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/d/d           file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        a/e             file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b               directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b/a             directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b/a/a           file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b/a/b           file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b/a/c           file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b/b             directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b/c             directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b/c/a           file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b/c/b           file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        b/c/c           file
</span>     "
 }
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/tests/symlink.tcl b/src/pextlib1.0/tests/symlink.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 580f801e..fa32b8af 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/tests/symlink.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/tests/symlink.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,3 +1,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Test file for Pextlib's symlink.
 # Requires r/w access to /tmp/
 # Syntax:
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,15 +7,15 @@
</span> 
 proc main {pextlibname} {
     load $pextlibname
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     set root "/tmp/macports-pextlib-symlink"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     file delete -force $root
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     file mkdir $root
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     symlink foobar $root/test
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     if {[catch {file type $root/test}] || [file type $root/test] ne "link" || [file readlink $root/test] ne "foobar"} {
         set message "symlink failed: "
         if {[catch {file type $root/test}]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -26,12 +28,12 @@ proc main {pextlibname} {
</span>         file delete -force $root
         error $message
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     if {![catch {symlink barfoo $root/test}]} {
         file delete -force $root
         error "symlink did not raise error when file already exists"
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     file delete -force $root
 }
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/tests/system.tcl b/src/pextlib1.0/tests/system.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 7a3b2fcd..eabe57f6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/tests/system.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/tests/system.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,3 +1,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Test file for Pextlib's system command.
 # Syntax:
 # tclsh system.tcl <Pextlib name>
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/tests/unsetenv.tcl b/src/pextlib1.0/tests/unsetenv.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 2440012c..dc664d99 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/tests/unsetenv.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/tests/unsetenv.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,3 +1,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Test file for Pextlib's unsetenv.
 # tclsh <Pextlib name>
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/tests/vercomp.tcl b/src/pextlib1.0/tests/vercomp.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index ad464121..e4b23145 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/tests/vercomp.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/tests/vercomp.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,47 +1,49 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Test file for Pextlib's vercmp command.
 # Syntax:
 # tclsh vercomp.tcl <Pextlib name>
 
 proc main {pextlibname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        load $pextlibname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # 2.0 > 1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[vercmp 2.0 1.0] <= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[vercmp 2.0 1.0] <= 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # 1.0 = 1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[vercmp 1.0 1.0] != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[vercmp 1.0 1.0] != 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # 1.0 < 2.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[vercmp 1.0 2.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[vercmp 1.0 2.0] >= 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    load $pextlibname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # 2.0 > 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp 2.0 1.0] <= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[vercmp 2.0 1.0] <= 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # 1.0 = 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp 1.0 1.0] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[vercmp 1.0 1.0] != 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # 1.0 < 2.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp 1.0 2.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[vercmp 1.0 2.0] >= 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # def > abc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[vercmp def abc] <= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[vercmp def abc] <= 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # abc = abc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[vercmp abc abc] != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[vercmp abc abc] != 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # abc < def
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[vercmp abc def] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[vercmp abc def] >= 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # def > abc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp def abc] <= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[vercmp def abc] <= 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # abc = abc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp abc abc] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[vercmp abc abc] != 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # abc < def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp abc def] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[vercmp abc def] >= 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # a < 1 (digits beats alpha)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[vercmp a 1] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           puts {[vercmp a 1] >= 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # a < 1 (digits beats alpha)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp a 1] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts {[vercmp a 1] >= 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> }
 
 main $argv
</pre><pre style='margin:0'>

</pre>