ValidationFormatterCsvWriterTest.java

/**
 * Copyright (c) 2017-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.loadflow.validation.io;

import java.io.Writer;
import java.util.Locale;

import com.powsybl.commons.io.table.CsvTableFormatterFactory;
import com.powsybl.commons.io.table.TableFormatterConfig;
import com.powsybl.loadflow.validation.util.TwtTestData;
import com.powsybl.loadflow.validation.ValidationType;

/**
 *
 * @author Massimo Ferraro {@literal <massimo.ferraro@techrain.it>}
 */
class ValidationFormatterCsvWriterTest extends AbstractValidationFormatterWriterTest {

    @Override
    protected String getFlowsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.FLOWS + " check",
                           String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                                       AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                                       AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                                       AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2),
                           String.join(";", branchId,
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc)));
    }

    @Override
    protected String getFlowsVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.FLOWS + " check",
                           String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                                       AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                                       AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                                       AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                                       "r", "x", "g1", "g2", "b1", "b2", "rho1", "rho2", "alpha1", "alpha2",
                                       "u1", "u2", AbstractValidationFormatterWriter.THETA1, AbstractValidationFormatterWriter.THETA2,
                                       "z", "y", "ksi", "phaseAngleClock", AbstractValidationFormatterWriter.CONNECTED + "1",
                                       AbstractValidationFormatterWriter.CONNECTED + "2", AbstractValidationFormatterWriter.MAIN_COMPONENT + "1",
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + "2", AbstractValidationFormatterWriter.VALIDATION),
                           String.join(";", branchId,
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc),
                                       String.format(Locale.getDefault(), "%g", r), String.format(Locale.getDefault(), "%g", x),
                                       String.format(Locale.getDefault(), "%g", g1), String.format(Locale.getDefault(), "%g", g2),
                                       String.format(Locale.getDefault(), "%g", b1), String.format(Locale.getDefault(), "%g", b2),
                                       String.format(Locale.getDefault(), "%g", rho1), String.format(Locale.getDefault(), "%g", rho2),
                                       String.format(Locale.getDefault(), "%g", alpha1), String.format(Locale.getDefault(), "%g", alpha2),
                                       String.format(Locale.getDefault(), "%g", u1), String.format(Locale.getDefault(), "%g", u2),
                                       String.format(Locale.getDefault(), "%g", theta1), String.format(Locale.getDefault(), "%g", theta2),
                                       String.format(Locale.getDefault(), "%g", z), String.format(Locale.getDefault(), "%g", y),
                                       String.format(Locale.getDefault(), "%g", ksi),
                                       String.format(Locale.getDefault(), "%d", phaseAngleClock),
                                       Boolean.toString(connected1), Boolean.toString(connected2),
                                       Boolean.toString(mainComponent1), Boolean.toString(mainComponent2), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getFlowsCompareContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.FLOWS + " check",
                           String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                                       AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                                       AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                                       AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                                       AbstractValidationFormatterWriter.NETWORK_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", branchId,
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc),
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc)));
    }

    @Override
    protected String getFlowsCompareDifferentIdsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.FLOWS + " check",
                           String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                                       AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                                       AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                                       AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                                       AbstractValidationFormatterWriter.NETWORK_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherBranchId,
                                       "", "", "", "", "", "", "", "",
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc)),
                           String.join(";", branchId,
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc),
                                       "", "", "", "", "", "", "", ""));
    }

    @Override
    protected String getFlowsCompareVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.FLOWS + " check",
                           String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                                       AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                                       AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                                       AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                                       "r", "x", "g1", "g2", "b1", "b2", "rho1", "rho2", "alpha1", "alpha2",
                                       "u1", "u2", AbstractValidationFormatterWriter.THETA1, AbstractValidationFormatterWriter.THETA2,
                                       "z", "y", "ksi", "phaseAngleClock", AbstractValidationFormatterWriter.CONNECTED + "1",
                                       AbstractValidationFormatterWriter.CONNECTED + "2", AbstractValidationFormatterWriter.MAIN_COMPONENT + "1",
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + "2", AbstractValidationFormatterWriter.VALIDATION,
                                       AbstractValidationFormatterWriter.NETWORK_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "r" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "x" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "g1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "g2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "b1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "b2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "rho1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "rho2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "alpha1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "alpha2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "u1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "u2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.THETA1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.THETA2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "z" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "y" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "ksi" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "phaseAngleClock" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + "1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + "2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + "1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + "2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", branchId,
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc),
                                       String.format(Locale.getDefault(), "%g", r), String.format(Locale.getDefault(), "%g", x),
                                       String.format(Locale.getDefault(), "%g", g1), String.format(Locale.getDefault(), "%g", g2),
                                       String.format(Locale.getDefault(), "%g", b1), String.format(Locale.getDefault(), "%g", b2),
                                       String.format(Locale.getDefault(), "%g", rho1), String.format(Locale.getDefault(), "%g", rho2),
                                       String.format(Locale.getDefault(), "%g", alpha1), String.format(Locale.getDefault(), "%g", alpha2),
                                       String.format(Locale.getDefault(), "%g", u1), String.format(Locale.getDefault(), "%g", u2),
                                       String.format(Locale.getDefault(), "%g", theta1), String.format(Locale.getDefault(), "%g", theta2),
                                       String.format(Locale.getDefault(), "%g", z), String.format(Locale.getDefault(), "%g", y),
                                       String.format(Locale.getDefault(), "%g", ksi),
                                       String.format(Locale.getDefault(), "%d", phaseAngleClock),
                                       Boolean.toString(connected1), Boolean.toString(connected2),
                                       Boolean.toString(mainComponent1), Boolean.toString(mainComponent2), AbstractValidationFormatterWriter.SUCCESS,
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc),
                                       String.format(Locale.getDefault(), "%g", r), String.format(Locale.getDefault(), "%g", x),
                                       String.format(Locale.getDefault(), "%g", g1), String.format(Locale.getDefault(), "%g", g2),
                                       String.format(Locale.getDefault(), "%g", b1), String.format(Locale.getDefault(), "%g", b2),
                                       String.format(Locale.getDefault(), "%g", rho1), String.format(Locale.getDefault(), "%g", rho2),
                                       String.format(Locale.getDefault(), "%g", alpha1), String.format(Locale.getDefault(), "%g", alpha2),
                                       String.format(Locale.getDefault(), "%g", u1), String.format(Locale.getDefault(), "%g", u2),
                                       String.format(Locale.getDefault(), "%g", theta1), String.format(Locale.getDefault(), "%g", theta2),
                                       String.format(Locale.getDefault(), "%g", z), String.format(Locale.getDefault(), "%g", y),
                                       String.format(Locale.getDefault(), "%g", ksi),
                                       String.format(Locale.getDefault(), "%d", phaseAngleClock),
                                       Boolean.toString(connected1), Boolean.toString(connected2),
                                       Boolean.toString(mainComponent1), Boolean.toString(mainComponent2), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getFlowsCompareDifferentIdsVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.FLOWS + " check",
                           String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                                       AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                                       AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                                       AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                                       "r", "x", "g1", "g2", "b1", "b2", "rho1", "rho2", "alpha1", "alpha2",
                                       "u1", "u2", AbstractValidationFormatterWriter.THETA1, AbstractValidationFormatterWriter.THETA2,
                                       "z", "y", "ksi", "phaseAngleClock", AbstractValidationFormatterWriter.CONNECTED + "1",
                                       AbstractValidationFormatterWriter.CONNECTED + "2", AbstractValidationFormatterWriter.MAIN_COMPONENT + "1",
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + "2", AbstractValidationFormatterWriter.VALIDATION,
                                       AbstractValidationFormatterWriter.NETWORK_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NETWORK_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.EXPECTED_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "r" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "x" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "g1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "g2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "b1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "b2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "rho1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "rho2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "alpha1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "alpha2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "u1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "u2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.THETA1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.THETA2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "z" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "y" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "ksi" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "phaseAngleClock" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + "1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + "2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + "1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + "2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherBranchId,
                                       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc),
                                       String.format(Locale.getDefault(), "%g", r), String.format(Locale.getDefault(), "%g", x),
                                       String.format(Locale.getDefault(), "%g", g1), String.format(Locale.getDefault(), "%g", g2),
                                       String.format(Locale.getDefault(), "%g", b1), String.format(Locale.getDefault(), "%g", b2),
                                       String.format(Locale.getDefault(), "%g", rho1), String.format(Locale.getDefault(), "%g", rho2),
                                       String.format(Locale.getDefault(), "%g", alpha1), String.format(Locale.getDefault(), "%g", alpha2),
                                       String.format(Locale.getDefault(), "%g", u1), String.format(Locale.getDefault(), "%g", u2),
                                       String.format(Locale.getDefault(), "%g", theta1), String.format(Locale.getDefault(), "%g", theta2),
                                       String.format(Locale.getDefault(), "%g", z), String.format(Locale.getDefault(), "%g", y),
                                       String.format(Locale.getDefault(), "%g", ksi),
                                       String.format(Locale.getDefault(), "%d", phaseAngleClock),
                                       Boolean.toString(connected1), Boolean.toString(connected2),
                                       Boolean.toString(mainComponent1), Boolean.toString(mainComponent2), AbstractValidationFormatterWriter.SUCCESS),
                           String.join(";", branchId,
                                       String.format(Locale.getDefault(), "%g", p1), String.format(Locale.getDefault(), "%g", p1Calc),
                                       String.format(Locale.getDefault(), "%g", q1), String.format(Locale.getDefault(), "%g", q1Calc),
                                       String.format(Locale.getDefault(), "%g", p2), String.format(Locale.getDefault(), "%g", p2Calc),
                                       String.format(Locale.getDefault(), "%g", q2), String.format(Locale.getDefault(), "%g", q2Calc),
                                       String.format(Locale.getDefault(), "%g", r), String.format(Locale.getDefault(), "%g", x),
                                       String.format(Locale.getDefault(), "%g", g1), String.format(Locale.getDefault(), "%g", g2),
                                       String.format(Locale.getDefault(), "%g", b1), String.format(Locale.getDefault(), "%g", b2),
                                       String.format(Locale.getDefault(), "%g", rho1), String.format(Locale.getDefault(), "%g", rho2),
                                       String.format(Locale.getDefault(), "%g", alpha1), String.format(Locale.getDefault(), "%g", alpha2),
                                       String.format(Locale.getDefault(), "%g", u1), String.format(Locale.getDefault(), "%g", u2),
                                       String.format(Locale.getDefault(), "%g", theta1), String.format(Locale.getDefault(), "%g", theta2),
                                       String.format(Locale.getDefault(), "%g", z), String.format(Locale.getDefault(), "%g", y),
                                       String.format(Locale.getDefault(), "%g", ksi),
                                       String.format(Locale.getDefault(), "%d", phaseAngleClock),
                                       Boolean.toString(connected1), Boolean.toString(connected2),
                                       Boolean.toString(mainComponent1), Boolean.toString(mainComponent2), AbstractValidationFormatterWriter.SUCCESS,
                                       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""));
    }

    @Override
    protected ValidationWriter getFlowsValidationFormatterCsvWriter(TableFormatterConfig config, Writer writer, boolean verbose, boolean compareResults) {
        return new ValidationFormatterCsvWriter("test", CsvTableFormatterFactory.class, config, writer, verbose, ValidationType.FLOWS, compareResults);
    }

    @Override
    protected String getGeneratorsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.GENERATORS + " check",
                           String.join(";", "id", "p", "q", "v", "targetP", "targetQ", "targetV", "expectedP"),
                           String.join(";", generatorId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP)));
    }

    @Override
    protected String getGeneratorsVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.GENERATORS + " check",
                           String.join(";", "id", "p", "q", "v", "targetP", "targetQ", "targetV", "expectedP", AbstractValidationFormatterWriter.CONNECTED,
                                       "voltageRegulatorOn", "minP", "maxP", "minQ", "maxQ", AbstractValidationFormatterWriter.MAIN_COMPONENT,
                                       AbstractValidationFormatterWriter.VALIDATION),
                           String.join(";", generatorId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP), Boolean.toString(connected), Boolean.toString(voltageRegulatorOn),
                                       String.format(Locale.getDefault(), "%g", minP), String.format(Locale.getDefault(), "%g", maxP),
                                       String.format(Locale.getDefault(), "%g", minQ), String.format(Locale.getDefault(), "%g", maxQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getGeneratorsCompareContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.GENERATORS + " check",
                           String.join(";", "id", "p", "q", "v", "targetP", "targetQ", "targetV", "expectedP",
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "v" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetV" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "expectedP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", generatorId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP),
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP)));
    }

    @Override
    protected String getGeneratorsCompareDifferentIdsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.GENERATORS + " check",
                           String.join(";", "id", "p", "q", "v", "targetP", "targetQ", "targetV", "expectedP",
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "v" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetV" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "expectedP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherGeneratorId,
                                       "", "", "", "", "", "", "",
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP)),
                           String.join(";", generatorId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP), "", "", "", "", "", "", ""));
    }

    @Override
    protected String getGeneratorsCompareVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.GENERATORS + " check",
                           String.join(";", "id", "p", "q", "v", "targetP", "targetQ", "targetV", "expectedP", AbstractValidationFormatterWriter.CONNECTED,
                                       "voltageRegulatorOn", "minP", "maxP", "minQ", "maxQ", AbstractValidationFormatterWriter.MAIN_COMPONENT,
                                       AbstractValidationFormatterWriter.VALIDATION,
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "v" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetV" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "expectedP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "voltageRegulatorOn" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "minP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "maxP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "minQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "maxQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", generatorId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP), Boolean.toString(connected), Boolean.toString(voltageRegulatorOn),
                                       String.format(Locale.getDefault(), "%g", minP), String.format(Locale.getDefault(), "%g", maxP),
                                       String.format(Locale.getDefault(), "%g", minQ), String.format(Locale.getDefault(), "%g", maxQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP), Boolean.toString(connected), Boolean.toString(voltageRegulatorOn),
                                       String.format(Locale.getDefault(), "%g", minP), String.format(Locale.getDefault(), "%g", maxP),
                                       String.format(Locale.getDefault(), "%g", minQ), String.format(Locale.getDefault(), "%g", maxQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getGeneratorsCompareDifferentIdsVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.GENERATORS + " check",
                           String.join(";", "id", "p", "q", "v", "targetP", "targetQ", "targetV", "expectedP", AbstractValidationFormatterWriter.CONNECTED,
                                       "voltageRegulatorOn", "minP", "maxP", "minQ", "maxQ", AbstractValidationFormatterWriter.MAIN_COMPONENT,
                                       AbstractValidationFormatterWriter.VALIDATION,
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "v" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "targetV" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "expectedP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "voltageRegulatorOn" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "minP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "maxP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "minQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "maxQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherGeneratorId,
                                       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP), Boolean.toString(connected), Boolean.toString(voltageRegulatorOn),
                                       String.format(Locale.getDefault(), "%g", minP), String.format(Locale.getDefault(), "%g", maxP),
                                       String.format(Locale.getDefault(), "%g", minQ), String.format(Locale.getDefault(), "%g", maxQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS),
                           String.join(";", generatorId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", targetP),
                                       String.format(Locale.getDefault(), "%g", targetQ), String.format(Locale.getDefault(), "%g", targetV),
                                       String.format(Locale.getDefault(), "%g", expectedP), Boolean.toString(connected), Boolean.toString(voltageRegulatorOn),
                                       String.format(Locale.getDefault(), "%g", minP), String.format(Locale.getDefault(), "%g", maxP),
                                       String.format(Locale.getDefault(), "%g", minQ), String.format(Locale.getDefault(), "%g", maxQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS,
                                       "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""));
    }

    @Override
    protected ValidationWriter getGeneratorsValidationFormatterCsvWriter(TableFormatterConfig config, Writer writer, boolean verbose, boolean compareResults) {
        return new ValidationFormatterCsvWriter("test", CsvTableFormatterFactory.class, config, writer, verbose, ValidationType.GENERATORS, compareResults);
    }

    @Override
    protected String getBusesContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.BUSES + " check",
                           String.join(";", "id", "incomingP", "incomingQ", "loadP", "loadQ"),
                           String.join(";", busId,
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ)));
    }

    @Override
    protected String getBusesVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.BUSES + " check",
                           String.join(";", "id", "incomingP", "incomingQ", "loadP", "loadQ", "genP", "genQ", "shuntP", "shuntQ", "svcP", "svcQ",
                                       "vscCSP", "vscCSQ", "lineP", "lineQ", "danglingLineP", "danglingLineQ", "twtP", "twtQ", "tltP", "tltQ",
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION),
                           String.join(";", busId,
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ),
                                       String.format(Locale.getDefault(), "%g", genP), String.format(Locale.getDefault(), "%g", genQ),
                                       String.format(Locale.getDefault(), "%g", shuntP), String.format(Locale.getDefault(), "%g", shuntQ),
                                       String.format(Locale.getDefault(), "%g", svcP), String.format(Locale.getDefault(), "%g", svcQ),
                                       String.format(Locale.getDefault(), "%g", vscCSP), String.format(Locale.getDefault(), "%g", vscCSQ),
                                       String.format(Locale.getDefault(), "%g", lineP), String.format(Locale.getDefault(), "%g", lineQ),
                                       String.format(Locale.getDefault(), "%g", danglingLineP), String.format(Locale.getDefault(), "%g", danglingLineQ),
                                       String.format(Locale.getDefault(), "%g", twtP), String.format(Locale.getDefault(), "%g", twtQ),
                                       String.format(Locale.getDefault(), "%g", tltP), String.format(Locale.getDefault(), "%g", tltQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getBusesCompareContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.BUSES + " check",
                           String.join(";", "id", "incomingP", "incomingQ", "loadP", "loadQ",
                                       "incomingP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "incomingQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "loadP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "loadQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", busId,
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ),
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ)));
    }

    @Override
    protected String getBusesCompareDifferentIdsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.BUSES + " check",
                           String.join(";", "id", "incomingP", "incomingQ", "loadP", "loadQ",
                                       "incomingP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "incomingQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "loadP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "loadQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherBusId,
                                       "", "", "", "",
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ)),
                           String.join(";", busId,
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ),
                                       "", "", "", ""));
    }

    @Override
    protected String getBusesCompareVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.BUSES + " check",
                           String.join(";", "id", "incomingP", "incomingQ", "loadP", "loadQ", "genP", "genQ", "shuntP", "shuntQ", "svcP", "svcQ",
                                       "vscCSP", "vscCSQ", "lineP", "lineQ", "danglingLineP", "danglingLineQ", "twtP", "twtQ", "tltP", "tltQ",
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION,
                                       "incomingP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "incomingQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "loadP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "loadQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "genP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "genQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "shuntP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "shuntQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "svcP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "svcQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vscCSP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "vscCSQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "lineP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "lineQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "danglingLineP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "danglingLineQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "twtP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "twtQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "tltP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "tltQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", busId,
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ),
                                       String.format(Locale.getDefault(), "%g", genP), String.format(Locale.getDefault(), "%g", genQ),
                                       String.format(Locale.getDefault(), "%g", shuntP), String.format(Locale.getDefault(), "%g", shuntQ),
                                       String.format(Locale.getDefault(), "%g", svcP), String.format(Locale.getDefault(), "%g", svcQ),
                                       String.format(Locale.getDefault(), "%g", vscCSP), String.format(Locale.getDefault(), "%g", vscCSQ),
                                       String.format(Locale.getDefault(), "%g", lineP), String.format(Locale.getDefault(), "%g", lineQ),
                                       String.format(Locale.getDefault(), "%g", danglingLineP), String.format(Locale.getDefault(), "%g", danglingLineQ),
                                       String.format(Locale.getDefault(), "%g", twtP), String.format(Locale.getDefault(), "%g", twtQ),
                                       String.format(Locale.getDefault(), "%g", tltP), String.format(Locale.getDefault(), "%g", tltQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS,
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ),
                                       String.format(Locale.getDefault(), "%g", genP), String.format(Locale.getDefault(), "%g", genQ),
                                       String.format(Locale.getDefault(), "%g", shuntP), String.format(Locale.getDefault(), "%g", shuntQ),
                                       String.format(Locale.getDefault(), "%g", svcP), String.format(Locale.getDefault(), "%g", svcQ),
                                       String.format(Locale.getDefault(), "%g", vscCSP), String.format(Locale.getDefault(), "%g", vscCSQ),
                                       String.format(Locale.getDefault(), "%g", lineP), String.format(Locale.getDefault(), "%g", lineQ),
                                       String.format(Locale.getDefault(), "%g", danglingLineP), String.format(Locale.getDefault(), "%g", danglingLineQ),
                                       String.format(Locale.getDefault(), "%g", twtP), String.format(Locale.getDefault(), "%g", twtQ),
                                       String.format(Locale.getDefault(), "%g", tltP), String.format(Locale.getDefault(), "%g", tltQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getBusesCompareDifferentIdsVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.BUSES + " check",
                           String.join(";", "id", "incomingP", "incomingQ", "loadP", "loadQ", "genP", "genQ", "shuntP", "shuntQ", "svcP", "svcQ",
                                       "vscCSP", "vscCSQ", "lineP", "lineQ", "danglingLineP", "danglingLineQ", "twtP", "twtQ", "tltP", "tltQ",
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION,
                                       "incomingP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "incomingQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "loadP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "loadQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "genP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "genQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "shuntP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "shuntQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "svcP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "svcQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vscCSP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "vscCSQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "lineP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "lineQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "danglingLineP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "danglingLineQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "twtP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "twtQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "tltP" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "tltQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherBusId,
                                       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ),
                                       String.format(Locale.getDefault(), "%g", genP), String.format(Locale.getDefault(), "%g", genQ),
                                       String.format(Locale.getDefault(), "%g", shuntP), String.format(Locale.getDefault(), "%g", shuntQ),
                                       String.format(Locale.getDefault(), "%g", svcP), String.format(Locale.getDefault(), "%g", svcQ),
                                       String.format(Locale.getDefault(), "%g", vscCSP), String.format(Locale.getDefault(), "%g", vscCSQ),
                                       String.format(Locale.getDefault(), "%g", lineP), String.format(Locale.getDefault(), "%g", lineQ),
                                       String.format(Locale.getDefault(), "%g", danglingLineP), String.format(Locale.getDefault(), "%g", danglingLineQ),
                                       String.format(Locale.getDefault(), "%g", twtP), String.format(Locale.getDefault(), "%g", twtQ),
                                       String.format(Locale.getDefault(), "%g", tltP), String.format(Locale.getDefault(), "%g", tltQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS),
                           String.join(";", busId,
                                       String.format(Locale.getDefault(), "%g", incomingP), String.format(Locale.getDefault(), "%g", incomingQ),
                                       String.format(Locale.getDefault(), "%g", loadP), String.format(Locale.getDefault(), "%g", loadQ),
                                       String.format(Locale.getDefault(), "%g", genP), String.format(Locale.getDefault(), "%g", genQ),
                                       String.format(Locale.getDefault(), "%g", shuntP), String.format(Locale.getDefault(), "%g", shuntQ),
                                       String.format(Locale.getDefault(), "%g", svcP), String.format(Locale.getDefault(), "%g", svcQ),
                                       String.format(Locale.getDefault(), "%g", vscCSP), String.format(Locale.getDefault(), "%g", vscCSQ),
                                       String.format(Locale.getDefault(), "%g", lineP), String.format(Locale.getDefault(), "%g", lineQ),
                                       String.format(Locale.getDefault(), "%g", danglingLineP), String.format(Locale.getDefault(), "%g", danglingLineQ),
                                       String.format(Locale.getDefault(), "%g", twtP), String.format(Locale.getDefault(), "%g", twtQ),
                                       String.format(Locale.getDefault(), "%g", tltP), String.format(Locale.getDefault(), "%g", tltQ),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS,
                                       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""));
    }

    @Override
    protected ValidationWriter getBusesValidationFormatterCsvWriter(TableFormatterConfig config, Writer writer, boolean verbose, boolean compareResults) {
        return new ValidationFormatterCsvWriter("test", CsvTableFormatterFactory.class, config, writer, verbose, ValidationType.BUSES, compareResults);
    }

    @Override
    protected String getSvcsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SVCS + " check",
                           String.join(";", "id", "p", "q", "vControlled", "vController", AbstractValidationFormatterWriter.NOMINAL_V, "reactivePowerSetpoint", "voltageSetpoint"),
                           String.join(";", svcId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint)));
    }

    @Override
    protected String getSvcsVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SVCS + " check",
                           String.join(";", "id", "p", "q", "vControlled", "vController", AbstractValidationFormatterWriter.NOMINAL_V, "reactivePowerSetpoint", "voltageSetpoint",
                                       AbstractValidationFormatterWriter.CONNECTED, "regulationMode", "bMin", "bMax", AbstractValidationFormatterWriter.MAIN_COMPONENT,
                                       AbstractValidationFormatterWriter.VALIDATION),
                           String.join(";", svcId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint), Boolean.toString(connected),
                                       regulationMode.name(), String.format(Locale.getDefault(), "%g", bMin),
                                       String.format(Locale.getDefault(), "%g", bMax), Boolean.toString(mainComponent),
                                       AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getSvcsCompareContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SVCS + " check",
                           String.join(";", "id", "p", "q", "vControlled", "vController", AbstractValidationFormatterWriter.NOMINAL_V, "reactivePowerSetpoint", "voltageSetpoint",
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vControlled" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vController" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NOMINAL_V + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "reactivePowerSetpoint" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "voltageSetpoint" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", svcId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint),
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint)));
    }

    @Override
    protected String getSvcsCompareDifferentIdsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SVCS + " check",
                           String.join(";", "id", "p", "q", "vControlled", "vController", AbstractValidationFormatterWriter.NOMINAL_V, "reactivePowerSetpoint", "voltageSetpoint",
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vControlled" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vController" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NOMINAL_V + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "reactivePowerSetpoint" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "voltageSetpoint" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherSvcId,
                                       "", "", "", "", "", "", "",
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint)),
                           String.join(";", svcId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint),
                                       "", "", "", "", "", "", ""));
    }

    @Override
    protected String getSvcsCompareVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SVCS + " check",
                           String.join(";", "id", "p", "q", "vControlled", "vController", AbstractValidationFormatterWriter.NOMINAL_V, "reactivePowerSetpoint", "voltageSetpoint",
                                       AbstractValidationFormatterWriter.CONNECTED, "regulationMode", "bMin", "bMax", AbstractValidationFormatterWriter.MAIN_COMPONENT,
                                       AbstractValidationFormatterWriter.VALIDATION,
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vControlled" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vController" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NOMINAL_V + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "reactivePowerSetpoint" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "voltageSetpoint" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "regulationMode" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "bMin" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "bMax" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", svcId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint), Boolean.toString(connected),
                                       regulationMode.name(), String.format(Locale.getDefault(), "%g", bMin),
                                       String.format(Locale.getDefault(), "%g", bMax), Boolean.toString(mainComponent),
                                       AbstractValidationFormatterWriter.SUCCESS,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint), Boolean.toString(connected),
                                       regulationMode.name(), String.format(Locale.getDefault(), "%g", bMin),
                                       String.format(Locale.getDefault(), "%g", bMax), Boolean.toString(mainComponent),
                                       AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getSvcsCompareDifferentIdsVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SVCS + " check",
                           String.join(";", "id", "p", "q", "vControlled", "vController", AbstractValidationFormatterWriter.NOMINAL_V, "reactivePowerSetpoint", "voltageSetpoint",
                                       AbstractValidationFormatterWriter.CONNECTED, "regulationMode", "bMin", "bMax", AbstractValidationFormatterWriter.MAIN_COMPONENT,
                                       AbstractValidationFormatterWriter.VALIDATION,
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vControlled" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "vController" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NOMINAL_V + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "reactivePowerSetpoint" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "voltageSetpoint" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "regulationMode" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "bMin" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "bMax" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherSvcId,
                                       "", "", "", "", "", "", "", "", "", "", "", "", "",
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint), Boolean.toString(connected),
                                       regulationMode.name(), String.format(Locale.getDefault(), "%g", bMin),
                                       String.format(Locale.getDefault(), "%g", bMax), Boolean.toString(mainComponent),
                                       AbstractValidationFormatterWriter.SUCCESS),
                           String.join(";", svcId,
                                       String.format(Locale.getDefault(), "%g", -p), String.format(Locale.getDefault(), "%g", -q),
                                       String.format(Locale.getDefault(), "%g", v), String.format(Locale.getDefault(), "%g", v),
                                       String.format(Locale.getDefault(), "%g", nominalV),
                                       String.format(Locale.getDefault(), "%g", reactivePowerSetpoint),
                                       String.format(Locale.getDefault(), "%g", voltageSetpoint), Boolean.toString(connected),
                                       regulationMode.name(), String.format(Locale.getDefault(), "%g", bMin),
                                       String.format(Locale.getDefault(), "%g", bMax), Boolean.toString(mainComponent),
                                       AbstractValidationFormatterWriter.SUCCESS,
                                       "", "", "", "", "", "", "", "", "", "", "", "", ""));
    }

    @Override
    protected ValidationWriter getSvcsValidationFormatterCsvWriter(TableFormatterConfig config, Writer writer, boolean verbose, boolean compareResults) {
        return new ValidationFormatterCsvWriter("test", CsvTableFormatterFactory.class, config, writer, verbose, ValidationType.SVCS, compareResults);
    }

    @Override
    protected String getShuntsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SHUNTS + " check",
                           String.join(";", "id", "q", "expectedQ"),
                           String.join(";", shuntId,
                                       String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ)));
    }

    @Override
    protected String getShuntsVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SHUNTS + " check",
                           String.join(";", "id", "q", "expectedQ", "p", "currentSectionCount", "maximumSectionCount", "bPerSection", "v",
                                       AbstractValidationFormatterWriter.CONNECTED, "qMax", AbstractValidationFormatterWriter.NOMINAL_V,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION),
                           String.join(";", shuntId,
                                       String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ),
                                       String.format(Locale.getDefault(), "%g", p), Integer.toString(currentSectionCount),
                                       Integer.toString(maximumSectionCount), String.format(Locale.getDefault(), "%g", bPerSection),
                                       String.format(Locale.getDefault(), "%g", v), Boolean.toString(connected),
                                       String.format(Locale.getDefault(), "%g", qMax), String.format(Locale.getDefault(), "%g", nominalV),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getShuntsCompareContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SHUNTS + " check",
                           String.join(";", "id", "q", "expectedQ",
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "expectedQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", shuntId,
                                       String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ),
                                       String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ)));
    }

    @Override
    protected String getShuntsCompareDifferentIdsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SHUNTS + " check",
                           String.join(";", "id", "q", "expectedQ",
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "expectedQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherShuntId,
                                       "", "", String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ)),
                           String.join(";", shuntId,
                                       String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ), "", ""));
    }

    @Override
    protected String getShuntsCompareVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SHUNTS + " check",
                           String.join(";", "id", "q", "expectedQ", "p", "currentSectionCount", "maximumSectionCount", "bPerSection", "v",
                                       AbstractValidationFormatterWriter.CONNECTED, "qMax", AbstractValidationFormatterWriter.NOMINAL_V,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "expectedQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "currentSectionCount" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "maximumSectionCount" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "bPerSection" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "v" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "qMax" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NOMINAL_V + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", shuntId,
                                       String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ),
                                       String.format(Locale.getDefault(), "%g", p), Integer.toString(currentSectionCount),
                                       Integer.toString(maximumSectionCount), String.format(Locale.getDefault(), "%g", bPerSection),
                                       String.format(Locale.getDefault(), "%g", v), Boolean.toString(connected),
                                       String.format(Locale.getDefault(), "%g", qMax), String.format(Locale.getDefault(), "%g", nominalV),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS,
                                       String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ),
                                       String.format(Locale.getDefault(), "%g", p), Integer.toString(currentSectionCount),
                                       Integer.toString(maximumSectionCount), String.format(Locale.getDefault(), "%g", bPerSection),
                                       String.format(Locale.getDefault(), "%g", v), Boolean.toString(connected),
                                       String.format(Locale.getDefault(), "%g", qMax), String.format(Locale.getDefault(), "%g", nominalV),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getShuntsCompareDifferentIdsVerboseContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.SHUNTS + " check",
                           String.join(";", "id", "q", "expectedQ", "p", "currentSectionCount", "maximumSectionCount", "bPerSection", "v",
                                       AbstractValidationFormatterWriter.CONNECTED, "qMax", AbstractValidationFormatterWriter.NOMINAL_V,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION,
                                       "q" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "expectedQ" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "p" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "currentSectionCount" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "maximumSectionCount" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "bPerSection" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "v" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.CONNECTED + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "qMax" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.NOMINAL_V + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherShuntId,
                                       "", "", "", "", "", "", "", "", "", "", "", "",
                                       String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ),
                                       String.format(Locale.getDefault(), "%g", p), Integer.toString(currentSectionCount),
                                       Integer.toString(maximumSectionCount), String.format(Locale.getDefault(), "%g", bPerSection),
                                       String.format(Locale.getDefault(), "%g", v), Boolean.toString(connected),
                                       String.format(Locale.getDefault(), "%g", qMax), String.format(Locale.getDefault(), "%g", nominalV),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS),
                           String.join(";", shuntId,
                                       String.format(Locale.getDefault(), "%g", q), String.format(Locale.getDefault(), "%g", expectedQ),
                                       String.format(Locale.getDefault(), "%g", p), Integer.toString(currentSectionCount),
                                       Integer.toString(maximumSectionCount), String.format(Locale.getDefault(), "%g", bPerSection),
                                       String.format(Locale.getDefault(), "%g", v), Boolean.toString(connected),
                                       String.format(Locale.getDefault(), "%g", qMax), String.format(Locale.getDefault(), "%g", nominalV),
                                       Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS,
                                       "", "", "", "", "", "", "", "", "", "", "", ""));
    }

    @Override
    protected ValidationWriter getShuntsValidationFormatterCsvWriter(TableFormatterConfig config, Writer writer, boolean verbose, boolean compareResults) {
        return new ValidationFormatterCsvWriter("test", CsvTableFormatterFactory.class, config, writer, verbose, ValidationType.SHUNTS, compareResults);
    }

    @Override
    protected String getTwtsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.TWTS + " check",
                           String.join(";", "id", "error", "upIncrement", "downIncrement"),
                           String.join(";", twtId,
                                       String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                                       String.format(Locale.getDefault(), "%g", downIncrement)));
    }

    @Override
    protected String getTwtsVerboseContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS + " check",
                String.join(";", "id", "error", "upIncrement", "downIncrement", "rho", "rhoPreviousStep", "rhoNextStep", "tapPosition", "lowTapPosition",
                            "highTapPosition", "tapChangerTargetV", "regulatedSide", "v", AbstractValidationFormatterWriter.CONNECTED,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION),
                String.join(";", twtId,
                            String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                            String.format(Locale.getDefault(), "%g", downIncrement), String.format(Locale.getDefault(), "%g", rho),
                            String.format(Locale.getDefault(), "%g", rhoPreviousStep), String.format(Locale.getDefault(), "%g", rhoNextStep),
                            Integer.toString(tapPosition), Integer.toString(lowTapPosition), Integer.toString(highTapPosition),
                            String.format(Locale.getDefault(), "%g", twtTargetV), regulatedSide.name(), String.format(Locale.getDefault(), "%g", twtV),
                            Boolean.toString(connected), Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getTwtsCompareContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.TWTS + " check",
                           String.join(";", "id", "error", "upIncrement", "downIncrement",
                                       "error" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "upIncrement" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "downIncrement" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", twtId,
                                       String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                                       String.format(Locale.getDefault(), "%g", downIncrement),
                                       String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                                       String.format(Locale.getDefault(), "%g", downIncrement)));
    }

    @Override
    protected String getTwtsCompareDifferentIdsContent() {
        return String.join(System.lineSeparator(),
                           "test " + ValidationType.TWTS + " check",
                           String.join(";", "id", "error", "upIncrement", "downIncrement",
                                       "error" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "upIncrement" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                                       "downIncrement" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                           String.join(";", otherTwtId,
                                       "", "", "",
                                       String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                                       String.format(Locale.getDefault(), "%g", downIncrement)),
                           String.join(";", twtId,
                                       String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                                       String.format(Locale.getDefault(), "%g", downIncrement),
                                       "", "", ""));
    }

    @Override
    protected String getTwtsCompareVerboseContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS + " check",
                String.join(";", "id", "error", "upIncrement", "downIncrement", "rho", "rhoPreviousStep", "rhoNextStep", "tapPosition", "lowTapPosition",
                            "highTapPosition", "tapChangerTargetV", "regulatedSide", "v", AbstractValidationFormatterWriter.CONNECTED,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION,
                            "error" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "upIncrement" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "downIncrement" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "rho" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "rhoPreviousStep" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "rhoNextStep" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "tapPosition" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "lowTapPosition" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "highTapPosition" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "tapChangerTargetV" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "regulatedSide" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "v" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.CONNECTED + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                String.join(";", twtId,
                            String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                            String.format(Locale.getDefault(), "%g", downIncrement), String.format(Locale.getDefault(), "%g", rho),
                            String.format(Locale.getDefault(), "%g", rhoPreviousStep), String.format(Locale.getDefault(), "%g", rhoNextStep),
                            Integer.toString(tapPosition), Integer.toString(lowTapPosition), Integer.toString(highTapPosition),
                            String.format(Locale.getDefault(), "%g", twtTargetV), regulatedSide.name(), String.format(Locale.getDefault(), "%g", twtV),
                            Boolean.toString(connected), Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS,
                            String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                            String.format(Locale.getDefault(), "%g", downIncrement), String.format(Locale.getDefault(), "%g", rho),
                            String.format(Locale.getDefault(), "%g", rhoPreviousStep), String.format(Locale.getDefault(), "%g", rhoNextStep),
                            Integer.toString(tapPosition), Integer.toString(lowTapPosition), Integer.toString(highTapPosition),
                            String.format(Locale.getDefault(), "%g", twtTargetV), regulatedSide.name(), String.format(Locale.getDefault(), "%g", twtV),
                            Boolean.toString(connected), Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getTwtsCompareDifferentIdsVerboseContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS + " check",
                String.join(";", "id", "error", "upIncrement", "downIncrement", "rho", "rhoPreviousStep", "rhoNextStep", "tapPosition", "lowTapPosition",
                            "highTapPosition", "tapChangerTargetV", "regulatedSide", "v", AbstractValidationFormatterWriter.CONNECTED,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION,
                            "error" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "upIncrement" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "downIncrement" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "rho" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "rhoPreviousStep" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "rhoNextStep" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "tapPosition" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "lowTapPosition" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "highTapPosition" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "tapChangerTargetV" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "regulatedSide" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "v" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.CONNECTED + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                String.join(";", otherTwtId,
                            "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                            String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                            String.format(Locale.getDefault(), "%g", downIncrement), String.format(Locale.getDefault(), "%g", rho),
                            String.format(Locale.getDefault(), "%g", rhoPreviousStep), String.format(Locale.getDefault(), "%g", rhoNextStep),
                            Integer.toString(tapPosition), Integer.toString(lowTapPosition), Integer.toString(highTapPosition),
                            String.format(Locale.getDefault(), "%g", twtTargetV), regulatedSide.name(), String.format(Locale.getDefault(), "%g", twtV),
                            Boolean.toString(connected), Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS),
                String.join(";", twtId,
                            String.format(Locale.getDefault(), "%g", error), String.format(Locale.getDefault(), "%g", upIncrement),
                            String.format(Locale.getDefault(), "%g", downIncrement), String.format(Locale.getDefault(), "%g", rho),
                            String.format(Locale.getDefault(), "%g", rhoPreviousStep), String.format(Locale.getDefault(), "%g", rhoNextStep),
                            Integer.toString(tapPosition), Integer.toString(lowTapPosition), Integer.toString(highTapPosition),
                            String.format(Locale.getDefault(), "%g", twtTargetV), regulatedSide.name(), String.format(Locale.getDefault(), "%g", twtV),
                            Boolean.toString(connected), Boolean.toString(mainComponent), AbstractValidationFormatterWriter.SUCCESS,
                            "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""));
    }

    @Override
    protected ValidationWriter getTwtsValidationFormatterCsvWriter(TableFormatterConfig config, Writer writer, boolean verbose, boolean compareResults) {
        return new ValidationFormatterCsvWriter("test", CsvTableFormatterFactory.class, config, writer, verbose, ValidationType.TWTS, compareResults);
    }

    @Override
    protected String getTwtsMissingSideContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS + " check",
                String.join(";", "id", "error", "upIncrement", "downIncrement", "rho", "rhoPreviousStep", "rhoNextStep", "tapPosition", "lowTapPosition",
                            "highTapPosition", "tapChangerTargetV", "regulatedSide", "v", AbstractValidationFormatterWriter.CONNECTED,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT, AbstractValidationFormatterWriter.VALIDATION),
                String.join(";", twtId,
                            "inv", "inv", "inv", String.format(Locale.getDefault(), "%g", rho),
                            String.format(Locale.getDefault(), "%g", rhoPreviousStep), String.format(Locale.getDefault(), "%g", rhoNextStep),
                            Integer.toString(tapPosition), Integer.toString(lowTapPosition), Integer.toString(highTapPosition),
                            String.format(Locale.getDefault(), "%g", twtTargetV), "inv", "inv",
                            Boolean.toString(false), Boolean.toString(false), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getTwts3wContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS3W + " check",
                String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                            AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                            AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                            AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                            AbstractValidationFormatterWriter.NETWORK_P3, AbstractValidationFormatterWriter.EXPECTED_P3,
                            AbstractValidationFormatterWriter.NETWORK_Q3, AbstractValidationFormatterWriter.EXPECTED_Q3),
                String.join(";", twt3wId,
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3)));
    }

    @Override
    protected String getTwts3wVerboseContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS3W + " check",
                String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                            AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                            AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                            AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                            AbstractValidationFormatterWriter.NETWORK_P3, AbstractValidationFormatterWriter.EXPECTED_P3,
                            AbstractValidationFormatterWriter.NETWORK_Q3, AbstractValidationFormatterWriter.EXPECTED_Q3,
                            "u1", "u2", "u3", "starU", AbstractValidationFormatterWriter.THETA1, AbstractValidationFormatterWriter.THETA2,
                            AbstractValidationFormatterWriter.THETA3, "starTheta", "g11", "b11", "g12", "b12", "g21", "b21", "g22", "b22", "g31", "b31", "g32", "b32", "r1", "r2", "r3", "x1", "x2", "x3",
                            "ratedU1", "ratedU2", "ratedU3", "phaseAngleClock2", "phaseAngleClock3", "ratedU0", AbstractValidationFormatterWriter.CONNECTED + "1",
                            AbstractValidationFormatterWriter.CONNECTED + "2", AbstractValidationFormatterWriter.CONNECTED + "3",
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "1", AbstractValidationFormatterWriter.MAIN_COMPONENT + "2",
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "3", AbstractValidationFormatterWriter.VALIDATION),
                String.join(";", twt3wId,
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U1), String.format(Locale.getDefault(), "%g", TwtTestData.U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U3), String.format(Locale.getDefault(), "%g", TwtTestData.STAR_U),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE1)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE2)),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE3)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.STAR_ANGLE)),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G11), String.format(Locale.getDefault(), "%g", TwtTestData.B11),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G12), String.format(Locale.getDefault(), "%g", TwtTestData.B12),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G21), String.format(Locale.getDefault(), "%g", TwtTestData.B21),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G22), String.format(Locale.getDefault(), "%g", TwtTestData.B22),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G31), String.format(Locale.getDefault(), "%g", TwtTestData.B31),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G32), String.format(Locale.getDefault(), "%g", TwtTestData.B32),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R1), String.format(Locale.getDefault(), "%g", TwtTestData.R2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R3), String.format(Locale.getDefault(), "%g", TwtTestData.X1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.X2), String.format(Locale.getDefault(), "%g", TwtTestData.X3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U1), String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U3),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_2),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U0),
                            Boolean.toString(TwtTestData.CONNECTED1),
                            Boolean.toString(TwtTestData.CONNECTED2), Boolean.toString(TwtTestData.CONNECTED3), Boolean.toString(TwtTestData.MAIN_COMPONENT1),
                            Boolean.toString(TwtTestData.MAIN_COMPONENT2), Boolean.toString(TwtTestData.MAIN_COMPONENT2), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getTwts3wCompareContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS3W + " check",
                String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                            AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                            AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                            AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                            AbstractValidationFormatterWriter.NETWORK_P3, AbstractValidationFormatterWriter.EXPECTED_P3,
                            AbstractValidationFormatterWriter.NETWORK_Q3, AbstractValidationFormatterWriter.EXPECTED_Q3,
                            AbstractValidationFormatterWriter.NETWORK_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_P3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                String.join(";", twt3wId,
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3)));
    }

    @Override
    protected String getTwts3wCompareDifferentIdsContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS3W + " check",
                String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                            AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                            AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                            AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                            AbstractValidationFormatterWriter.NETWORK_P3, AbstractValidationFormatterWriter.EXPECTED_P3,
                            AbstractValidationFormatterWriter.NETWORK_Q3, AbstractValidationFormatterWriter.EXPECTED_Q3,
                            AbstractValidationFormatterWriter.NETWORK_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_P3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                String.join(";", otherTwt3wId,
                            "", "", "", "", "", "", "", "", "", "", "", "",
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3)),
                String.join(";", twt3wId,
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3),
                            "", "", "", "", "", "", "", "", "", "", "", ""));
    }

    @Override
    protected String getTwts3wCompareVerboseContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS3W + " check",
                String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                            AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                            AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                            AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                            AbstractValidationFormatterWriter.NETWORK_P3, AbstractValidationFormatterWriter.EXPECTED_P3,
                            AbstractValidationFormatterWriter.NETWORK_Q3, AbstractValidationFormatterWriter.EXPECTED_Q3,
                            "u1", "u2", "u3", "starU", AbstractValidationFormatterWriter.THETA1, AbstractValidationFormatterWriter.THETA2,
                            AbstractValidationFormatterWriter.THETA3, "starTheta", "g11", "b11", "g12", "b12", "g21", "b21", "g22", "b22", "g31", "b31", "g32", "b32", "r1", "r2", "r3", "x1", "x2", "x3",
                            "ratedU1", "ratedU2", "ratedU3", "phaseAngleClock2", "phaseAngleClock3", "ratedU0", AbstractValidationFormatterWriter.CONNECTED + "1",
                            AbstractValidationFormatterWriter.CONNECTED + "2", AbstractValidationFormatterWriter.CONNECTED + "3",
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "1", AbstractValidationFormatterWriter.MAIN_COMPONENT + "2",
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "3", AbstractValidationFormatterWriter.VALIDATION,
                            AbstractValidationFormatterWriter.NETWORK_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_P3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "u1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "u2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "u3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "starU" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.THETA1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.THETA2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.THETA3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "starTheta" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g11" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b11" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g12" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b12" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g21" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b21" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g22" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b22" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g31" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b31" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g32" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b32" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "r1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "r2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "r3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "x1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "x2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "x3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "ratedU1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "ratedU2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "ratedU3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "phaseAngleClock2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "phaseAngleClock3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "ratedU0" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.CONNECTED + "1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.CONNECTED + "2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.CONNECTED + "3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                String.join(";", twt3wId,
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U1), String.format(Locale.getDefault(), "%g", TwtTestData.U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U3), String.format(Locale.getDefault(), "%g", TwtTestData.STAR_U),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE1)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE2)),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE3)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.STAR_ANGLE)),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G11), String.format(Locale.getDefault(), "%g", TwtTestData.B11),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G12), String.format(Locale.getDefault(), "%g", TwtTestData.B12),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G21), String.format(Locale.getDefault(), "%g", TwtTestData.B21),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G22), String.format(Locale.getDefault(), "%g", TwtTestData.B22),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G31), String.format(Locale.getDefault(), "%g", TwtTestData.B31),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G32), String.format(Locale.getDefault(), "%g", TwtTestData.B32),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R1), String.format(Locale.getDefault(), "%g", TwtTestData.R2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R3), String.format(Locale.getDefault(), "%g", TwtTestData.X1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.X2), String.format(Locale.getDefault(), "%g", TwtTestData.X3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U1), String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U3),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_2),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U0),
                            Boolean.toString(TwtTestData.CONNECTED1),
                            Boolean.toString(TwtTestData.CONNECTED2), Boolean.toString(TwtTestData.CONNECTED3), Boolean.toString(TwtTestData.MAIN_COMPONENT1),
                            Boolean.toString(TwtTestData.MAIN_COMPONENT2), Boolean.toString(TwtTestData.MAIN_COMPONENT2), AbstractValidationFormatterWriter.SUCCESS,
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U1), String.format(Locale.getDefault(), "%g", TwtTestData.U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U3), String.format(Locale.getDefault(), "%g", TwtTestData.STAR_U),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE1)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE2)),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE3)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.STAR_ANGLE)),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G11), String.format(Locale.getDefault(), "%g", TwtTestData.B11),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G12), String.format(Locale.getDefault(), "%g", TwtTestData.B12),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G21), String.format(Locale.getDefault(), "%g", TwtTestData.B21),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G22), String.format(Locale.getDefault(), "%g", TwtTestData.B22),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G31), String.format(Locale.getDefault(), "%g", TwtTestData.B31),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G32), String.format(Locale.getDefault(), "%g", TwtTestData.B32),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R1), String.format(Locale.getDefault(), "%g", TwtTestData.R2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R3), String.format(Locale.getDefault(), "%g", TwtTestData.X1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.X2), String.format(Locale.getDefault(), "%g", TwtTestData.X3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U1), String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U3),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_2),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U0),
                            Boolean.toString(TwtTestData.CONNECTED1),
                            Boolean.toString(TwtTestData.CONNECTED2), Boolean.toString(TwtTestData.CONNECTED3), Boolean.toString(TwtTestData.MAIN_COMPONENT1),
                            Boolean.toString(TwtTestData.MAIN_COMPONENT2), Boolean.toString(TwtTestData.MAIN_COMPONENT2), AbstractValidationFormatterWriter.SUCCESS));
    }

    @Override
    protected String getTwts3wCompareDifferentIdsVerboseContent() {
        return String.join(System.lineSeparator(),
                "test " + ValidationType.TWTS3W + " check",
                String.join(";", "id", AbstractValidationFormatterWriter.NETWORK_P1, AbstractValidationFormatterWriter.EXPECTED_P1,
                            AbstractValidationFormatterWriter.NETWORK_Q1, AbstractValidationFormatterWriter.EXPECTED_Q1,
                            AbstractValidationFormatterWriter.NETWORK_P2, AbstractValidationFormatterWriter.EXPECTED_P2,
                            AbstractValidationFormatterWriter.NETWORK_Q2, AbstractValidationFormatterWriter.EXPECTED_Q2,
                            AbstractValidationFormatterWriter.NETWORK_P3, AbstractValidationFormatterWriter.EXPECTED_P3,
                            AbstractValidationFormatterWriter.NETWORK_Q3, AbstractValidationFormatterWriter.EXPECTED_Q3,
                            "u1", "u2", "u3", "starU", AbstractValidationFormatterWriter.THETA1, AbstractValidationFormatterWriter.THETA2,
                            AbstractValidationFormatterWriter.THETA3, "starTheta", "g11", "b11", "g12", "b12", "g21", "b21", "g22", "b22", "g31", "b31", "g32", "b32", "r1", "r2", "r3", "x1", "x2", "x3",
                            "ratedU1", "ratedU2", "ratedU3", "phaseAngleClock2", "phaseAngleClock3", "ratedU0", AbstractValidationFormatterWriter.CONNECTED + "1",
                            AbstractValidationFormatterWriter.CONNECTED + "2", AbstractValidationFormatterWriter.CONNECTED + "3",
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "1", AbstractValidationFormatterWriter.MAIN_COMPONENT + "2",
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "3", AbstractValidationFormatterWriter.VALIDATION,
                            AbstractValidationFormatterWriter.NETWORK_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_P3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_P3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.NETWORK_Q3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.EXPECTED_Q3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "u1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "u2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "u3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "starU" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.THETA1 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.THETA2 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.THETA3 + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "starTheta" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g11" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b11" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g12" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b12" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g21" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b21" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g22" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b22" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g31" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b31" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "g32" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "b32" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "r1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "r2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "r3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "x1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "x2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "x3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "ratedU1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX, "ratedU2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "ratedU3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "phaseAngleClock2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "phaseAngleClock3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            "ratedU0" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.CONNECTED + "1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.CONNECTED + "2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.CONNECTED + "3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "1" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "2" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.MAIN_COMPONENT + "3" + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX,
                            AbstractValidationFormatterWriter.VALIDATION + AbstractValidationFormatterWriter.POST_COMPUTATION_SUFFIX),
                String.join(";", otherTwt3wId,
                            "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U1), String.format(Locale.getDefault(), "%g", TwtTestData.U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U3), String.format(Locale.getDefault(), "%g", TwtTestData.STAR_U),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE1)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE2)),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE3)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.STAR_ANGLE)),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G11), String.format(Locale.getDefault(), "%g", TwtTestData.B11),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G12), String.format(Locale.getDefault(), "%g", TwtTestData.B12),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G21), String.format(Locale.getDefault(), "%g", TwtTestData.B21),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G22), String.format(Locale.getDefault(), "%g", TwtTestData.B22),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G31), String.format(Locale.getDefault(), "%g", TwtTestData.B31),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G32), String.format(Locale.getDefault(), "%g", TwtTestData.B32),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R1), String.format(Locale.getDefault(), "%g", TwtTestData.R2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R3), String.format(Locale.getDefault(), "%g", TwtTestData.X1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.X2), String.format(Locale.getDefault(), "%g", TwtTestData.X3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U1), String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U3),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_2),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U0),
                            Boolean.toString(TwtTestData.CONNECTED1),
                            Boolean.toString(TwtTestData.CONNECTED2), Boolean.toString(TwtTestData.CONNECTED3), Boolean.toString(TwtTestData.MAIN_COMPONENT1),
                            Boolean.toString(TwtTestData.MAIN_COMPONENT2), Boolean.toString(TwtTestData.MAIN_COMPONENT2), AbstractValidationFormatterWriter.SUCCESS),
                String.join(";", twt3wId,
                            String.format(Locale.getDefault(), "%g", TwtTestData.P1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q1), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q2), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.P3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_P3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.Q3), String.format(Locale.getDefault(), "%g", TwtTestData.COMPUTED_Q3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U1), String.format(Locale.getDefault(), "%g", TwtTestData.U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.U3), String.format(Locale.getDefault(), "%g", TwtTestData.STAR_U),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE1)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE2)),
                            String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.ANGLE3)), String.format(Locale.getDefault(), "%g", Math.toRadians(TwtTestData.STAR_ANGLE)),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G11), String.format(Locale.getDefault(), "%g", TwtTestData.B11),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G12), String.format(Locale.getDefault(), "%g", TwtTestData.B12),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G21), String.format(Locale.getDefault(), "%g", TwtTestData.B21),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G22), String.format(Locale.getDefault(), "%g", TwtTestData.B22),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G31), String.format(Locale.getDefault(), "%g", TwtTestData.B31),
                            String.format(Locale.getDefault(), "%g", TwtTestData.G32), String.format(Locale.getDefault(), "%g", TwtTestData.B32),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R1), String.format(Locale.getDefault(), "%g", TwtTestData.R2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.R3), String.format(Locale.getDefault(), "%g", TwtTestData.X1),
                            String.format(Locale.getDefault(), "%g", TwtTestData.X2), String.format(Locale.getDefault(), "%g", TwtTestData.X3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U1), String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U2),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U3),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_2),
                            String.format(Locale.getDefault(), "%d", TwtTestData.PHASE_ANGLE_CLOCK_3),
                            String.format(Locale.getDefault(), "%g", TwtTestData.RATED_U0),
                            Boolean.toString(TwtTestData.CONNECTED1),
                            Boolean.toString(TwtTestData.CONNECTED2), Boolean.toString(TwtTestData.CONNECTED3), Boolean.toString(TwtTestData.MAIN_COMPONENT1),
                            Boolean.toString(TwtTestData.MAIN_COMPONENT2), Boolean.toString(TwtTestData.MAIN_COMPONENT2), AbstractValidationFormatterWriter.SUCCESS,
                            "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""));
    }

    @Override
    protected ValidationWriter getTwts3wValidationFormatterCsvWriter(TableFormatterConfig config, Writer writer, boolean verbose, boolean compareResults) {
        return new ValidationFormatterCsvWriter("test", CsvTableFormatterFactory.class, config, writer, verbose, ValidationType.TWTS3W, compareResults);
    }

}