package batteries
A community-maintained standard library extension
Install
Dune Dependency
Authors
Maintainers
Sources
v3.9.0.tar.gz
md5=ea26b5c72e6731e59d856626049cca4d
sha512=55975b62c26f6db77433a3ac31f97af609fc6789bb62ac38b267249c78fd44ff37fe81901f1cf560857b9493a6046dd37b0d1c0234c66bd59e52843aac3ce6cb
doc/src/batteries.unthreaded/batDigest.ml.html
Source file batDigest.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
(* * BatDigest - Additional functions for message digests * Copyright (C) 1996 Xavier Leroy, INRIA Rocquencourt * Copyright (C) 2009 David Teller, LIFO, Universite d'Orleans * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) include Digest (*$inject ##V>=5##module Pervasives = Stdlib *) (*Imported from [Digest.input] -- the functions used take advantage of [BatIO.input] rather than [in_channel]*) let input inp = BatIO.really_nread inp 16 (*$T let digest = Digest.string "azerty" in \ input (BatIO.input_string digest) = digest *) let output = BatIO.nwrite let print oc t = BatIO.nwrite oc (to_hex t) let channel inp len = (*TODO: Make efficient*) if len >= 0 then Digest.string (BatIO.really_nread inp len) else Digest.channel (BatIO.to_input_channel inp) len (*$T let digest = Digest.string "azerty" in \ channel (BatIO.input_string ("azertyuiop")) 6 = digest *) (*1. Compute the digest of this file using Legacy.Digest*) (*2. Compute the digest of this file using Batteries.Digest*) (*3. Compare*) (*$R channel let legacy_result () = let inp = Legacy.open_in_bin Sys.argv.(0) in let result = Legacy.Digest.channel inp (-1) in Legacy.close_in inp; result in let batteries_result () = let inp = BatFile.open_in Sys.argv.(0) in let result = channel inp (-1) in BatIO.close_in inp; result in assert_equal ~printer:(Printf.sprintf "%S") (legacy_result ()) (batteries_result ()) *) let from_hex s = if String.length s <> 32 then invalid_arg "Digest.from_hex"; let digit c = match c with | '0'..'9' -> Char.code c - Char.code '0' | 'A'..'F' -> Char.code c - Char.code 'A' + 10 | 'a'..'f' -> Char.code c - Char.code 'a' + 10 | _ -> invalid_arg "Digest.from_hex" in let byte i = digit s.[i] lsl 4 + digit s.[i+1] in BatBytesCompat.string_init 16 (fun i -> Char.chr (byte (2 * i))) (*$Q Q.string (fun s -> \ let h = string s in h |> to_hex |> from_hex = h) *) let compare = String.compare ##V<4.2##let bytes = string ##V<4.2##let subbytes = substring ##V<4.3##let equal d1 d2 = (compare d1 d2 = 0) (*$T equal (string "foo") (string "foo") equal (string "") (string "") not @@ equal (string "foo") (string "bar") not @@ equal (string "foo") (string "foo\000") not @@ equal (string "foo") (string "") *)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>