MultiVariantExtensionTest.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.iidm.network.impl;
import com.powsybl.iidm.network.Load;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.VariantManager;
import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory;
import gnu.trove.list.array.TIntArrayList;
import org.junit.jupiter.api.Test;
import static com.powsybl.iidm.network.VariantManagerConstants.INITIAL_VARIANT_ID;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author Mathieu Bague {@literal <mathieu.bague@rte-france.com>}
*/
class MultiVariantExtensionTest {
static class LoadExt extends AbstractMultiVariantIdentifiableExtension<Load> {
private final TIntArrayList values;
LoadExt(Load load, int value) {
super(load);
int variantArraySize = getVariantManagerHolder().getVariantManager().getVariantArraySize();
this.values = new TIntArrayList(variantArraySize);
for (int i = 0; i < variantArraySize; i++) {
this.values.add(value);
}
}
@Override
public String getName() {
return "load-ext";
}
@Override
public void extendVariantArraySize(int initVariantArraySize, int number, int sourceIndex) {
values.ensureCapacity(values.size() + number);
for (int i = 0; i < number; i++) {
values.add(values.get(sourceIndex));
}
}
@Override
public void reduceVariantArraySize(int number) {
values.remove(values.size() - number, number);
}
@Override
public void deleteVariantArrayElement(int index) {
values.set(index, -1);
}
@Override
public void allocateVariantArrayElement(int[] indexes, int sourceIndex) {
for (int index : indexes) {
values.set(index, values.get(sourceIndex));
}
}
int getValue() {
return values.get(getVariantIndex());
}
void setValue(int value) {
values.set(getVariantIndex(), value);
}
}
@Test
void test() {
String variant1 = "variant1";
String variant2 = "variant2";
Network network = EurostagTutorialExample1Factory.create();
Load load = network.getLoad("LOAD");
LoadExt ext = new LoadExt(load, 0);
load.addExtension(LoadExt.class, ext);
assertEquals(0, ext.getValue());
VariantManager variantManager = network.getVariantManager();
variantManager.cloneVariant(INITIAL_VARIANT_ID, variant1);
assertEquals(2, ext.values.size());
variantManager.setWorkingVariant(variant1);
ext.setValue(4);
assertEquals(4, ext.getValue());
variantManager.setWorkingVariant(INITIAL_VARIANT_ID);
assertEquals(0, ext.getValue());
variantManager.cloneVariant(variant1, variant2);
assertEquals(3, ext.values.size());
variantManager.setWorkingVariant(variant1);
ext.setValue(2);
variantManager.setWorkingVariant(variant2);
assertEquals(4, ext.getValue());
assertArrayEquals(new int[]{0, 2, 4}, ext.values.toArray());
variantManager.removeVariant(variant1);
assertEquals(3, ext.values.size());
assertArrayEquals(new int[]{0, -1, 4}, ext.values.toArray());
variantManager.removeVariant(variant2);
assertEquals(1, ext.values.size());
assertArrayEquals(new int[]{0}, ext.values.toArray());
}
}