public void HashCombiner_Test_String() { using (var combiner1 = new HashGenerator()) using (var combiner2 = new HashGenerator()) { combiner1.AddCaseInsensitiveString("Hello"); combiner2.AddCaseInsensitiveString("hello"); Assert.AreEqual(combiner1.GenerateHash(), combiner2.GenerateHash()); combiner2.AddCaseInsensitiveString("world"); Assert.AreNotEqual(combiner1.GenerateHash(), combiner2.GenerateHash()); } }
private string Generate(bool isCaseSensitive, params string[] strs) { using var generator = new HashGenerator(); foreach (var str in strs) { if (isCaseSensitive) { generator.AddString(str); } else { generator.AddCaseInsensitiveString(str); } } return(generator.GenerateHash()); }
/// <summary> /// Returns a unique hash for a combination of FileInfo objects. /// </summary> /// <param name="filesAndFolders">A collection of files.</param> /// <param name="logger">A profiling logger.</param> /// <returns>The hash.</returns> /// <remarks>Each file is a tuple containing the FileInfo object and a boolean which indicates whether to hash the /// file properties (false) or the file contents (true).</remarks> private static string GetFileHash(IEnumerable <Tuple <FileSystemInfo, bool> > filesAndFolders, IProfilingLogger logger) { using (logger.DebugDuration <TypeLoader>("Determining hash of code files on disk", "Hash determined")) { // get the distinct file infos to hash var uniqInfos = new HashSet <string>(); var uniqContent = new HashSet <string>(); using (var generator = new HashGenerator()) { foreach (var fileOrFolder in filesAndFolders) { var info = fileOrFolder.Item1; if (fileOrFolder.Item2) { // add each unique file's contents to the hash // normalize the content for cr/lf and case-sensitivity if (uniqContent.Add(info.FullName)) { if (File.Exists(info.FullName) == false) { continue; } var content = RemoveCrLf(File.ReadAllText(info.FullName)); generator.AddCaseInsensitiveString(content); } } else { // add each unique folder/file to the hash if (uniqInfos.Add(info.FullName)) { generator.AddFileSystemItem(info); } } } return(generator.GenerateHash()); } } }