|
6 | 6 |
|
7 | 7 | from libkernelbot import submission |
8 | 8 | from libkernelbot.consts import RankCriterion |
9 | | -from libkernelbot.db_types import LeaderboardItem |
| 9 | +from libkernelbot.db_types import LeaderboardItem, RunItem, SubmissionItem |
10 | 10 | from libkernelbot.utils import KernelBotError |
11 | 11 |
|
12 | 12 |
|
@@ -344,3 +344,56 @@ def test_compute_score(): |
344 | 344 | mock_task.ranking_by = "WRONG" |
345 | 345 | with pytest.raises(KernelBotError, match="Invalid ranking criterion WRONG"): |
346 | 346 | submission.compute_score(mock_result, mock_task, 1) |
| 347 | + |
| 348 | + |
| 349 | +def test_generate_run_verdict(mock_backend): |
| 350 | + """Test generate_run_verdict function with various ranking scenarios.""" |
| 351 | + from libkernelbot.submission import generate_run_verdict |
| 352 | + |
| 353 | + # Mock run and submission data |
| 354 | + run_item: RunItem = {"score": 1.5, "runner": "A100"} |
| 355 | + |
| 356 | + sub_data: SubmissionItem = { |
| 357 | + "submission_id": 123, |
| 358 | + "leaderboard_name": "test_board", |
| 359 | + "user_id": 42, |
| 360 | + } |
| 361 | + |
| 362 | + # Test first place |
| 363 | + mock_backend.db.get_leaderboard_submissions.return_value = [ |
| 364 | + {"submission_id": 123, "user_id": 42, "rank": 1}, |
| 365 | + {"submission_id": 542, "user_id": 44, "rank": 2}, |
| 366 | + ] |
| 367 | + result = generate_run_verdict(mock_backend, run_item, sub_data) |
| 368 | + assert result == "> 🥇 First place on A100: 1500 ms" |
| 369 | + |
| 370 | + # Test 5th place |
| 371 | + mock_backend.db.get_leaderboard_submissions.return_value = [ |
| 372 | + {"submission_id": 652, "user_id": 41, "rank": 4}, |
| 373 | + {"submission_id": 123, "user_id": 42, "rank": 5}, |
| 374 | + ] |
| 375 | + result = generate_run_verdict(mock_backend, run_item, sub_data) |
| 376 | + assert result == "> 5th place on A100: 1500 ms" |
| 377 | + |
| 378 | + # Test personal best (rank > 10) |
| 379 | + mock_backend.db.get_leaderboard_submissions.return_value = [ |
| 380 | + {"submission_id": 123, "user_id": 42, "rank": 15} |
| 381 | + ] |
| 382 | + result = generate_run_verdict(mock_backend, run_item, sub_data) |
| 383 | + assert result == "> Personal best on A100: 1500 ms" |
| 384 | + |
| 385 | + # This user already has a faster submission |
| 386 | + mock_backend.db.get_leaderboard_submissions.return_value = [ |
| 387 | + {"submission_id": 999, "user_id": 42, "rank": 3}, |
| 388 | + {"submission_id": 256, "user_id": 41, "rank": 2}, |
| 389 | + ] |
| 390 | + result = generate_run_verdict(mock_backend, run_item, sub_data) |
| 391 | + assert result == "> Successful on A100: 1500 ms" |
| 392 | + |
| 393 | + # Test first submission by user |
| 394 | + mock_backend.db.get_leaderboard_submissions.return_value = [ |
| 395 | + {"submission_id": 256, "user_id": 41, "rank": 2}, |
| 396 | + {"submission_id": 999, "user_id": 999, "rank": 999}, |
| 397 | + ] |
| 398 | + result = generate_run_verdict(mock_backend, run_item, sub_data) |
| 399 | + assert result == "> 🍾 First successful submission on A100: 1500 ms" |
0 commit comments