PartitionTest.java
/**
* Copyright (c) 2018, 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 org.junit.jupiter.api.Test;
import com.powsybl.commons.PowsyblException;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* @author Yichen Tang {@literal <yichen.tang at rte-france.com>}
*/
class PartitionTest {
@Test
void test() {
Partition p1of1 = Partition.parse("1/1");
assertEquals(0, p1of1.startIndex(1));
assertEquals(1, p1of1.endIndex(1));
assertEquals(0, p1of1.startIndex(2));
assertEquals(2, p1of1.endIndex(2));
Partition p1of2 = Partition.parse("1/2");
Partition p2of2 = Partition.parse("2/2");
// total:2
// [0,1) [1,2)
assertEquals(0, p1of2.startIndex(2));
assertEquals(1, p1of2.endIndex(2));
assertEquals(1, p2of2.startIndex(2));
assertEquals(2, p2of2.endIndex(2));
Partition p1of3 = Partition.parse("1/3");
Partition p2of3 = Partition.parse("2/3");
Partition p3of3 = Partition.parse("3/3");
// total:5
// [0,1) [1,3) [3,5)
assertEquals(0, p1of3.startIndex(5));
assertEquals(1, p1of3.endIndex(5)); // 1 * 5 / 3
assertEquals(1, p2of3.startIndex(5)); // (2-1) * 5 / 3
assertEquals(3, p2of3.endIndex(5)); // 2 * 5 / 3
assertEquals(3, p3of3.startIndex(5)); // (3-1) * 5 / 3
assertEquals(5, p3of3.endIndex(5)); // 3 * 5 / 3
}
private void assertPartitionInvalid(String s) {
PowsyblException exception = assertThrows(PowsyblException.class,
() -> Partition.parse(s));
assertEquals(s + " is not valid", exception.getMessage());
}
@Test
void testInvalid() {
//parsing
assertPartitionInvalid("a");
assertPartitionInvalid("/");
assertPartitionInvalid("1");
assertPartitionInvalid("12");
assertPartitionInvalid("/1");
assertPartitionInvalid("1/");
assertPartitionInvalid("1|2");
assertPartitionInvalid("-1/2");
assertPartitionInvalid("+1/+2/foo0/0bar");
assertPartitionInvalid("foo/1/2");
assertPartitionInvalid("a1/2");
assertPartitionInvalid(" 1/2 ");
assertPartitionInvalid("+1/2");
assertPartitionInvalid("1/2/foo");
assertPartitionInvalid("-0/2");
//invalid values
assertPartitionInvalid("2/1");
assertPartitionInvalid("0/2");
}
}