Conversation
waruqi
commented
Sep 29, 2025
- Before adding new features and new modules, please go to issues to submit the relevant feature description first.
- Write good commit messages and use the same coding conventions as the rest of the project.
- Please commit code to dev branch and we will merge into master branch in feature
- Ensure your edited codes with four spaces instead of TAB.
- 增加新特性和新模块之前,请先到issues提交相关特性说明,经过讨论评估确认后,再进行相应的代码提交,避免做无用工作。
- 编写友好可读的提交信息,并使用与工程代码相同的代码规范,代码请用4个空格字符代替tab缩进。
- 请提交代码到dev分支,如果通过,我们会在特定时间合并到master分支上。
- 为了规范化提交日志的格式,commit消息,不要用中文,请用英文描述。
Summary of ChangesHello @waruqi, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request introduces a dedicated benchmark script for various hashing algorithms. The primary goal is to establish a performance measurement framework for different hash functions, allowing developers to assess their efficiency and identify potential bottlenecks. This initial script focuses on uuid, uuid4, strhash32, and strhash128, providing a foundation for future performance analysis of cryptographic and non-cryptographic hashing utilities. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request adds benchmark tests for various hash functions. The implementation has some issues with correctness and code duplication. I've provided a refactored version of the benchmark script that addresses these points by using string.format for printing, removing redundant code through a helper function, and scoping the COUNT variable locally. This will make the code more correct, maintainable, and idiomatic.
| local COUNT = 1000000 | ||
|
|
||
| function test_md5(data) | ||
| local h | ||
| local t = os.mclock() | ||
| for i = 1, COUNT do | ||
| h = hash.md5(data) | ||
| end | ||
| t = os.mclock() - t | ||
| print("md5(%d): %d ms, hash: %s", COUNT, t, h) | ||
| end | ||
|
|
||
| function test_sha1(data) | ||
| local h | ||
| local t = os.mclock() | ||
| for i = 1, COUNT do | ||
| h = hash.sha1(data) | ||
| end | ||
| t = os.mclock() - t | ||
| print("sha1(%d): %d ms, hash: %s", COUNT, t, h) | ||
| end | ||
|
|
||
| function test_sha256(data) | ||
| local h | ||
| local t = os.mclock() | ||
| for i = 1, COUNT do | ||
| h = hash.sha256(data) | ||
| end | ||
| t = os.mclock() - t | ||
| print("sha256(%d): %d ms, hash: %s", COUNT, t, h) | ||
| end | ||
|
|
||
| function test_uuid(data) | ||
| local h | ||
| local t = os.mclock() | ||
| for i = 1, COUNT do | ||
| h = hash.uuid(data) | ||
| end | ||
| t = os.mclock() - t | ||
| print("uuid(%d): %d ms, hash: %s", COUNT, t, h) | ||
| end | ||
|
|
||
| function test_uuid4(data) | ||
| local h | ||
| local t = os.mclock() | ||
| for i = 1, COUNT do | ||
| h = hash.uuid4(data) | ||
| end | ||
| t = os.mclock() - t | ||
| print("uuid4(%d): %d ms, hash: %s", COUNT, t, h) | ||
| end | ||
|
|
||
| function test_strhash32(data) | ||
| local h | ||
| local t = os.mclock() | ||
| for i = 1, COUNT do | ||
| h = hash.strhash32(data) | ||
| end | ||
| t = os.mclock() - t | ||
| print("strhash32(%d): %d ms, hash: %s", COUNT, t, h) | ||
| end | ||
|
|
||
| function test_strhash128(data) | ||
| local h | ||
| local t = os.mclock() | ||
| for i = 1, COUNT do | ||
| h = hash.strhash128(data) | ||
| end | ||
| t = os.mclock() - t | ||
| print("strhash128(%d): %d ms, hash: %s", COUNT, t, h) | ||
| end | ||
|
|
||
| function main() | ||
| local data = io.readfile(os.programfile()) | ||
| --test_md5(data) | ||
| --test_sha1(data) | ||
| --test_sha256(data) | ||
| test_uuid(data) | ||
| test_uuid4(data) | ||
| test_strhash32(data) | ||
| test_strhash128(data) | ||
| end |
There was a problem hiding this comment.
The benchmark script has a few issues:
- Incorrect
printusage: Theprintfunction in Lua does not perform C-style string formatting. It simply prints its arguments separated by tabs. You should usestring.formatto format the output string correctly. This is a correctness issue. - Code Duplication: All
test_*functions are nearly identical. This can be refactored into a single helper function to improve maintainability and readability. - Global Variable:
COUNTis defined as a global variable. It's better practice to define it as alocalconstant to avoid polluting the global namespace. - Redundant Benchmark:
hash.uuidis an alias forhash.uuid4. Benchmarking both is redundant. Consider removing one of them.
I suggest refactoring the entire file to address these points, making it more concise and correct.
local COUNT = 1000000
local function run_benchmark(name, hash_func, data)
local h
local t = os.mclock()
for i = 1, COUNT do
h = hash_func(data)
end
t = os.mclock() - t
print(string.format("%s(%d): %d ms, hash: %s", name, COUNT, t, h))
end
function main()
local data = io.readfile(os.programfile())
--run_benchmark("md5", hash.md5, data)
--run_benchmark("sha1", hash.sha1, data)
--run_benchmark("sha256", hash.sha256, data)
run_benchmark("uuid", hash.uuid, data)
run_benchmark("uuid4", hash.uuid4, data)
run_benchmark("strhash32", hash.strhash32, data)
run_benchmark("strhash128", hash.strhash128, data)
end
7efa5ac to
6377f44
Compare