Contest benchmarking

[Java]

package com.company;

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.nio.CharBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.EnumSet;

public class Bench {

    public static void main(String[] args) throws IOException {

        var start = System.currentTimeMillis();
        parse();
        var took = (System.currentTimeMillis() - start) / 1000f;
        System.out.println(took);
        System.out.println("Used memory: " + ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed() / 1024 / 1024);
    }

    private static void parse() throws IOException {

        var path = Paths.get("C:\\Users\\cosmi\\Desktop\\random_numbers.txt");
        var charSet = StandardCharsets.UTF_8;
        var sb = new StringBuilder();
        try (var reader = Files.newBufferedReader(path, charSet)) {
            String line;
            while ((line = reader.readLine()) != null) {
                var x = Double.parseDouble(line.split("\t")[0]);
                var y = Double.parseDouble(line.split("\t")[1]);
                double res = x / y;
                sb.append(x).append("\t").append(y).append("\t").append(res).append("\n"); //desi lumea zice sa nu folosesti sb
            }
        }
        writeResult(sb);
    }

    private static void writeResult(StringBuilder data) throws IOException {
        var data1 = CharBuffer.wrap(data);
        var pathToWrite = Paths.get("C:\\Users\\cosmi\\Desktop\\results_contest_devforum.txt");

        try (FileChannel fileChannel = (FileChannel) Files
                .newByteChannel(pathToWrite, EnumSet.of(
                        StandardOpenOption.READ,
                        StandardOpenOption.WRITE,
                        StandardOpenOption.TRUNCATE_EXISTING))) {

            MappedByteBuffer mappedByteBuffer = fileChannel
                    .map(FileChannel.MapMode.READ_WRITE, 0, data1.length());

            if (mappedByteBuffer != null) {
                mappedByteBuffer.put(
                        StandardCharsets.UTF_8.encode(data1));
            }
        }
    }
}

Dureaza aproximativ 12 secunde.

Poti testa ca datele folosite pentru tiparire sunt corecte (numar zecimale, texte, etc).

Daca gasesti un driver “dummy” care arunca datele in format text, poti parsa rezultatul.

Bănuiesc că realizezi că ăsta e posibil să fie un task mai complex decât generarea în sine a facturii, right? :slight_smile:

1 Like

Sunt oarecum putine locuri unde se testeaza automat aplicatiile comparativ cu volumul de software care se produce pe piata tocmai din motivul enuntat de @serghei. Uneori business-ul nu sta dupa tine…

Fara teste automate nu poti avea agile si un minim de calitate, la un moment dat produsul ajunge in punctul in care la un release iti trebuie mai mult de o saptamana de testare manuala chiar si cu minimul de teste critice. Daca nu ai teste automate o sa ai o viata mizerabila la fiecare release. (in special la noi, fiindca toata echipa testeaza)

Asa ca incercam sa automatizam inclusiv smoke test-urile pe productie. (cel putin in mediul de productie, nu si cu date de productie)

Testele importante sunt testele end-to-end, adica incerci sa faci ceva ce ar face un utilizator de la A-Z cerut in story. Restul sunt teste ca sa nu ai regression, sa stii ca n-ai stricat o parte importanta din aplicatie, dar normal ca nu testezi toate detaliile. Oricum si cu testele automate vrei sa dureze cat mai putin.

Dupa daca ai teste automate, ai timp de teste de explorare cateva ore, aici poti gasi probleme pe care nu le-ai gasi altcumva fiindca nu sunt acoperite de test case-uri.

Unit testele iti ofera mai mult o documentatie si o siguranta ca poti modifica/refactura codul decat sa iti ofere siguranta ca aplicatia va functiona ok.

Ai precizat problema cu imprimanta si hartia, daca use case-ul necesita poti crea inclusiv un driver de imprimanta virtuala care sa iti returneze o poza la ce ar lista in PostScript sau PCL. Daca o imprimanta nu respecta dupa standardul sau e configurata gresit nu mai e problema ta.

1 Like