mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-23 05:42:29 +00:00
Initial import
This commit is contained in:
commit
c91b3c5006
14915 changed files with 590219 additions and 0 deletions
155
test/dsp/scale/magikarp_test.c
Normal file
155
test/dsp/scale/magikarp_test.c
Normal file
|
@ -0,0 +1,155 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ This program is free software; you can redistribute it and/or modify │
|
||||
│ it under the terms of the GNU General Public License as published by │
|
||||
│ the Free Software Foundation; version 2 of the License. │
|
||||
│ │
|
||||
│ This program is distributed in the hope that it will be useful, but │
|
||||
│ WITHOUT ANY WARRANTY; without even the implied warranty of │
|
||||
│ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU │
|
||||
│ General Public License for more details. │
|
||||
│ │
|
||||
│ You should have received a copy of the GNU General Public License │
|
||||
│ along with this program; if not, write to the Free Software │
|
||||
│ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA │
|
||||
│ 02110-1301 USA │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "dsp/scale/scale.h"
|
||||
#include "libc/fmt/bing.h"
|
||||
#include "libc/nexgen32e/x86feature.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/testlib/ezbench.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/x/x.h"
|
||||
#include "tool/viz/lib/formatstringtable-testlib.h"
|
||||
|
||||
TEST(magikarp, testConvolve) {
|
||||
signed char K[8] = {-1, -3, 3, 17, 17, 3, -3, -1};
|
||||
EXPECT_BINEQ(
|
||||
u"λλ λλ λλ λλ "
|
||||
u"λλ λλ λλ λλ "
|
||||
u"λλ λλ λλ λλ ",
|
||||
cDecimate2xUint8x8(32 * 3,
|
||||
tgc(tunbing(u"λλλλ λλλλ λλλλ λλλλ "
|
||||
u"λλλλ λλλλ λλλλ λλλλ "
|
||||
u"λλλλ λλλλ λλλλ λλλλ ")),
|
||||
K));
|
||||
}
|
||||
|
||||
TEST(magikarp, testConvolveMin1) {
|
||||
signed char K[8] = {-1, -3, 3, 17, 17, 3, -3, -1};
|
||||
EXPECT_BINEQ(
|
||||
u"λλ λλ λλ λλ "
|
||||
u"λλ λλ λλ λλ "
|
||||
u"λλ λλ λλ λλ ",
|
||||
cDecimate2xUint8x8(32 * 3 - 1,
|
||||
tgc(tunbing(u"λλλλ λλλλ λλλλ λλλλ "
|
||||
u"λλλλ λλλλ λλλλ λλλλ "
|
||||
u"λλλλ λλλλ λλλλ λλλλ ")),
|
||||
K));
|
||||
}
|
||||
|
||||
TEST(magikarp, testConvolve2) {
|
||||
signed char K[8] = {-1, -3, 3, 17, 17, 3, -3, -1};
|
||||
EXPECT_BINEQ(
|
||||
u" ☻♣•○♂♪☼◄‼§↨↓←↔▼"
|
||||
u"!#%‘)+-/13579;=⁇"
|
||||
u"ACEGIKMOQSUWY[]_"
|
||||
u"acegikmoqsuwy{}⌂"
|
||||
u"üâàçëïìÅæôòùÖ¢¥ƒ"
|
||||
u"íúѺ⌐½¡»▒│╡╖╣╗╜┐"
|
||||
u"┴├┼╟╔╦═╧╤╙╒╫┘█▌▀"
|
||||
u"ßπστΘδφ∩±≤⌡≈∙√²λ",
|
||||
cDecimate2xUint8x8(256,
|
||||
tgc(tunbing(u" ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼"
|
||||
u" !“#$%&‘()*+,-./0123456789:;<=>⁇"
|
||||
u"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[╲]^_"
|
||||
u"`abcdefghijklmnopqrstuvwxyz{|}~⌂"
|
||||
u"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥€ƒ"
|
||||
u"áíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐"
|
||||
u"└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀"
|
||||
u"αßΓπΣσμτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■λ")),
|
||||
K));
|
||||
}
|
||||
|
||||
const char kDieWelle[] = "\
|
||||
nnooooooppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqppppppppppoooooonn\
|
||||
ooooooppppppppqqqqqqqqqqpppppppppppppqqqqqqqqqqppppppppoooooo\
|
||||
oooopppppppqqqqqqqpppppppppppppppppppppppppqqqqqqqpppppppoooo\
|
||||
oopppppppqqqqqqppppppppppoooooooooooppppppppppqqqqqqpppppppoo\
|
||||
pppppppqqqqqpppppppoooooooonnnnnnnoooooooopppppppqqqqqppppppp\
|
||||
pppppqqqqqppppppooooonnnnnnnmmmmmnnnnnnnoooooppppppqqqqqppppp\
|
||||
ppppqqqqppppppooonnnnnmmmmmmmmmmmmmmmmmnnnnnoooppppppqqqqpppp\
|
||||
ppqqqqqpppppooonnnmmmmmlllllllllllllllmmmmmnnnooopppppqqqqqpp\
|
||||
pqqqqqppppooonnnmmmmlllllllllllllllllllllmmmmnnnoooppppqqqqqp\
|
||||
qqqqpppppooonnmmmlllllllllllllllllllllllllllmmmnnooopppppqqqq\
|
||||
qqqqppppooonnmmmllllllllllllmmmmmllllllllllllmmmnnoooppppqqqq\
|
||||
qqqppppooonnmmmlllllllllmmmnnnnnnnmmmlllllllllmmmnnoooppppqqq\
|
||||
qqpppppoonnmmmllllllllmmnoopqqqqqpoonmmllllllllmmmnnoopppppqq\
|
||||
qqppppooonnmmllllllllmnnpqrsuvvvusrqpnnmllllllllmmnnoooppppqq\
|
||||
qqppppoonnmmmlllllllmmnpqsuxyyyyyxusqpnmmlllllllmmmnnooppppqq\
|
||||
qqppppoonnmmmlllllllmnoprtxyyyyyyyxtrponmlllllllmmmnnooppppqq\
|
||||
qqppppoonnmmmlllllllmnoprtwyyyyyyywtrponmlllllllmmmnnooppppqq\
|
||||
qqppppoonnnmmlllllllmmnoprtvxyyyxvtrponmmlllllllmmnnnooppppqq\
|
||||
qqppppooonnmmllllllllmmnopqrsssssrqponmmllllllllmmnnoooppppqq\
|
||||
qqqppppoonnnmmlllllllllmmnnoopppoonnmmlllllllllmmnnnooppppqqq\
|
||||
qqqpppppoonnmmmllllllllllmmmmmmmmmmmllllllllllmmmnnoopppppqqq\
|
||||
qqqqppppooonnnmmmlllllllllllllllllllllllllllmmmnnnoooppppqqqq\
|
||||
pqqqqpppppoonnnmmmlllllllllllllllllllllllllmmmnnnoopppppqqqqp\
|
||||
ppqqqqpppppooonnnmmmmlllllllllllllllllllmmmmnnnooopppppqqqqpp\
|
||||
pppqqqqppppppooonnnnmmmmmlllllllllllmmmmmnnnnoooppppppqqqqppp\
|
||||
ppppqqqqqppppppoooonnnnnmmmmmmmmmmmmmnnnnnooooppppppqqqqqpppp\
|
||||
ppppppqqqqqpppppppooooonnnnnnnnnnnnnnnooooopppppppqqqqqpppppp\
|
||||
opppppppqqqqqppppppppoooooooooooooooooooppppppppqqqqqpppppppo\
|
||||
ooopppppppqqqqqqpppppppppppppppppppppppppppppqqqqqqpppppppooo\
|
||||
ooooopppppppqqqqqqqqqpppppppppppppppppppqqqqqqqqqpppppppooooo\
|
||||
noooooopppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpppppppppoooooon\
|
||||
nnnooooooopppppppppppqqqqqqqqqqqqqqqqqqqpppppppppppooooooonnn";
|
||||
|
||||
TEST(magikarp, testHalfYX) {
|
||||
static unsigned char M[32][61];
|
||||
memcpy(M, kDieWelle, sizeof(M));
|
||||
Magikarp2xY(32, 61, M, 32, 61);
|
||||
Magikarp2xX(32, 61, M, 16, 61);
|
||||
EXPECT_STREQ(u"\n\
|
||||
nooppppqqqqqqqqqqqqqqqqqpppooon\n\
|
||||
opppqqqqqppppoppoppppqqqqqppppo\n\
|
||||
ppqqqqpppooooommmoooopppqqqqppp\n\
|
||||
pqqqppponmmllllllllmmmnpppqqqqp\n\
|
||||
qqqppoomllllllllllllllmnoppqqqq\n\
|
||||
qqppoomlllllllmmmllllllmnoppqqq\n\
|
||||
qppponlllllmoqttspnlllllmnoppqq\n\
|
||||
qpponmllllmosyzz{vqnllllmmoppqq\n\
|
||||
qpponmllllmorwzzyupnllllmmoppqq\n\
|
||||
qqpponlllllloprrqomlllllmnoppqq\n\
|
||||
qqpponnmlllllllllllllllmnnppqqq\n\
|
||||
qqqppponmlllllllllllllnooppqqqp\n\
|
||||
pqqqqpppoommmlllllmmmoopppqqqpp\n\
|
||||
pppqqqqpppooooooooooppppqqqqppp\n\
|
||||
oopppqqqqqqpppppppppqqqqqqpppoo\n\
|
||||
noopopppqqqqqqqqqqqqqqqppoooonn",
|
||||
gc(bingblit(32, 61, M, 16, 31)));
|
||||
}
|
||||
|
||||
#define HDX (1920 / 4)
|
||||
#define HDY (1080 / 4)
|
||||
|
||||
BENCH(magikarp, bench) { /* 30ms */
|
||||
unsigned char kMagkern[16] = {4, 12, 12, 4};
|
||||
signed char kMagikarp[16] = {-1, -3, 3, 17, 17, 3, -3, -1};
|
||||
unsigned char(*Me)[HDY][HDX] = tgc(tmalloc((HDX + 1) * (HDY + 1)));
|
||||
unsigned char(*Mo)[HDY][HDX] = tgc(tmalloc((HDX + 1) * (HDY + 1)));
|
||||
if (X86_HAVE(AVX)) {
|
||||
EZBENCH2("Decimate2xUint8x8", donothing,
|
||||
cDecimate2xUint8x8((HDX * HDY - 16 - 8) / 2 / 8 * 8, (void *)Me,
|
||||
kMagikarp));
|
||||
}
|
||||
EZBENCH2("cDecimate2xUint8x8", donothing,
|
||||
cDecimate2xUint8x8((HDX * HDY - 16 - 8) / 2 / 8 * 8, (void *)Me,
|
||||
kMagikarp));
|
||||
EZBENCH2("Magikarp2xY", donothing, Magikarp2xY(HDY, HDX, *Me, HDY, HDX));
|
||||
EZBENCH2("Magikarp2xX", donothing, Magikarp2xX(HDY, HDX, *Mo, HDY, HDX));
|
||||
}
|
423
test/dsp/scale/scale_test.c
Normal file
423
test/dsp/scale/scale_test.c
Normal file
|
@ -0,0 +1,423 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ This program is free software; you can redistribute it and/or modify │
|
||||
│ it under the terms of the GNU General Public License as published by │
|
||||
│ the Free Software Foundation; version 2 of the License. │
|
||||
│ │
|
||||
│ This program is distributed in the hope that it will be useful, but │
|
||||
│ WITHOUT ANY WARRANTY; without even the implied warranty of │
|
||||
│ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU │
|
||||
│ General Public License for more details. │
|
||||
│ │
|
||||
│ You should have received a copy of the GNU General Public License │
|
||||
│ along with this program; if not, write to the Free Software │
|
||||
│ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA │
|
||||
│ 02110-1301 USA │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "dsp/core/c1331.h"
|
||||
#include "dsp/core/c161.h"
|
||||
#include "dsp/core/core.h"
|
||||
#include "dsp/core/half.h"
|
||||
#include "dsp/scale/scale.h"
|
||||
#include "libc/fmt/bing.h"
|
||||
#include "libc/macros.h"
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/stdio/stdio.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/testlib/ezbench.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/x/x.h"
|
||||
#include "tool/viz/lib/formatstringtable-testlib.h"
|
||||
|
||||
void *AbsoluteDifference(int yn, int xn, unsigned char C[yn][xn], int ays,
|
||||
int axs, const unsigned char A[ays][axs], int bys,
|
||||
int bxs, const unsigned char B[bys][bxs]) {
|
||||
int y, x;
|
||||
for (y = 0; y < yn; ++y) {
|
||||
for (x = 0; x < xn; ++x) {
|
||||
C[y][x] = ABS(A[y][x] - B[y][x]);
|
||||
}
|
||||
}
|
||||
return C;
|
||||
}
|
||||
|
||||
const char kDieWelle[] = "\
|
||||
pppppppppppppppppoooooooooooooooooooooooooooppppppppppppppppp\
|
||||
pmpppppppppppooooooonnnnnnnnnnnnnnnnnnnnnooooooopppppppppppsp\
|
||||
ppppppppppoooooonnnnnnnnmmmmmmmmmmmmmnnnnnnnnoooooopppppppppp\
|
||||
ppppppppooooonnnnnnmmmmmmmmmmmmmmmmmmmmmmmnnnnnnooooopppppppp\
|
||||
ppppppoooonnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnoooopppppp\
|
||||
ppppoooonnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnoooopppp\
|
||||
pppoooonnnnmmmmmmmmmmmmmmmnnnnnnnnnmmmmmmmmmmmmmmmnnnnooooppp\
|
||||
ppooonnnnmmmmmmmmmmmmnnnnnnooooooonnnnnnmmmmmmmmmmmmnnnnooopp\
|
||||
pooonnnnmmmmmmmmmmnnnnoooopppppppppoooonnnnmmmmmmmmmmnnnnooop\
|
||||
ooonnnnmmmmmmmmmnnnooopppqqqqrrrqqqqpppooonnnmmmmmmmmmnnnnooo\
|
||||
oonnnnmmmmmmmmmnnnooppqqrrsssssssssrrqqppoonnnmmmmmmmmmnnnnoo\
|
||||
oonnnmmmmmmmmmnnooppqrrssttuuuuuuuttssrrqppoonnmmmmmmmmmnnnoo\
|
||||
onnnnmmmmmmmmnnoopqqrsstuuvvvvvvvvvuutssrqqpoonnmmmmmmmmnnnno\
|
||||
onnnmmmmmmmmnnnoppqrsttuvvwwwxxxwwwvvuttsrqpponnnmmmmmmmmnnno\
|
||||
onnnmmmmmmmmnnoopqrrstuvvwxxxyyyxxxwvvutsrrqpoonnmmmmmmmmnnno\
|
||||
onnnmmmmmmmmnnoopqrsttuvwwxxyyyyyxxwwvuttsrqpoonnmmmmmmmmnnno\
|
||||
onnnmmmmmmmmnnoopqrsstuvwwxxyyyyyxxwwvutssrqpoonnmmmmmmmmnnno\
|
||||
onnnmmmmmmmmnnoopqqrstuuvwwxxxxxxxwwvuutsrqqpoonnmmmmmmmmnnno\
|
||||
onnnmmmmmmmmmnnoopqrrstuuvvwwwwwwwvvuutsrrqpoonnmmmmmmmmmnnno\
|
||||
oonnnmmmmmmmmnnnoppqqrssttuuvvvvvuuttssrqqpponnnmmmmmmmmnnnoo\
|
||||
oonnnmmmmmmmmmnnnooppqrrssstttttttsssrrqppoonnnmmmmmmmmmnnnoo\
|
||||
ooonnnmmmmmmmmmmnnoooppqqrrrrrrrrrrrqqppooonnmmmmmmmmmmnnnooo\
|
||||
oooonnnmmmmmmmmmmnnnnoooppppqqqqqppppooonnnnmmmmmmmmmmnnnoooo\
|
||||
poooonnnnmmmmmmmmmmmnnnnooooooooooooonnnnmmmmmmmmmmmnnnnoooop\
|
||||
ppoooonnnnmmmmmmmmmmmmmnnnnnnnnnnnnnnnmmmmmmmmmmmmmnnnnoooopp\
|
||||
ppppoooonnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnoooopppp\
|
||||
pppppoooonnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnooooppppp\
|
||||
pppppppooooonnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnoooooppppppp\
|
||||
pppppppppooooonnnnnnnmmmmmmmmmmmmmmmmmmmnnnnnnnoooooppppppppp\
|
||||
pppppppppppooooooonnnnnnnnnnnnnnnnnnnnnnnnnoooooooppppppppppp\
|
||||
prpppppppppppppoooooooonnnnnnnnnnnnnnnooooooooppppppppppppptp\
|
||||
pppppppppppppppppppoooooooooooooooooooooooppppppppppppppppppp";
|
||||
|
||||
TEST(gyarados, testIdentityDifference) {
|
||||
unsigned char A[1][32][62];
|
||||
unsigned char B[1][32][62];
|
||||
memcpy(A, kDieWelle, sizeof(A));
|
||||
EzGyarados(1, 32, 61, B, 1, 32, 61, A, 0, 1, 32, 61, 32, 61, 1, 1, 0, 0);
|
||||
AbsoluteDifference(32, 62, B[0], 32, 62, B[0], 32, 62, A[0]);
|
||||
EXPECT_STREQ(u"\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
☺ \n\
|
||||
",
|
||||
gc(bingblit(32, 61, B[0], 32, 61)));
|
||||
}
|
||||
|
||||
TEST(gyarados, testHalfYX) {
|
||||
static unsigned char M[1][32][61];
|
||||
memcpy(M, kDieWelle, sizeof(M));
|
||||
EzGyarados(1, 32, 61, M, 1, 32, 61, M, 0, 1, 16, 31, 32, 61, 2, 2, 0, 0);
|
||||
EXPECT_STREQ(u"\n\
|
||||
ppppppppoooooooooooooopppppppqp\n\
|
||||
pppppoonnnmmmmmmmmmmmnnoooppppp\n\
|
||||
ppponnnmmmmmmmmmmmmmmmmmnnooppp\n\
|
||||
poonnmmmmmmmmnnnnnmmmmmmmmnnopp\n\
|
||||
oonnmmmmmnnoppqqppoonnmmmmmnnop\n\
|
||||
onnmmmmnooqrsttttsrqponmmmmmnno\n\
|
||||
onmmmmnopqstvwwwwvutrqonmmmmnno\n\
|
||||
onmmmmnoqrtvwxyyyxwusrpommmmmno\n\
|
||||
onmmmmnoprtvwxyyyxvusqpnmmmmmno\n\
|
||||
onmmmmmnpqrtuvwwvutsrponmmmmnno\n\
|
||||
onnmmmmmnopqrssssrrqoonmmmmmnoo\n\
|
||||
oonnmmmmmmnnoopppponnmmmmmmnoop\n\
|
||||
pponnmmmmmmmmmmmmmmmmmmmmnnoopp\n\
|
||||
pppoonnmmmmmmmmmmmmmmmmnnoopppp\n\
|
||||
pppppooonnnmmmmmmmmnnnooopppppp\n\
|
||||
pppppppppooooooooooooppppppppqp",
|
||||
gc(bingblit(32, 61, M[0], 16, 31)));
|
||||
}
|
||||
|
||||
TEST(gyarados, testHalfY) {
|
||||
static unsigned char M[1][32][61];
|
||||
memcpy(M, kDieWelle, sizeof(M));
|
||||
EzGyarados(1, 32, 61, M, 1, 32, 61, M, 0, 1, 16, 61, 32, 61, 2, 1, 0, 0);
|
||||
EXPECT_STREQ(u"\n\
|
||||
popppppppppppppppooooooooooooooooooooooooooopppppppppppppppqp\n\
|
||||
ppppppppppooononnnnnmmmmmmmmmmmmmmmmmmmmmnnnnnonooopppppppppp\n\
|
||||
ppppppoononnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnonoopppppp\n\
|
||||
pppoononnmmmmmmmmmmmmmmmmmnnnnnnnnnmmmmmmmmmmmmmmmmmnnonooppp\n\
|
||||
poonnnnmmmmmmmmmmmnnnnoooppppqqqppppooonnnnmmmmmmmmmmmnnnnoop\n\
|
||||
oonnnnmmmmmmmmmnooppqqrrsstttttttttssrrqqppoonmmmmmmmmmnnnnoo\n\
|
||||
onnnnmmmmmmmnnnoppqqsttuvvwwwwwwwwwvvuttsqqpponnnmmmmmmmnnnno\n\
|
||||
onnnmmmmmmmmnnoopqrsttuvwwxxyyyyyxxwwvuttsrqpoonnmmmmmmmmnnno\n\
|
||||
onnnmmmmmmmmnnoopqrsstuvwwxxyyyyyxxwwvutssrqpoonnmmmmmmmmnnno\n\
|
||||
oonnnmmmmmmmmnnoopprrsttuuvvwwwwwvvuuttsrrppoonnmmmmmmmmnnnoo\n\
|
||||
ooonnmmmmmmmmmmmnooooqqqrrrsssssssrrrqqqoooonmmmmmmmmmmmnnooo\n\
|
||||
pooonnnmmmmmmmmmmmmmnnnnopoopppppooponnnnmmmmmmmmmmmmmnnnooop\n\
|
||||
ppppoononnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnonoopppp\n\
|
||||
pppppppoonoonnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnoonooppppppp\n\
|
||||
pppppppppppoooooonnnnnnmmmmmmmmmmmmmmmnnnnnnoooooopppppppppqp\n\
|
||||
pqpppppppppppppppppoooooooooooooooooooooooppppppppppppppppprp",
|
||||
gc(bingblit(32, 61, M[0], 16, 61)));
|
||||
}
|
||||
|
||||
TEST(Magikarp2xY, testDecimateY) {
|
||||
static unsigned char M[1][32][61], G[1][16][61], D[1][16][61];
|
||||
memcpy(M, kDieWelle, sizeof(M));
|
||||
EzGyarados(1, 32, 61, G, 1, 32, 61, M, 0, 1, 16, 61, 32, 61, 2, 1, 0, 0);
|
||||
EXPECT_STREQ(u"\n\
|
||||
popppppppppppppppooooooooooooooooooooooooooopppppppppppppppqp\n\
|
||||
ppppppppppooononnnnnmmmmmmmmmmmmmmmmmmmmmnnnnnonooopppppppppp\n\
|
||||
ppppppoononnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnonoopppppp\n\
|
||||
pppoononnmmmmmmmmmmmmmmmmmnnnnnnnnnmmmmmmmmmmmmmmmmmnnonooppp\n\
|
||||
poonnnnmmmmmmmmmmmnnnnoooppppqqqppppooonnnnmmmmmmmmmmmnnnnoop\n\
|
||||
oonnnnmmmmmmmmmnooppqqrrsstttttttttssrrqqppoonmmmmmmmmmnnnnoo\n\
|
||||
onnnnmmmmmmmnnnoppqqsttuvvwwwwwwwwwvvuttsqqpponnnmmmmmmmnnnno\n\
|
||||
onnnmmmmmmmmnnoopqrsttuvwwxxyyyyyxxwwvuttsrqpoonnmmmmmmmmnnno\n\
|
||||
onnnmmmmmmmmnnoopqrsstuvwwxxyyyyyxxwwvutssrqpoonnmmmmmmmmnnno\n\
|
||||
oonnnmmmmmmmmnnoopprrsttuuvvwwwwwvvuuttsrrppoonnmmmmmmmmnnnoo\n\
|
||||
ooonnmmmmmmmmmmmnooooqqqrrrsssssssrrrqqqoooonmmmmmmmmmmmnnooo\n\
|
||||
pooonnnmmmmmmmmmmmmmnnnnopoopppppooponnnnmmmmmmmmmmmmmnnnooop\n\
|
||||
ppppoononnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnonoopppp\n\
|
||||
pppppppoonoonnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnoonooppppppp\n\
|
||||
pppppppppppoooooonnnnnnmmmmmmmmmmmmmmmnnnnnnoooooopppppppppqp\n\
|
||||
pqpppppppppppppppppoooooooooooooooooooooooppppppppppppppppprp",
|
||||
gc(bingblit(16, 61, G[0], 16, 61)));
|
||||
Magikarp2xY(32, 61, M[0], 32, 61);
|
||||
AbsoluteDifference(16, 61, D[0], 16, 61, G[0], 16, 61, M[0]);
|
||||
EXPECT_STREQ(u"\n\
|
||||
pnpppppppppppppppoooooooooooooooooooooooooooppppppppppppppprp\n\
|
||||
ppppppppppooooonnnnmmmmmmmmmmmmmmmmmmmmmmmnnnnooooopppppppppp\n\
|
||||
ppppppoononnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnonoopppppp\n\
|
||||
pppoononnmmmmmmmmmmmmmmmmmnnnnnnnnnmmmmmmmmmmmmmmmmmnnonooppp\n\
|
||||
poonnnnmmmmmmmmmmmnnnnoooppppqqqppppooonnnnmmmmmmmmmmmnnnnoop\n\
|
||||
oonnnnmmmmmmmmmnooppqqrrsstttttttttssrrqqppoonmmmmmmmmmnnnnoo\n\
|
||||
onnnnmmmmmmmnnnoppqrsttuvvwwwwwwwwwvvuttsrqpponnnmmmmmmmnnnno\n\
|
||||
onnnmmmmmmmmnnoopqrsttuvwwxxyyyyyxxwwvuttsrqpoonnmmmmmmmmnnno\n\
|
||||
onnnmmmmmmmmnnoopqrsstuvwwxxyyyyyxxwwvutssrqpoonnmmmmmmmmnnno\n\
|
||||
oonnnmmmmmmmmnnoopprrsttuuvvwwwwwvvuuttsrrppoonnmmmmmmmmnnnoo\n\
|
||||
ooonnmmmmmmmmmmmnoopoqqqrrsssssssssrrqqqopoonmmmmmmmmmmmnnooo\n\
|
||||
pooonnnmmmmmmmmmmmmmnnnnoooopppppoooonnnnmmmmmmmmmmmmmnnnooop\n\
|
||||
ppppoononnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnonoopppp\n\
|
||||
pppppppoonoonnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnoonooppppppp\n\
|
||||
pppppppppppoooooonnnnmmmmmmmmmmmmmmmmmmmnnnnooooooppppppppppp\n\
|
||||
pqpppppppppppppppppoooooooooooooooooooooooppppppppppppppppprp",
|
||||
gc(bingblit(16, 61, M[0], 16, 61)));
|
||||
EXPECT_STREQ(u"\n\
|
||||
☺ ☺ \n\
|
||||
☺ ☺ ☺ ☺ \n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
☺ ☺ \n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
☺ ☺ ☺ ☺ \n\
|
||||
☺ ☺ \n\
|
||||
\n\
|
||||
\n\
|
||||
☺☺ ☺☺ ☺ \n\
|
||||
",
|
||||
gc(bingblit(16, 61, D[0], 16, 61)));
|
||||
}
|
||||
|
||||
TEST(Magikarp2xX, testDecimateX) {
|
||||
static unsigned char M[1][32][61], G[1][32][31], D[32][31];
|
||||
memcpy(M, kDieWelle, sizeof(M));
|
||||
EzGyarados(1, 32, 31, G, 1, 32, 61, M, 0, 1, 32, 31, 32, 61, 1, 2, 0, 0);
|
||||
EXPECT_STREQ(u"\n\
|
||||
pppppppppoooooooooooooppppppppp\n\
|
||||
oppppppooonnnnnnnnnnooooppppprp\n\
|
||||
pppppooonnnnmmmmmmmnnnooopppppp\n\
|
||||
ppppooonnmmmmmmmmmmmmnnnooppppp\n\
|
||||
pppoonnmmmmmmmmmmmmmmmmnnnopppp\n\
|
||||
ppoonnmmmmmmmmmmmmmmmmmmnnooppp\n\
|
||||
ppoonnmmmmmmmnnnnmmmmmmmmnnoopp\n\
|
||||
ponnnmmmmmmnnnooonnnmmmmmmnnopp\n\
|
||||
ponnmmmmmnnooppppoonnmmmmmnnnop\n\
|
||||
oonnmmmmnoopqqrrqqpoonmmmmmnnoo\n\
|
||||
onnmmmmmnopqrsssssqponnmmmmnnoo\n\
|
||||
onmmmmmnopqstuuuutsrqoommmmmnoo\n\
|
||||
onnmmmmnpqrtuvvvvvtsrponmmmmnno\n\
|
||||
onmmmmnopqtuvwxxwwutsqonmmmmmno\n\
|
||||
onmmmmnoqrsvwxyyxxvusqpnmmmmmno\n\
|
||||
onmmmmnopstvwxyyyxwutronmmmmmno\n\
|
||||
onmmmmnopstvwxyyyxwtsrpnmmmmmno\n\
|
||||
onmmmmnoprtuvxxxxwvurqpnmmmmmno\n\
|
||||
onmmmmmnpqsuvwwwwvutrqonmmmmmno\n\
|
||||
onmmmmmnoqrstuvvvutrqponmmmmnoo\n\
|
||||
onmmmmmnnoqrsttttssqponmmmmmnoo\n\
|
||||
oonmmmmmnooqrrrrrrqpoommmmmmnoo\n\
|
||||
oonmmmmmmnnoppqqppoonnmmmmmnooo\n\
|
||||
poonnmmmmmnnoooooonnmmmmmmnnoop\n\
|
||||
poonnmmmmmmmnnnnnnnmmmmmmnnoopp\n\
|
||||
ppoonnmmmmmmmmmmmmmmmmmmmnooppp\n\
|
||||
pppoonnmmmmmmmmmmmmmmmmmnnooppp\n\
|
||||
ppppoonnmmmmmmmmmmmmmmnnooopppp\n\
|
||||
pppppoonnnmmmmmmmmmmnnnoooppppp\n\
|
||||
ppppppooonnnnnnnnnnnnoooopppppp\n\
|
||||
qpppppppoooonnnnnnnoooopppppprp\n\
|
||||
ppppppppppooooooooooopppppppppp",
|
||||
gc(bingblit(32, 31, G[0], 32, 31)));
|
||||
Magikarp2xX(32, 61, M[0], 32, 61);
|
||||
EXPECT_STREQ(u"\n\
|
||||
pppppppppoooooooooooooppppppppp\n\
|
||||
nppppppooonnnnnnnnnnooooppppprp\n\
|
||||
pppppooonnnnmmmmmmnnnnooopppppp\n\
|
||||
ppppooonnnmmmmmmmmmmmnnnooppppp\n\
|
||||
pppoonnnmmmmmmmmmmmmmmmnnoopppp\n\
|
||||
ppoonnnmmmmmmmmmmmmmmmmmnnooppp\n\
|
||||
ppoonnmmmmmmmnnnnnmmmmmmmnnoopp\n\
|
||||
ponnnmmmmmnnnoooonnnmmmmmmnnopp\n\
|
||||
ponnmmmmmnnoopppppoonnmmmmnnnop\n\
|
||||
oonnmmmmnoopqqrrqqpponmmmmmnnoo\n\
|
||||
onnmmmmmnopqrsssssrqpnnmmmmnnoo\n\
|
||||
onmmmmmnopqstuuuutsrqoommmmmnoo\n\
|
||||
onnmmmmnpqrtuvvvvvtsrponmmmmnno\n\
|
||||
onmmmmnnpqtuvwxxwwutsponmmmmmno\n\
|
||||
onmmmmnoqrsvwxyyxxvurronmmmmmno\n\
|
||||
onmmmmnopstvwxyyyxwutronmmmmmno\n\
|
||||
onmmmmnopssvwxyyyxwtsronmmmmmno\n\
|
||||
onmmmmnopqtuvxxxxwvurqpnmmmmmno\n\
|
||||
onmmmmmnorsuvwwwwvutrqonmmmmmno\n\
|
||||
onmmmmmnoqrstuvvvutrqpnnmmmmnoo\n\
|
||||
onmmmmmnnoqrsttttssqponmmmmmnoo\n\
|
||||
oonmmmmmnooqrrrrrrqpoommmmmmnoo\n\
|
||||
oonmmmmmnnnoppqqqpponnmmmmmnooo\n\
|
||||
poonnmmmmmnnooooooonnmmmmmnnoop\n\
|
||||
poonnmmmmmmnnnnnnnnmmmmmmnnoopp\n\
|
||||
ppoonnmmmmmmmmmmmmmmmmmmnnooppp\n\
|
||||
pppoonnmmmmmmmmmmmmmmmmnnnooppp\n\
|
||||
ppppoonnnmmmmmmmmmmmmmnnooopppp\n\
|
||||
pppppoonnnnmmmmmmmmmnnnoooppppp\n\
|
||||
ppppppooonnnnnnnnnnnnoooopppppp\n\
|
||||
qpppppppoooonnnnnnnoooopppppprp\n\
|
||||
ppppppppppooooooooooopppppppppp",
|
||||
gc(bingblit(32, 61, M[0], 32, 31)));
|
||||
AbsoluteDifference(32, 31, D, 32, 31, G[0], 32, 61, M[0]);
|
||||
EXPECT_STREQ(u"\n\
|
||||
\n\
|
||||
☺ \n\
|
||||
☺ \n\
|
||||
☺ \n\
|
||||
☺ ☺ \n\
|
||||
☺ \n\
|
||||
☺ \n\
|
||||
☺ ☺ \n\
|
||||
☺ ☺ ☺ \n\
|
||||
☺ \n\
|
||||
☺☺☺ \n\
|
||||
\n\
|
||||
\n\
|
||||
☺ ☺ \n\
|
||||
☺☺☺ \n\
|
||||
\n\
|
||||
☺ ☺ \n\
|
||||
☺ \n\
|
||||
☺☺ \n\
|
||||
☺ \n\
|
||||
\n\
|
||||
\n\
|
||||
☺ ☺ ☺ \n\
|
||||
☺ ☺ \n\
|
||||
☺ \n\
|
||||
☺ \n\
|
||||
☺ \n\
|
||||
☺ \n\
|
||||
☺ \n\
|
||||
\n\
|
||||
\n\
|
||||
",
|
||||
gc(bingblit(32, 31, D, 32, 31)));
|
||||
}
|
||||
|
||||
TEST(magikarp_vs_gyarados, testHalf) {
|
||||
static unsigned char M[1][32][61], G[1][16][31], D[16][31];
|
||||
memcpy(M, kDieWelle, sizeof(M));
|
||||
EzGyarados(1, 16, 31, G, 1, 32, 61, M, 0, 1, 16, 31, 32, 61, 32. / 16.,
|
||||
61. / 31., 0, 0);
|
||||
Magikarp2xY(32, 61, M[0], 32, 61);
|
||||
Magikarp2xX(32, 61, M[0], 16, 61);
|
||||
AbsoluteDifference(16, 31, D, 16, 32, G[0], 32, 61, M[0]);
|
||||
EXPECT_STREQ(u"\n\
|
||||
oppppppppooooooooooooopppppppqp\n\
|
||||
pppppooonnmmmmmmmmmmmnnoopppppp\n\
|
||||
ppponnmmmmmmmmmmmmmmmmmmnnnpppp\n\
|
||||
ppnommmmmmmmmnnnnnmmmmmmmmnoopp\n\
|
||||
pnnnmmmmmnnoppqqpponnnmmmmmnnop\n\
|
||||
onnmmmmmopqrstttttsrqpnmmmmnnoo\n\
|
||||
onnmmmnnpqtuvwwwwwutsponmmmmnno\n\
|
||||
onmmmmnopstvwxyyyxwutronmmmmmno\n\
|
||||
onmmmmnopssvwxyyyxwtsronmmmmmno\n\
|
||||
onmmmmmooqstuvwwwvusrponmmmmnoo\n\
|
||||
oommmmmmnopqrsssssqqpommmmmmnoo\n\
|
||||
ponmmmmmmmnnoopppoonnmmmmmmnoop\n\
|
||||
ppoonmmmmmmmmmmmmmmmmmmmmmonppp\n\
|
||||
ppppnonmmmmmmmmmmmmmmmmmooopppp\n\
|
||||
ppppppooonnmmmmmmmmmnnooopppppp\n\
|
||||
qpppppppppoooooooooooppppppppqp",
|
||||
gc(bingblit(32, 61, M[0], 16, 31)));
|
||||
EXPECT_STREQ(u"\n\
|
||||
ppppppppooooooooooooooopppppppp\n\
|
||||
pppppoonnnmmmmmmmmmmmnnnooppppp\n\
|
||||
pppoonnmmmmmmmmmmmmmmmmmnnooppp\n\
|
||||
poonnmmmmmmmmnnnnnmmmmmmmmnnoop\n\
|
||||
oonnmmmmmnnoppqqqpponnmmmmmnnoo\n\
|
||||
onnmmmmnnoqrstttttsrqonnmmmmnno\n\
|
||||
onmmmmnnpqstuwwwwwutsqpnnmmmmno\n\
|
||||
onmmmmnoprtuwxyzyxwutrponmmmmno\n\
|
||||
onmmmmnoprsuwxyyyxwusrponmmmmno\n\
|
||||
onmmmmmnoqrtuvwwwvutrqonmmmmmno\n\
|
||||
onnmmmmmnopqrsssssrqponmmmmmnno\n\
|
||||
oonnmmmmmmnnoopppoonnmmmmmmnnoo\n\
|
||||
ppoonmmmmmmmmmmmmmmmmmmmmmnoopp\n\
|
||||
pppoonnmmmmmmmmmmmmmmmmmnnooppp\n\
|
||||
pppppooonnnmmmmmmmmmnnnoooppppp\n\
|
||||
pppppppppoooooooooooooppppppppq",
|
||||
gc(bingblit(16, 31, G[0], 16, 31)));
|
||||
EXPECT_STREQ(u"\n\
|
||||
☺ ☺ ☺ ☺ \n\
|
||||
☺ ☺☺ ☺ ☺ \n\
|
||||
☺☺☺ ☺ ☺☺☺☺☻ ☺\n\
|
||||
☻☻☺☻ ☺☺☺ ☺☺☺ ☺☺☻☺☺ ☺☻\n\
|
||||
♥☺☺☺ ☺☺☻♥☻♥☻☺ ☺☻☻☻☻☺☺☺ ☺☺☻☻☺ ☺♥\n\
|
||||
☻☺ ☺☻♦♣♠♣♦♥☻☺☺☻♥♣♠♣♣♦♥☺☺☺☻☻ ☺☻☻\n\
|
||||
☺ ☻♦♠••○•♠♥☻☺♥♦♠•○••♠♥☻ ☻☻☺ ☺☺☻\n\
|
||||
☻♣•◘◙◙◙◙♠♦☺☻♦•○◙◙◙◘•♣☺☺☻☺ ☺☺\n\
|
||||
☺♦♠◘◙♂♂◙○♣♦☺♦♠○◙♂♂◙•♠♦ ☺☺ ☺☺\n\
|
||||
☻♦•◘○◙◙◘•♦☺☻♦•○◙◙○◘♠♦☺ ☺ ☺☻☺\n\
|
||||
☺☻♣♠♠♠♠♠♦☻ ☻♦♠♠♠♠♠♥♥☺ ☻☺☺ ☺☻☻\n\
|
||||
☻ ☺♥♥♥☻☻☺☺☺☺☻☻♥♥☻☺ ☺☻♥☻☻☺ ☺☻☻♥\n\
|
||||
♥♥☻☻☺ ☺☻☻♥♥♥♥♥☻☻☺☺☻☺♥♥♥\n\
|
||||
♥♥♥♥☺☻☺ ☺☺☻☻♥♥♥♥♥♥♥♥☻ ☺☻☻♥♥\n\
|
||||
♥♥♥♥♥♥☺☺☺☺☺☻♥♥♥♥♥♥♥♥☻☻☺☺☺ ☺☺☺☺☺\n\
|
||||
☻☺☺☺☺☺☺ ☺☺☺☺☺☻oooooppppppppqp",
|
||||
gc(bingblit(16, 31, D, 16, 31)));
|
||||
}
|
||||
|
||||
#define HDX (1920 / 4)
|
||||
#define HDY (1080 / 4)
|
||||
|
||||
#if 0
|
||||
BENCH(Magikarp, bench) {
|
||||
unsigned char(*Me)[HDY][HDX] = tgc(tmalloc(HDX * HDY));
|
||||
unsigned char(*Mo)[HDY][HDX] = tgc(tmalloc(HDX * HDY));
|
||||
EZBENCH2("Magikarp2xY [even]", donothing,
|
||||
Magikarp2xY(HDX, HDY, *Me, HDX, HDY));
|
||||
EZBENCH2("Magikarp2xY [odd]", donothing,
|
||||
Magikarp2xY(HDX, HDY, *Mo, HDX, HDY));
|
||||
EZBENCH2("Magikarp2xX [even]", donothing,
|
||||
Magikarp2xX(HDX, HDY, *Me, HDX, HDY));
|
||||
EZBENCH2("Magikarp2xX [odd]", donothing,
|
||||
Magikarp2xX(HDX, HDY, *Mo, HDX, HDY));
|
||||
}
|
||||
#endif
|
57
test/dsp/scale/test.mk
Normal file
57
test/dsp/scale/test.mk
Normal file
|
@ -0,0 +1,57 @@
|
|||
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
|
||||
#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘
|
||||
|
||||
PKGS += TEST_DSP_SCALE
|
||||
|
||||
TEST_DSP_SCALE_SRCS := $(wildcard test/dsp/scale/*.c)
|
||||
TEST_DSP_SCALE_SRCS_TEST = $(filter %_test.c,$(TEST_DSP_SCALE_SRCS))
|
||||
TEST_DSP_SCALE_COMS = $(TEST_DSP_SCALE_OBJS:%.o=%.com)
|
||||
TEST_DSP_SCALE_BINS = $(TEST_DSP_SCALE_COMS) $(TEST_DSP_SCALE_COMS:%=%.dbg)
|
||||
|
||||
TEST_DSP_SCALE_OBJS = \
|
||||
$(TEST_DSP_SCALE_SRCS:%=o/$(MODE)/%.zip.o) \
|
||||
$(TEST_DSP_SCALE_SRCS:%.c=o/$(MODE)/%.o)
|
||||
|
||||
TEST_DSP_SCALE_TESTS = \
|
||||
$(TEST_DSP_SCALE_SRCS_TEST:%.c=o/$(MODE)/%.com.ok)
|
||||
|
||||
TEST_DSP_SCALE_CHECKS = \
|
||||
$(TEST_DSP_SCALE_SRCS_TEST:%.c=o/$(MODE)/%.com.runs)
|
||||
|
||||
TEST_DSP_SCALE_DIRECTDEPS = \
|
||||
DSP_CORE \
|
||||
DSP_SCALE \
|
||||
LIBC_TINYMATH \
|
||||
LIBC_LOG \
|
||||
LIBC_RUNTIME \
|
||||
LIBC_FMT \
|
||||
LIBC_MEM \
|
||||
LIBC_STDIO \
|
||||
LIBC_X \
|
||||
LIBC_RAND \
|
||||
LIBC_NEXGEN32E \
|
||||
LIBC_STR \
|
||||
TOOL_VIZ_LIB \
|
||||
LIBC_STUBS \
|
||||
LIBC_TESTLIB
|
||||
|
||||
TEST_DSP_SCALE_DEPS := \
|
||||
$(call uniq,$(foreach x,$(TEST_DSP_SCALE_DIRECTDEPS),$($(x))))
|
||||
|
||||
o/$(MODE)/test/dsp/scale/scale.pkg: \
|
||||
$(TEST_DSP_SCALE_OBJS) \
|
||||
$(foreach x,$(TEST_DSP_SCALE_DIRECTDEPS),$($(x)_A).pkg)
|
||||
|
||||
o/$(MODE)/test/dsp/scale/%.com.dbg: \
|
||||
$(TEST_DSP_SCALE_DEPS) \
|
||||
o/$(MODE)/test/dsp/scale/%.o \
|
||||
o/$(MODE)/test/dsp/scale/scale.pkg \
|
||||
$(LIBC_TESTMAIN) \
|
||||
$(CRT) \
|
||||
$(APE)
|
||||
@$(APELINK)
|
||||
|
||||
.PHONY: o/$(MODE)/test/dsp/scale
|
||||
o/$(MODE)/test/dsp/scale: \
|
||||
$(TEST_DSP_SCALE_BINS) \
|
||||
$(TEST_DSP_SCALE_CHECKS)
|
Loading…
Add table
Add a link
Reference in a new issue