mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-12-19 07:00:35 +08:00
* 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>
79 lines
2.8 KiB
Java
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());
|
|
}
|
|
}
|