Skip to content
Snippets Groups Projects
testFracKnapsack.java 3.17 KiB
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class testFracKnapsack {
    @Test
    void testCreate() {
        double capacity = 10;
        double[] volume = new double[(int) capacity];
        double[] value = new double[(int) capacity];

        for (int i = 0; i < capacity; ++i) {
            volume[i] = i * 10;
            value[i] = i * 2.2;
        }

        FracKnapsack knapsack = new FracKnapsack(capacity, volume, value);
        Assertions.assertNotNull(knapsack);
    }

    @Test
    void testOneElement() {
        //capacità > volume elemento
        double capacity = 7;
        double[] volume = new double[(int) capacity];
        double[] value = new double[(int) capacity];

        value[0] = 10;
        volume[0] = 3;

        FracKnapsack knapsack = new FracKnapsack(capacity, volume, value);

        Assertions.assertEquals(10, knapsack.maxVal());
        Assertions.assertEquals(1, knapsack.dose(0));

        //capacità < volume elemento
        capacity = 2;
        value[0] = 10;
        volume[0] = 4;

        FracKnapsack knapsack2 = new FracKnapsack(capacity, volume, value);

        Assertions.assertEquals(5, knapsack2.maxVal());
        Assertions.assertEquals(0.5, knapsack2.dose(0));
    }


    @Test
    void testThreeElements() {
        //1 test in cui somma di tutti i volumi < capacità
        //es: valori = 2,5,1; volumi = 3,2,4; capacita = 10; quindi dosi= 1,1,1 valoreMassimo = 8

        double capacity = 10;
        double[] volume = new double[(int) capacity];
        double[] value = new double[(int) capacity];

        value[0] = 2;
        value[1] = 5;
        value[2] = 1;

        volume[0] = 3;
        volume[1] = 2;
        volume[2] = 4;

        FracKnapsack knapsack = new FracKnapsack(capacity, volume, value);

        Assertions.assertEquals(8, knapsack.maxVal());
        for (int i = 0; i < 3; ++i) {
            Assertions.assertEquals(1, knapsack.dose(i));
        }

        //1 test in cui si prende solo parte di un elemento
        //(es: valori = 10,2,0.5; volumi = 70,12,3; capacita = 3;
        //le soluzioni ottimali sono due: (0, 0.25, 0) oppure (0, 0, 1); valoreMassimo = 0.5)
        capacity = 3;

        value[0] = 10;
        value[1] = 2;
        value[2] = 0.5;

        volume[0] = 70;
        volume[1] = 12;
        volume[2] = 3;

        FracKnapsack knapsack2 = new FracKnapsack(capacity, volume, value);

        Assertions.assertEquals(0.5, knapsack2.maxVal());
        Assertions.assertTrue((knapsack2.dose(0) == 0 && knapsack2.dose(1) == 0.25 && knapsack2.dose(2) == 0) || ((knapsack2.dose(0) == 0) && knapsack2.dose(1) == 0) && knapsack2.dose(2) == 1);

        //es: valori = 5,3,1; volumi = 4,3,4; capacita = 10;
        //quindi dosi= 1.0 1.0 0.75 valoreMassimo = 8.75)

        capacity = 10;

        value[0] = 5;
        value[1] = 3;
        value[2] = 1;

        volume[0] = 4;
        volume[1] = 3;
        volume[2] = 4;

        FracKnapsack knapsack3 = new FracKnapsack(capacity, volume, value);

        Assertions.assertEquals(8.75, knapsack3.maxVal());
        Assertions.assertTrue(knapsack3.dose(0) == 1.0 && knapsack3.dose(1) == 1.0 && knapsack3.dose(2) == 0.75);
    }
}