|
1 | 1 | using System;
|
2 | 2 | using System.Collections.Generic;
|
3 | 3 | using DataStructures.Hashing;
|
| 4 | +using FluentAssertions; |
4 | 5 | using NUnit.Framework;
|
5 | 6 |
|
6 | 7 | namespace DataStructures.Tests.Hashing;
|
@@ -389,6 +390,99 @@ public void Test_NegativeHashKey_ReturnsCorrectValue()
|
389 | 390 | hashTable.Add(new NegativeHashKey(1), 1);
|
390 | 391 | Assert.That(hashTable[new NegativeHashKey(1)], Is.EqualTo(1));
|
391 | 392 | }
|
| 393 | + |
| 394 | + [Test] |
| 395 | + public void Add_ShouldTriggerResize_WhenThresholdExceeded() |
| 396 | + { |
| 397 | + // Arrange |
| 398 | + var initialCapacity = 4; |
| 399 | + var hashTable = new HashTable<int, string>(initialCapacity); |
| 400 | + |
| 401 | + // Act |
| 402 | + for (int i = 1; i <= 4; i++) // Start keys from 1 to avoid default(TKey) = 0 issue |
| 403 | + { |
| 404 | + hashTable.Add(i, $"Value{i}"); |
| 405 | + } |
| 406 | + |
| 407 | + // Assert |
| 408 | + hashTable.Capacity.Should().BeGreaterThan(initialCapacity); // Ensure resizing occurred |
| 409 | + hashTable.Count.Should().Be(4); // Verify count reflects number of added items |
| 410 | + } |
| 411 | + |
| 412 | + |
| 413 | + [Test] |
| 414 | + public void Add_ThrowsException_WhenKeyIsDefault() |
| 415 | + { |
| 416 | + // Arrange |
| 417 | + var hashTable = new HashTable<int, string>(); |
| 418 | + |
| 419 | + // Act & Assert |
| 420 | + Action act = () => hashTable.Add(default, "Value"); |
| 421 | + act.Should().Throw<ArgumentNullException>().WithMessage("*key*"); |
| 422 | + } |
| 423 | + |
| 424 | + [Test] |
| 425 | + public void Add_ThrowsException_WhenValueIsDefault() |
| 426 | + { |
| 427 | + // Arrange |
| 428 | + var hashTable = new HashTable<int, string>(); |
| 429 | + |
| 430 | + // Act & Assert |
| 431 | + Action act = () => hashTable.Add(1, default); |
| 432 | + act.Should().Throw<ArgumentNullException>().WithMessage("*value*"); |
| 433 | + } |
| 434 | + |
| 435 | + [Test] |
| 436 | + public void Add_StoresValueCorrectly() |
| 437 | + { |
| 438 | + // Arrange |
| 439 | + var hashTable = new HashTable<int, string>(); |
| 440 | + |
| 441 | + // Act |
| 442 | + hashTable.Add(1, "Value1"); |
| 443 | + |
| 444 | + // Assert |
| 445 | + hashTable[1].Should().Be("Value1"); |
| 446 | + } |
| 447 | + |
| 448 | + [Test] |
| 449 | + public void Get_ReturnsCorrectValue_ForExistingKey() |
| 450 | + { |
| 451 | + // Arrange |
| 452 | + var hashTable = new HashTable<string, int>(); |
| 453 | + hashTable.Add("key", 42); |
| 454 | + |
| 455 | + // Act |
| 456 | + var value = hashTable["key"]; |
| 457 | + |
| 458 | + // Assert |
| 459 | + value.Should().Be(42); |
| 460 | + } |
| 461 | + |
| 462 | + [Test] |
| 463 | + public void Get_ThrowsException_WhenKeyDoesNotExist() |
| 464 | + { |
| 465 | + // Arrange |
| 466 | + var hashTable = new HashTable<string, int>(); |
| 467 | + |
| 468 | + // Act & Assert |
| 469 | + Action act = () => _ = hashTable["nonexistent"]; |
| 470 | + act.Should().Throw<KeyNotFoundException>(); |
| 471 | + } |
| 472 | + |
| 473 | + [Test] |
| 474 | + public void Capacity_Increases_WhenResizeOccurs() |
| 475 | + { |
| 476 | + var initialCapacity = 4; |
| 477 | + var hashTable = new HashTable<int, string>(initialCapacity); |
| 478 | + |
| 479 | + for (int i = 1; i <= 5; i++) |
| 480 | + { |
| 481 | + hashTable.Add(i, $"Value{i}"); |
| 482 | + } |
| 483 | + |
| 484 | + hashTable.Capacity.Should().BeGreaterThan(initialCapacity); |
| 485 | + } |
392 | 486 | }
|
393 | 487 |
|
394 | 488 | public class NegativeHashKey
|
|
0 commit comments