summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/crc/crc32.test
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/crc/crc32.test')
-rw-r--r--tcllib/modules/crc/crc32.test222
1 files changed, 222 insertions, 0 deletions
diff --git a/tcllib/modules/crc/crc32.test b/tcllib/modules/crc/crc32.test
new file mode 100644
index 0000000..f2366eb
--- /dev/null
+++ b/tcllib/modules/crc/crc32.test
@@ -0,0 +1,222 @@
+# crc32.test - Copyright (C) 2002 Pat Thoyts <patthoyts@users.sourceforge.net>
+#
+# Tests for the crc32 commands
+#
+# -------------------------------------------------------------------------
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+# -------------------------------------------------------------------------
+# RCS: @(#) $Id: crc32.test,v 1.12 2009/03/04 01:01:42 patthoyts Exp $
+
+# -------------------------------------------------------------------------
+
+source [file join \
+ [file dirname [file dirname [file join [pwd] [info script]]]] \
+ devtools testutilities.tcl]
+
+testsNeedTcl 8.2
+testsNeedTcltest 1.0
+
+testing {
+ useLocal crc32.tcl crc32 ::crc
+}
+
+# -------------------------------------------------------------------------
+
+if {[::crc::LoadAccelerator critcl]} {
+ puts "> critcl based"
+}
+if {[::crc::LoadAccelerator trf]} {
+ puts "> Trf based"
+}
+puts "> pure Tcl"
+
+# -------------------------------------------------------------------------
+# Handle multiple implementation testing
+#
+
+array set preserve [array get ::crc::accel]
+
+proc implementations {} {
+ variable ::crc::accel
+ foreach {a v} [array get accel] {if {$v} {lappend r $a}}
+ lappend r tcl; set r
+}
+
+proc select_implementation {impl} {
+ variable ::crc::accel
+ foreach e [array names accel] { set accel($e) 0 }
+ if {[string compare "tcl" $impl] != 0} {
+ set accel($impl) 1
+ }
+}
+
+proc reset_implementation {} {
+ variable ::crc::accel
+ array set accel [array get ::preserve]
+}
+
+# -------------------------------------------------------------------------
+
+test crc32-1.0 {crc32 with no parameters } {
+ catch {::crc::crc32} result
+ string match "wrong # args: *" $result
+} {1}
+
+# -------------------------------------------------------------------------
+
+set tests {
+ 1 ""
+ "0"
+ 2 "a"
+ "3904355907"
+ 3 "abc"
+ "891568578"
+ 4 "message digest"
+ "538287487"
+ 5 "abcdefghijklmnopqrstuvwxyz"
+ "1277644989"
+ 6 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+ "532866770"
+ 7 "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+ "2091469426"
+ 8 "\uFFFE\u0000\u0001\u0002"
+ "2968055525"
+ 9 "-"
+ "2547889144"
+ 10 "--"
+ "606868581"
+}
+foreach impl [implementations] {
+ select_implementation $impl
+ foreach {n msg expected} $tests {
+ test crc32-$impl-2.$n "crc32 as unsigned integer ($impl)" {
+ list [catch {::crc::crc32 $msg} err] $err
+ } [list 0 $expected]
+ }
+ reset_implementation
+}
+
+# -------------------------------------------------------------------------
+
+set tests {
+ 1 ""
+ "0x0"
+ 2 "a"
+ "0xE8B7BE43"
+ 3 "abc"
+ "0x352441C2"
+ 4 "message digest"
+ "0x20159D7F"
+ 5 "abcdefghijklmnopqrstuvwxyz"
+ "0x4C2750BD"
+ 6 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+ "0x1FC2E6D2"
+ 7 "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+ "0x7CA94A72"
+ 8 "\uFFFE\u0000\u0001\u0002"
+ "0xB0E8EEE5"
+ 9 "-"
+ "0x97DDB3F8"
+ 10 "--"
+ "0x242C1465"
+}
+
+foreach impl [implementations] {
+ select_implementation $impl
+ foreach {n msg expected} $tests {
+ test crc32-$impl-3.$n "crc32 as hexadecimal string ($impl)" {
+ list [catch {::crc::crc32 -format 0x%X $msg} err] $err
+ } [list 0 $expected]
+ }
+ reset_implementation
+}
+
+# -------------------------------------------------------------------------
+
+set crc::testfile [info script]
+
+proc crc::loaddata {filename} {
+ set f [open $filename r]
+ fconfigure $f -translation binary
+ set data [read $f]
+ close $f
+ return $data
+}
+
+foreach impl [implementations] {
+ select_implementation $impl
+ test crc32-$impl-4.0 "crc32 file option ($impl)" {
+ set r1 [::crc::crc32 -file $crc::testfile]
+ set r2 [::crc::crc32 [crc::loaddata $crc::testfile]]
+ if {$r1 != $r2} {
+ set r "differing results: $r1 != $r2"
+ } else {
+ set r ok
+ }
+ } {ok}
+ reset_implementation
+}
+
+# -------------------------------------------------------------------------
+
+set tests {
+ 1 0 ""
+ "4294967295"
+ 2 1 ""
+ "4294967294"
+ 3 0 "Hello, World!"
+ "482441901"
+ 4 1 "Hello, World!"
+ "3243746088"
+ 5 0 "-"
+ "3122701194"
+}
+foreach impl [implementations] {
+ select_implementation $impl
+ foreach {n seed msg expected} $tests {
+ test crc32-$impl-5.$n "crc32 initial seed option ($impl)" {
+ list [catch {::crc::crc32 -seed $seed $msg} err] $err
+ } [list 0 $expected]
+ }
+ reset_implementation
+}
+
+# -------------------------------------------------------------------------
+
+set tests {
+ 1 "a" "bc"
+ "891568578"
+ 2 "message" " digest"
+ "538287487"
+ 3 "abcdefghijkl" "mnopqrstuvwxyz"
+ "1277644989"
+ 4 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678" "9"
+ "532866770"
+ 5 "1234567890"
+ "1234567890123456789012345678901234567890123456789012345678901234567890"
+ "2091469426"
+ 6 "\uFFFE\u0000" "\u0001\u0002"
+ "2968055525"
+}
+foreach impl [implementations] {
+ select_implementation $impl
+ foreach {n msgA msgB expected} $tests {
+ test crc32-$impl-6.$n "crc32 using -seed ($impl)" {
+ list [catch {
+ ::crc::crc32 -seed [expr {[::crc::crc32 $msgA] ^ 0xffffffff}] $msgB
+ } err] $err
+ } [list 0 $expected]
+ }
+ reset_implementation
+}
+
+# -------------------------------------------------------------------------
+
+catch {unset crc::filename}
+testsuiteCleanup
+
+# Local Variables:
+# mode: tcl
+# indent-tabs-mode: nil
+# End: