blob: 19869341f87c5e3945693f99892afa4f112528e3 [file] [log] [blame]
//========================================================================
//
// check_cidfontswidthsbuilder.cpp
//
// This file is licensed under the GPLv2 or later
//
// Copyright 2023 g10 Code GmbH, Author: Sune Stolborg Vuorela <sune@vuorela.dk>
//========================================================================
#include "CIDFontsWidthsBuilder.h"
#include <QtTest/QTest>
class TestCIDFontsWidthsBuilder : public QObject
{
Q_OBJECT
public:
using QObject::QObject;
private Q_SLOTS:
void testEmpty();
void testSingle();
void testSimpleSequence();
};
void TestCIDFontsWidthsBuilder::testEmpty()
{
CIDFontsWidthsBuilder b;
auto segments = b.takeSegments();
QCOMPARE(segments.size(), 0);
}
static bool compare(const CIDFontsWidthsBuilder::Segment &segment1, const CIDFontsWidthsBuilder::Segment &segment2)
{
return std::visit(
[](const auto &s1, const auto &s2) {
using T1 = std::decay_t<decltype(s1)>;
using T2 = std::decay_t<decltype(s2)>;
if constexpr (!std::is_same_v<T1, T2>) {
return false;
} else if constexpr (std::is_same_v<T1, CIDFontsWidthsBuilder::ListSegment>) {
return s1.first == s2.first && s1.widths == s2.widths;
} else if constexpr (std::is_same_v<T1, CIDFontsWidthsBuilder::RangeSegment>) {
return s1.first == s2.first && s1.last == s2.last && s1.width == s2.width;
} else {
return false;
}
},
segment1, segment2);
}
void TestCIDFontsWidthsBuilder::testSingle()
{
CIDFontsWidthsBuilder b;
b.addWidth(0, 10);
auto segments = b.takeSegments();
QCOMPARE(segments.size(), 1);
auto segment0 = CIDFontsWidthsBuilder::ListSegment { 0, { 10 } };
QVERIFY(compare(segments[0], segment0));
}
void TestCIDFontsWidthsBuilder::testSimpleSequence()
{
CIDFontsWidthsBuilder b;
for (int i = 0; i < 2; i++) { // repeat to verify that takeSegments resets
b.addWidth(0, 10);
b.addWidth(1, 10);
b.addWidth(2, 10);
b.addWidth(3, 10);
b.addWidth(4, 10);
b.addWidth(5, 20);
b.addWidth(6, 21);
b.addWidth(7, 21);
b.addWidth(8, 20);
b.addWidth(9, 10);
b.addWidth(10, 10);
b.addWidth(11, 10);
b.addWidth(12, 10);
b.addWidth(13, 10);
b.addWidth(14, 20);
b.addWidth(15, 21);
b.addWidth(16, 21);
b.addWidth(17, 20);
b.addWidth(19, 20);
auto segments = b.takeSegments();
QCOMPARE(segments.size(), 5);
auto segment0 = CIDFontsWidthsBuilder::RangeSegment { 0, 4, 10 };
QVERIFY(compare(segments[0], segment0));
auto segment1 = CIDFontsWidthsBuilder::ListSegment { 5, { 20, 21, 21, 20 } };
QVERIFY(compare(segments[1], segment1));
auto segment2 = CIDFontsWidthsBuilder::RangeSegment { 9, 13, 10 };
QVERIFY(compare(segments[2], segment2));
auto segment3 = CIDFontsWidthsBuilder::ListSegment { 14, { 20, 21, 21, 20 } };
QVERIFY(compare(segments[3], segment3));
auto segment4 = CIDFontsWidthsBuilder::ListSegment { 19, { 20 } };
QVERIFY(compare(segments[4], segment4));
}
}
QTEST_GUILESS_MAIN(TestCIDFontsWidthsBuilder);
#include "check_cidfontswidthsbuilder.moc"