]> gitweb.factorcode.org Git - factor.git/commitdiff
add adler-32 checksum, tests, and docs
authorDoug Coleman <doug.coleman@gmail.com>
Fri, 9 May 2008 00:36:44 +0000 (19:36 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Fri, 9 May 2008 00:36:44 +0000 (19:36 -0500)
extra/checksums/adler-32/adler-32-docs.factor [new file with mode: 0755]
extra/checksums/adler-32/adler-32-tests.factor [new file with mode: 0644]
extra/checksums/adler-32/adler-32.factor [new file with mode: 0644]
extra/checksums/adler-32/authors.txt [new file with mode: 0644]

diff --git a/extra/checksums/adler-32/adler-32-docs.factor b/extra/checksums/adler-32/adler-32-docs.factor
new file mode 100755 (executable)
index 0000000..b7400cb
--- /dev/null
@@ -0,0 +1,11 @@
+USING: help.markup help.syntax ;
+IN: checksums.adler-32
+
+HELP: adler-32
+{ $description "Adler-32 checksum algorithm." } ;
+
+ARTICLE: "checksums.adler-32" "Adler-32 checksum"
+"The Adler-32 checksum algorithm implements simple and fast checksum. It is used in zlib and rsync."
+{ $subsection adler-32 } ;
+
+ABOUT: "checksums.adler-32"
diff --git a/extra/checksums/adler-32/adler-32-tests.factor b/extra/checksums/adler-32/adler-32-tests.factor
new file mode 100644 (file)
index 0000000..ccee74b
--- /dev/null
@@ -0,0 +1,5 @@
+USING: checksums.adler-32 checksums strings tools.test ;
+IN: checksums.adler-32.tests
+
+[ 300286872 ] [ "Wikipedia" adler-32 checksum-bytes ] unit-test
+[ 2679885283 ] [ 10000 CHAR: a <string> adler-32 checksum-bytes ] unit-test
diff --git a/extra/checksums/adler-32/adler-32.factor b/extra/checksums/adler-32/adler-32.factor
new file mode 100644 (file)
index 0000000..1be4bfb
--- /dev/null
@@ -0,0 +1,15 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: checksums classes.singleton kernel math math.ranges
+math.vectors sequences ;
+IN: checksums.adler-32
+
+SINGLETON: adler-32
+
+: adler-32-modulus 65521 ; inline
+
+M: adler-32 checksum-bytes ( bytes checksum -- value )
+    drop
+    [ sum 1+ ]
+    [ [ dup length [1,b] <reversed> v. ] [ length ] bi + ] bi
+    [ adler-32-modulus mod ] bi@ 16 shift bitor ;
diff --git a/extra/checksums/adler-32/authors.txt b/extra/checksums/adler-32/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman