mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-08 13:50:20 +00:00
140 lines
4.7 KiB
C++
140 lines
4.7 KiB
C++
#include "prx/libc/include/general/VabiMacros.hpp"
|
|
#include "prx/libfontconfig/libfontconfig.hpp"
|
|
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <initializer_list>
|
|
|
|
static void Require(bool condition, int line) {
|
|
if (!condition) {
|
|
std::fprintf(stderr, "fontconfig check failed at line %d\n", line);
|
|
std::abort();
|
|
}
|
|
}
|
|
#define Check(value) Require((value), __LINE__)
|
|
|
|
static bool Same(const FcMatrix& matrix, double xx, double xy, double yx, double yy) {
|
|
return matrix.xx == xx && matrix.xy == xy && matrix.yx == yx && matrix.yy == yy;
|
|
}
|
|
|
|
static void CheckMatrix() {
|
|
const FcMatrix first = {1, 2, 3, 4};
|
|
const FcMatrix second = {5, 6, 7, 8};
|
|
FcMatrix result = {};
|
|
FcMatrixMultiply(&result, &first, &second);
|
|
Check(Same(result, 19, 22, 43, 50));
|
|
FcMatrixMultiply(&result, &second, &first);
|
|
Check(Same(result, 23, 34, 31, 46));
|
|
|
|
FcMatrix left = first;
|
|
FcMatrixMultiply(&left, &left, &second);
|
|
Check(Same(left, 19, 22, 43, 50));
|
|
FcMatrix right = second;
|
|
FcMatrixMultiply(&right, &first, &right);
|
|
Check(Same(right, 19, 22, 43, 50));
|
|
FcMatrix both = first;
|
|
FcMatrixMultiply(&both, &both, &both);
|
|
Check(Same(both, 7, 10, 15, 22));
|
|
}
|
|
|
|
static void CheckNullSets() {
|
|
FcCharSetDestroy(nullptr);
|
|
FcCharSet* set = FcCharSetCreate();
|
|
Check(set != nullptr);
|
|
int changed = 7;
|
|
Check(FcCharSetAddChar(nullptr, 'a') == 0);
|
|
Check(FcCharSetMerge(nullptr, set, &changed) == 0);
|
|
Check(FcCharSetMerge(set, nullptr, &changed) == 0);
|
|
Check(changed == 7);
|
|
Check(FcCharSetSubtractCount(nullptr, set) == 0);
|
|
Check(FcCharSetSubtractCount(set, nullptr) == 0);
|
|
FcCharSetDestroy(set);
|
|
}
|
|
|
|
static void CheckSubtract() {
|
|
FcCharSet* first = FcCharSetCreate();
|
|
FcCharSet* second = FcCharSetCreate();
|
|
Check(FcCharSetSubtractCount(first, second) == 0);
|
|
for (uint32_t character : {0x0u, 0x1Fu, 0x20u, 0xFFu, 0x100u, 0x10FFFFu}) {
|
|
Check(FcCharSetAddChar(first, character) == 1);
|
|
}
|
|
Check(FcCharSetAddChar(first, 0x20) == 1);
|
|
Check(FcCharSetSubtractCount(first, second) == 6);
|
|
Check(FcCharSetSubtractCount(second, first) == 0);
|
|
Check(FcCharSetSubtractCount(first, first) == 0);
|
|
Check(FcCharSetAddChar(second, 0x1F) == 1);
|
|
Check(FcCharSetAddChar(second, 0x100) == 1);
|
|
Check(FcCharSetAddChar(second, 'a') == 1);
|
|
Check(FcCharSetSubtractCount(first, second) == 4);
|
|
Check(FcCharSetSubtractCount(second, first) == 1);
|
|
FcCharSetDestroy(second);
|
|
FcCharSetDestroy(first);
|
|
}
|
|
|
|
static void CheckCharacterRange() {
|
|
FcCharSet* set = FcCharSetCreate();
|
|
FcCharSet* empty = FcCharSetCreate();
|
|
Check(FcCharSetAddChar(set, 0x01000000) == 0);
|
|
Check(FcCharSetAddChar(set, 0x01000041) == 0);
|
|
Check(FcCharSetAddChar(set, 0xFFFFFFFF) == 0);
|
|
Check(FcCharSetSubtractCount(set, empty) == 0);
|
|
Check(FcCharSetAddChar(set, 0x00FFFFFF) == 1);
|
|
Check(FcCharSetSubtractCount(set, empty) == 1);
|
|
Check(FcCharSetAddChar(set, 0x01000041) == 0);
|
|
Check(FcCharSetSubtractCount(set, empty) == 1);
|
|
Check(FcCharSetAddChar(set, 0x41) == 1);
|
|
Check(FcCharSetSubtractCount(set, empty) == 2);
|
|
FcCharSetDestroy(empty);
|
|
FcCharSetDestroy(set);
|
|
}
|
|
|
|
static void CheckCharacterAliasesExistingLeaf() {
|
|
FcCharSet* set = FcCharSetCreate();
|
|
FcCharSet* low = FcCharSetCreate();
|
|
Check(FcCharSetAddChar(set, 0x42) == 1);
|
|
Check(FcCharSetAddChar(set, 0x01000041) == 1);
|
|
Check(FcCharSetAddChar(low, 0x41) == 1);
|
|
Check(FcCharSetAddChar(low, 0x42) == 1);
|
|
Check(FcCharSetSubtractCount(set, low) == 0);
|
|
Check(FcCharSetSubtractCount(low, set) == 0);
|
|
FcCharSetDestroy(low);
|
|
FcCharSetDestroy(set);
|
|
}
|
|
|
|
static void CheckMerge() {
|
|
FcCharSet* target = FcCharSetCreate();
|
|
FcCharSet* source = FcCharSetCreate();
|
|
Check(FcCharSetAddChar(target, 'a') == 1);
|
|
Check(FcCharSetAddChar(source, 'a') == 1);
|
|
Check(FcCharSetAddChar(source, 0x3042) == 1);
|
|
|
|
int changed = 0;
|
|
Check(FcCharSetMerge(target, source, &changed) == 1);
|
|
Check(changed == 1);
|
|
Check(FcCharSetSubtractCount(source, target) == 0);
|
|
Check(FcCharSetSubtractCount(target, source) == 0);
|
|
|
|
changed = 7;
|
|
Check(FcCharSetMerge(target, source, &changed) == 1);
|
|
Check(changed == 0);
|
|
Check(FcCharSetMerge(target, target, &changed) == 1);
|
|
Check(changed == 0);
|
|
|
|
Check(FcCharSetAddChar(source, 'b') == 1);
|
|
Check(FcCharSetMerge(target, source, nullptr) == 1);
|
|
Check(FcCharSetSubtractCount(source, target) == 0);
|
|
Check(FcCharSetMerge(target, target, nullptr) == 1);
|
|
Check(FcCharSetSubtractCount(target, source) == 0);
|
|
FcCharSetDestroy(source);
|
|
FcCharSetDestroy(target);
|
|
}
|
|
|
|
int main() {
|
|
CheckMatrix();
|
|
CheckNullSets();
|
|
CheckSubtract();
|
|
CheckCharacterRange();
|
|
CheckCharacterAliasesExistingLeaf();
|
|
CheckMerge();
|
|
return 0;
|
|
}
|