ComputationParametersTest.java

/**
 * Copyright (c) 2019, RTE (http://www.rte-france.com)
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * SPDX-License-Identifier: MPL-2.0
 */
package com.powsybl.computation;

import com.powsybl.commons.extensions.AbstractExtension;
import org.junit.jupiter.api.Test;

import java.util.Objects;

import static org.junit.jupiter.api.Assertions.*;

/**
 * @author Yichen TANG {@literal <yichen.tang at rte-france.com>}
 */
class ComputationParametersTest {

    @Test
    void testEmpty() {
        ComputationParameters empty = ComputationParameters.empty();
        assertFalse(empty.getTimeout("cmd").isPresent());
    }

    @Test
    void testBuilder() {
        String cmdId = "cmd";
        ComputationParameters opts = new ComputationParametersBuilder()
                .setTimeout(cmdId, 10)
                .setDeadline(cmdId, 42)
                .build();
        assertEquals(10, opts.getTimeout(cmdId).orElse(-1));
        assertEquals(42, opts.getDeadline(cmdId).orElse(-1));
        String missingCmd = "missing";
        assertFalse(opts.getTimeout(missingCmd).isPresent());
        assertFalse(opts.getDeadline(missingCmd).isPresent());
    }

    @Test
    void testInvalid() {
        try {
            ComputationParameters opts = new ComputationParametersBuilder()
                    .setTimeout("inv", 0)
                    .build();
            fail();
        } catch (Exception e) {
            // ignore
        }
    }

    @Test
    void testExt() {
        // prepare
        ComputationParameters base = ComputationParameters.empty();
        QuantumComputationParameters quantum = new QuantumComputationParameters(42);
        base.addExtension(QuantumComputationParameters.class, quantum);

        // in quantum computation manager
        QuantumComputationParameters quantumComputationParameters = base.getExtension(QuantumComputationParameters.class);
        assertSame(quantum, quantumComputationParameters);
        assertEquals(42, quantumComputationParameters.getAtLeastQubits());
    }

    class QuantumComputationParameters extends AbstractExtension<ComputationParameters> {

        private final Integer atLeastQubits;

        QuantumComputationParameters(Integer atLeastQubits) {
            this.atLeastQubits = Objects.requireNonNull(atLeastQubits);
        }

        @Override
        public String getName() {
            return "QuantumComputationParameters";
        }

        int getAtLeastQubits() {
            return atLeastQubits;
        }
    }
}