mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
39bf41f4eb
- Python static hello world now 1.8mb - Python static fully loaded now 10mb - Python HTTPS client now uses MbedTLS - Python REPL now completes import stmts - Increase stack size for Python for now - Begin synthesizing posixpath and ntpath - Restore Python \N{UNICODE NAME} support - Restore Python NFKD symbol normalization - Add optimized code path for Intel SHA-NI - Get more Python unit tests passing faster - Get Python help() pagination working on NT - Python hashlib now supports MbedTLS PBKDF2 - Make memcpy/memmove/memcmp/bcmp/etc. faster - Add Mersenne Twister and Vigna to LIBC_RAND - Provide privileged __printf() for error code - Fix zipos opendir() so that it reports ENOTDIR - Add basic chmod() implementation for Windows NT - Add Cosmo's best functions to Python cosmo module - Pin function trace indent depth to that of caller - Show memory diagram on invalid access in MODE=dbg - Differentiate stack overflow on crash in MODE=dbg - Add stb_truetype and tools for analyzing font files - Upgrade to UNICODE 13 and reduce its binary footprint - COMPILE.COM now logs resource usage of build commands - Start implementing basic poll() support on bare metal - Set getauxval(AT_EXECFN) to GetModuleFileName() on NT - Add descriptions to strerror() in non-TINY build modes - Add COUNTBRANCH() macro to help with micro-optimizations - Make error / backtrace / asan / memory code more unbreakable - Add fast perfect C implementation of μ-Law and a-Law audio codecs - Make strtol() functions consistent with other libc implementations - Improve Linenoise implementation (see also github.com/jart/bestline) - COMPILE.COM now suppresses stdout/stderr of successful build commands
194 lines
13 KiB
C
194 lines
13 KiB
C
/*-*- 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 2021 Justine Alexandra Roberts Tunney │
|
|
│ │
|
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
|
│ any purpose with or without fee is hereby granted, provided that the │
|
|
│ above copyright notice and this permission notice appear in all copies. │
|
|
│ │
|
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
#include "dsp/core/core.h"
|
|
#include "libc/macros.internal.h"
|
|
#include "libc/testlib/ezbench.h"
|
|
#include "libc/testlib/hyperion.h"
|
|
#include "libc/testlib/testlib.h"
|
|
|
|
TEST(unalaw, outOfRange_modulo256) {
|
|
EXPECT_EQ(880, unalaw(-2));
|
|
EXPECT_EQ(880, unalaw(-2 & 255));
|
|
EXPECT_EQ(5248, unalaw(-127));
|
|
EXPECT_EQ(5248, unalaw(-127 & 255));
|
|
}
|
|
|
|
TEST(alaw, test) {
|
|
int i;
|
|
static const int V[][2] = {
|
|
{42, -32768}, {42, -32691}, {42, -32376}, {42, -32328}, {42, -32235},
|
|
{42, -31923}, {43, -31645}, {43, -31328}, {43, -31147}, {43, -31129},
|
|
{43, -31110}, {43, -31092}, {43, -30824}, {43, -30728}, {40, -30473},
|
|
{40, -30297}, {40, -30074}, {40, -30013}, {40, -29972}, {40, -29830},
|
|
{40, -29707}, {41, -29595}, {41, -29384}, {41, -29235}, {41, -28959},
|
|
{41, -28947}, {41, -28816}, {41, -28708}, {46, -28580}, {46, -28538},
|
|
{46, -28483}, {46, -28256}, {46, -27976}, {46, -27829}, {47, -27644},
|
|
{47, -27471}, {47, -27189}, {47, -27042}, {47, -26999}, {47, -26707},
|
|
{44, -26610}, {44, -26464}, {44, -26145}, {44, -25897}, {44, -25722},
|
|
{44, -25638}, {45, -25556}, {45, -25310}, {45, -25310}, {45, -25083},
|
|
{45, -24986}, {45, -24920}, {45, -24676}, {45, -24650}, {34, -24565},
|
|
{34, -24531}, {34, -24349}, {34, -24203}, {34, -24073}, {34, -23997},
|
|
{34, -23804}, {34, -23714}, {34, -23654}, {35, -23435}, {35, -23370},
|
|
{35, -23060}, {35, -22908}, {35, -22784}, {32, -22493}, {32, -22409},
|
|
{32, -22342}, {32, -22018}, {32, -21952}, {32, -21866}, {32, -21699},
|
|
{33, -21436}, {33, -21161}, {33, -21041}, {33, -20744}, {33, -20711},
|
|
{38, -20430}, {38, -20300}, {38, -20162}, {38, -19939}, {38, -19820},
|
|
{38, -19765}, {38, -19576}, {39, -19427}, {39, -19268}, {39, -19098},
|
|
{39, -19049}, {39, -18888}, {39, -18845}, {39, -18803}, {39, -18528},
|
|
{36, -18424}, {36, -18119}, {36, -17808}, {36, -17685}, {36, -17589},
|
|
{36, -17481}, {37, -17397}, {37, -17190}, {37, -17119}, {37, -16916},
|
|
{37, -16910}, {37, -16747}, {37, -16706}, {37, -16682}, {37, -16406},
|
|
{58, -16311}, {58, -16292}, {58, -16187}, {58, -16103}, {59, -15864},
|
|
{59, -15753}, {59, -15520}, {59, -15373}, {56, -15289}, {56, -15020},
|
|
{57, -14748}, {57, -14604}, {57, -14538}, {62, -14315}, {62, -14236},
|
|
{62, -14046}, {62, -14043}, {62, -13985}, {63, -13664}, {63, -13453},
|
|
{60, -13143}, {60, -13099}, {60, -13044}, {60, -12802}, {61, -12538},
|
|
{61, -12476}, {61, -12411}, {61, -12340}, {50, -12073}, {51, -11760},
|
|
{51, -11442}, {48, -11133}, {48, -11102}, {48, -10928}, {48, -10791},
|
|
{49, -10697}, {49, -10534}, {49, -10331}, {49, -10257}, {54, -9991},
|
|
{54, -9732}, {55, -9714}, {55, -9544}, {55, -9389}, {55, -9385},
|
|
{55, -9245}, {52, -9102}, {52, -8838}, {53, -8534}, {53, -8405},
|
|
{53, -8321}, {53, -8232}, {10, -8101}, {11, -7879}, {8, -7650},
|
|
{8, -7630}, {8, -7616}, {8, -7559}, {8, -7442}, {9, -7305},
|
|
{9, -7267}, {14, -7141}, {14, -6962}, {15, -6838}, {15, -6734},
|
|
{12, -6502}, {12, -6479}, {13, -6162}, {2, -6142}, {2, -5933},
|
|
{3, -5648}, {0, -5523}, {1, -5291}, {1, -5149}, {6, -4868},
|
|
{7, -4807}, {7, -4677}, {4, -4556}, {4, -4484}, {4, -4353},
|
|
{5, -4149}, {26, -4048}, {27, -3935}, {24, -3720}, {31, -3447},
|
|
{31, -3392}, {28, -3313}, {29, -3106}, {19, -2891}, {19, -2838},
|
|
{16, -2745}, {17, -2663}, {22, -2481}, {20, -2184}, {21, -2084},
|
|
{105, -1847}, {105, -1808}, {98, -1520}, {99, -1471}, {103, -1168},
|
|
{126, -876}, {112, -673}, {119, -578}, {68, -287}, {88, -220},
|
|
{81, -76}, {85, -13}, {213, 13}, {218, 253}, {197, 256},
|
|
{245, 540}, {246, 634}, {248, 931}, {229, 1063}, {229, 1066},
|
|
{225, 1305}, {227, 1451}, {239, 1715}, {239, 1725}, {235, 1982},
|
|
{149, 2122}, {148, 2205}, {148, 2219}, {150, 2539}, {145, 2679},
|
|
{144, 2752}, {146, 3025}, {156, 3239}, {156, 3239}, {159, 3346},
|
|
{153, 3633}, {153, 3649}, {153, 3704}, {152, 3799}, {152, 3799},
|
|
{154, 4089}, {132, 4369}, {132, 4606}, {135, 4712}, {134, 5031},
|
|
{129, 5183}, {129, 5211}, {128, 5396}, {128, 5535}, {131, 5761},
|
|
{131, 5821}, {131, 5878}, {130, 5970}, {141, 6156}, {141, 6206},
|
|
{141, 6307}, {140, 6607}, {143, 6661}, {142, 6915}, {142, 7126},
|
|
{137, 7296}, {137, 7391}, {139, 7684}, {139, 7707}, {139, 7736},
|
|
{139, 7820}, {138, 7982}, {181, 8300}, {181, 8335}, {181, 8582},
|
|
{181, 8655}, {180, 8850}, {180, 8961}, {180, 9008}, {183, 9301},
|
|
{183, 9597}, {183, 9605}, {183, 9697}, {182, 9921}, {182, 10143},
|
|
{182, 10223}, {177, 10477}, {177, 10749}, {176, 10951}, {176, 11121},
|
|
{179, 11321}, {179, 11620}, {179, 11645}, {179, 11708}, {179, 11716},
|
|
{179, 11763}, {178, 11949}, {178, 12271}, {178, 12287}, {189, 12514},
|
|
{189, 12561}, {189, 12575}, {188, 12844}, {188, 13162}, {191, 13337},
|
|
{191, 13631}, {190, 13957}, {190, 14175}, {190, 14270}, {185, 14411},
|
|
{185, 14720}, {184, 14975}, {184, 15047}, {184, 15135}, {184, 15246},
|
|
{187, 15477}, {187, 15491}, {187, 15581}, {187, 15646}, {187, 15785},
|
|
{186, 15983}, {186, 15993}, {186, 16169}, {186, 16178}, {186, 16355},
|
|
{165, 16536}, {165, 16850}, {165, 17132}, {165, 17366}, {164, 17593},
|
|
{164, 17667}, {164, 17679}, {164, 17765}, {164, 17771}, {164, 17807},
|
|
{164, 17843}, {164, 18079}, {164, 18325}, {167, 18625}, {167, 18931},
|
|
{167, 19160}, {167, 19381}, {166, 19677}, {166, 19805}, {166, 19972},
|
|
{166, 20140}, {166, 20404}, {161, 20515}, {161, 20767}, {161, 21071},
|
|
{161, 21339}, {161, 21369}, {161, 21411}, {160, 21685}, {160, 21701},
|
|
{160, 21963}, {160, 22109}, {160, 22187}, {160, 22197}, {160, 22378},
|
|
{163, 22670}, {163, 22990}, {163, 23063}, {163, 23156}, {163, 23158},
|
|
{163, 23459}, {163, 23471}, {162, 23792}, {162, 23955}, {162, 24163},
|
|
{162, 24300}, {173, 24589}, {173, 24722}, {173, 24865}, {173, 25135},
|
|
{173, 25225}, {173, 25341}, {173, 25480}, {172, 25653}, {172, 25779},
|
|
{172, 26018}, {172, 26257}, {172, 26576}, {175, 26894}, {175, 27191},
|
|
{175, 27294}, {175, 27468}, {175, 27498}, {175, 27575}, {175, 27644},
|
|
{174, 27723}, {174, 27764}, {174, 27954}, {174, 27969}, {174, 27979},
|
|
{174, 28059}, {174, 28124}, {174, 28330}, {174, 28408}, {174, 28627},
|
|
{169, 28704}, {169, 28880}, {169, 29014}, {169, 29095}, {169, 29301},
|
|
{169, 29429}, {169, 29515}, {169, 29520}, {169, 29661}, {168, 29812},
|
|
{168, 30030}, {168, 30157}, {168, 30405}, {168, 30476}, {171, 30760},
|
|
{171, 30883}, {171, 31029}, {171, 31249}, {171, 31482}, {171, 31578},
|
|
{171, 31696}, {170, 31902}, {170, 32116}, {170, 32440}, {170, 32472},
|
|
{170, 32711},
|
|
};
|
|
for (i = 0; i < ARRAYLEN(V); ++i) {
|
|
ASSERT_EQ(V[i][0], alaw(V[i][1]));
|
|
}
|
|
}
|
|
|
|
TEST(unalaw, test) {
|
|
int i;
|
|
static const int V[][2] = {
|
|
{-5504, 0}, {-5248, 1}, {-6016, 2}, {-5760, 3}, {-4480, 4},
|
|
{-4224, 5}, {-4992, 6}, {-4736, 7}, {-7552, 8}, {-7296, 9},
|
|
{-8064, 10}, {-7808, 11}, {-6528, 12}, {-6272, 13}, {-7040, 14},
|
|
{-6784, 15}, {-2752, 16}, {-2624, 17}, {-3008, 18}, {-2880, 19},
|
|
{-2240, 20}, {-2112, 21}, {-2496, 22}, {-2368, 23}, {-3776, 24},
|
|
{-3648, 25}, {-4032, 26}, {-3904, 27}, {-3264, 28}, {-3136, 29},
|
|
{-3520, 30}, {-3392, 31}, {-22016, 32}, {-20992, 33}, {-24064, 34},
|
|
{-23040, 35}, {-17920, 36}, {-16896, 37}, {-19968, 38}, {-18944, 39},
|
|
{-30208, 40}, {-29184, 41}, {-32256, 42}, {-31232, 43}, {-26112, 44},
|
|
{-25088, 45}, {-28160, 46}, {-27136, 47}, {-11008, 48}, {-10496, 49},
|
|
{-12032, 50}, {-11520, 51}, {-8960, 52}, {-8448, 53}, {-9984, 54},
|
|
{-9472, 55}, {-15104, 56}, {-14592, 57}, {-16128, 58}, {-15616, 59},
|
|
{-13056, 60}, {-12544, 61}, {-14080, 62}, {-13568, 63}, {-344, 64},
|
|
{-328, 65}, {-376, 66}, {-360, 67}, {-280, 68}, {-264, 69},
|
|
{-312, 70}, {-296, 71}, {-472, 72}, {-456, 73}, {-504, 74},
|
|
{-488, 75}, {-408, 76}, {-392, 77}, {-440, 78}, {-424, 79},
|
|
{-88, 80}, {-72, 81}, {-120, 82}, {-104, 83}, {-24, 84},
|
|
{-8, 85}, {-56, 86}, {-40, 87}, {-216, 88}, {-200, 89},
|
|
{-248, 90}, {-232, 91}, {-152, 92}, {-136, 93}, {-184, 94},
|
|
{-168, 95}, {-1376, 96}, {-1312, 97}, {-1504, 98}, {-1440, 99},
|
|
{-1120, 100}, {-1056, 101}, {-1248, 102}, {-1184, 103}, {-1888, 104},
|
|
{-1824, 105}, {-2016, 106}, {-1952, 107}, {-1632, 108}, {-1568, 109},
|
|
{-1760, 110}, {-1696, 111}, {-688, 112}, {-656, 113}, {-752, 114},
|
|
{-720, 115}, {-560, 116}, {-528, 117}, {-624, 118}, {-592, 119},
|
|
{-944, 120}, {-912, 121}, {-1008, 122}, {-976, 123}, {-816, 124},
|
|
{-784, 125}, {-880, 126}, {-848, 127}, {5504, 128}, {5248, 129},
|
|
{6016, 130}, {5760, 131}, {4480, 132}, {4224, 133}, {4992, 134},
|
|
{4736, 135}, {7552, 136}, {7296, 137}, {8064, 138}, {7808, 139},
|
|
{6528, 140}, {6272, 141}, {7040, 142}, {6784, 143}, {2752, 144},
|
|
{2624, 145}, {3008, 146}, {2880, 147}, {2240, 148}, {2112, 149},
|
|
{2496, 150}, {2368, 151}, {3776, 152}, {3648, 153}, {4032, 154},
|
|
{3904, 155}, {3264, 156}, {3136, 157}, {3520, 158}, {3392, 159},
|
|
{22016, 160}, {20992, 161}, {24064, 162}, {23040, 163}, {17920, 164},
|
|
{16896, 165}, {19968, 166}, {18944, 167}, {30208, 168}, {29184, 169},
|
|
{32256, 170}, {31232, 171}, {26112, 172}, {25088, 173}, {28160, 174},
|
|
{27136, 175}, {11008, 176}, {10496, 177}, {12032, 178}, {11520, 179},
|
|
{8960, 180}, {8448, 181}, {9984, 182}, {9472, 183}, {15104, 184},
|
|
{14592, 185}, {16128, 186}, {15616, 187}, {13056, 188}, {12544, 189},
|
|
{14080, 190}, {13568, 191}, {344, 192}, {328, 193}, {376, 194},
|
|
{360, 195}, {280, 196}, {264, 197}, {312, 198}, {296, 199},
|
|
{472, 200}, {456, 201}, {504, 202}, {488, 203}, {408, 204},
|
|
{392, 205}, {440, 206}, {424, 207}, {88, 208}, {72, 209},
|
|
{120, 210}, {104, 211}, {24, 212}, {8, 213}, {56, 214},
|
|
{40, 215}, {216, 216}, {200, 217}, {248, 218}, {232, 219},
|
|
{152, 220}, {136, 221}, {184, 222}, {168, 223}, {1376, 224},
|
|
{1312, 225}, {1504, 226}, {1440, 227}, {1120, 228}, {1056, 229},
|
|
{1248, 230}, {1184, 231}, {1888, 232}, {1824, 233}, {2016, 234},
|
|
{1952, 235}, {1632, 236}, {1568, 237}, {1760, 238}, {1696, 239},
|
|
{688, 240}, {656, 241}, {752, 242}, {720, 243}, {560, 244},
|
|
{528, 245}, {624, 246}, {592, 247}, {944, 248}, {912, 249},
|
|
{1008, 250}, {976, 251}, {816, 252}, {784, 253}, {880, 254},
|
|
{848, 255},
|
|
};
|
|
for (i = 0; i < ARRAYLEN(V); ++i) {
|
|
ASSERT_EQ(V[i][0], unalaw(V[i][1]));
|
|
}
|
|
}
|
|
|
|
BENCH(alaw, bench) {
|
|
char *p = gc(malloc(kHyperionSize));
|
|
EZBENCH2("alaw -32k", donothing, alaw(-32768));
|
|
EZBENCH2("alaw 32k", donothing, alaw(32767));
|
|
EZBENCH2("unalaw 0", donothing, unalaw(0));
|
|
EZBENCH2("unalaw 255", donothing, unalaw(255));
|
|
}
|