Files
Java/src/test/java/com/thealgorithms/dynamicprogramming/KnapsackZeroOneTabulationTest.java
Vishwajeet Deshmane cfd784105b Feat(Improved): Add 0/1 Knapsack Problem: Recursive and Tabulation (Bottom-Up DP) Implementations in Java along with their corresponding Tests (#6425)
* feat: Add 0/1 Knapsack and its tabulation implementation with their corresponding tests

* feat: Add 0/1 Knapsack and its tabulation implementation with their corresponding tests

* feat: Add 0/1 Knapsack and its tabulation implementation with their corresponding tests

* Feat:add 0/1knapsack and 0/1knapsacktabulation along with their tests

* Feat:add 0/1knapsack and 0/1knapsacktabulation along with their tests

* Feat:add 0/1knapsack and 0/1knapsacktabulation along with their tests

---------

Co-authored-by: Oleksandr Klymenko <alexanderklmn@gmail.com>
2025-07-22 19:17:24 +02:00

79 lines
2.8 KiB
Java

package com.thealgorithms.dynamicprogramming;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
public class KnapsackZeroOneTabulationTest {
@Test
public void basicCheck() {
int[] values = {60, 100, 120};
int[] weights = {10, 20, 30};
int capacity = 50;
int itemCount = values.length;
int expected = 220; // Best choice: item 1 (100) and item 2 (120)
int result = KnapsackZeroOneTabulation.compute(values, weights, capacity, itemCount);
assertEquals(expected, result);
}
@Test
public void emptyKnapsack() {
int[] values = {};
int[] weights = {};
int capacity = 50;
int itemCount = 0;
assertEquals(0, KnapsackZeroOneTabulation.compute(values, weights, capacity, itemCount));
}
@Test
public void zeroCapacity() {
int[] values = {60, 100, 120};
int[] weights = {10, 20, 30};
int capacity = 0;
int itemCount = values.length;
assertEquals(0, KnapsackZeroOneTabulation.compute(values, weights, capacity, itemCount));
}
@Test
public void negativeCapacity() {
int[] values = {10, 20, 30};
int[] weights = {1, 1, 1};
int capacity = -10;
int itemCount = values.length;
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> KnapsackZeroOneTabulation.compute(values, weights, capacity, itemCount));
assertEquals("Capacity must not be negative.", exception.getMessage());
}
@Test
public void mismatchedLengths() {
int[] values = {60, 100}; // Only 2 values
int[] weights = {10, 20, 30}; // 3 weights
int capacity = 50;
int itemCount = 2; // Matches `values.length`
// You could either expect 0 or throw an IllegalArgumentException in your compute function
assertThrows(IllegalArgumentException.class, () -> { KnapsackZeroOneTabulation.compute(values, weights, capacity, itemCount); });
}
@Test
public void nullInputs() {
int[] weights = {1, 2, 3};
int capacity = 10;
int itemCount = 3;
IllegalArgumentException exception1 = assertThrows(IllegalArgumentException.class, () -> KnapsackZeroOneTabulation.compute(null, weights, capacity, itemCount));
assertEquals("Values and weights arrays must not be null.", exception1.getMessage());
int[] values = {1, 2, 3};
IllegalArgumentException exception2 = assertThrows(IllegalArgumentException.class, () -> KnapsackZeroOneTabulation.compute(values, null, capacity, itemCount));
assertEquals("Values and weights arrays must not be null.", exception2.getMessage());
}
}