From 82468f5ffcc5a6c9b057fee90084ce3b2bb9374a Mon Sep 17 00:00:00 2001 From: David Date: Thu, 8 Jan 2026 21:51:55 +0200 Subject: [PATCH] feat: memory constants --- .clang-format | 22 +++++ bin/niconst_test | Bin 0 -> 51872 bytes bin/niconst_test.dSYM/Contents/Info.plist | 20 +++++ .../Contents/Resources/DWARF/niconst_test | Bin 0 -> 13572 bytes .../Relocations/aarch64/niconst_test.yml | 5 ++ makefile | 18 ++++ niconst.h | 17 ++++ test/niconst_test.c | 80 ++++++++++++++++++ 8 files changed, 162 insertions(+) create mode 100644 .clang-format create mode 100755 bin/niconst_test create mode 100644 bin/niconst_test.dSYM/Contents/Info.plist create mode 100644 bin/niconst_test.dSYM/Contents/Resources/DWARF/niconst_test create mode 100644 bin/niconst_test.dSYM/Contents/Resources/Relocations/aarch64/niconst_test.yml create mode 100644 makefile create mode 100644 niconst.h create mode 100644 test/niconst_test.c diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..5475a73 --- /dev/null +++ b/.clang-format @@ -0,0 +1,22 @@ +AlignAfterOpenBracket: DontAlign +AlignEscapedNewlines: DontAlign +AlignOperands: DontAlign +AllowShortBlocksOnASingleLine: Always +AllowShortCaseLabelsOnASingleLine: true +AllowShortEnumsOnASingleLine: true +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterDefinitionReturnType: TopLevel +BreakBeforeTernaryOperators: false +BinPackArguments: false +BinPackParameters: false +BreakBeforeBraces: WebKit +IndentCaseLabels: false +TabWidth: 4 +IndentWidth: 4 +ContinuationIndentWidth: 4 +UseTab: ForContinuationAndIndentation +ColumnLimit: 0 +ReflowComments: false +SortIncludes: false +SpaceBeforeParens: false \ No newline at end of file diff --git a/bin/niconst_test b/bin/niconst_test new file mode 100755 index 0000000000000000000000000000000000000000..84e0070758c313b50e97f251fe0ee1afb88b9aaf GIT binary patch literal 51872 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 + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.niconst_test + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/bin/niconst_test.dSYM/Contents/Resources/DWARF/niconst_test b/bin/niconst_test.dSYM/Contents/Resources/DWARF/niconst_test new file mode 100644 index 0000000000000000000000000000000000000000..a271d4d027cb8afd2a52c0f309d0a46647b4755a GIT binary patch literal 13572 zcmeHOT})g>6rQ_36j-3!(nQ)1NvfOVr=3|A5AoAwTZvcl+;)ft2Nq0(wgcy^TS>)KcTNW)1EtX z&dhxG%y(z*y~90w;pVTm%Lvg3q*9O)kZ+1ntR=(?0?8%p#82=)A?paa0$DZ4eh^B#+aK*X*3oka6i4D%4x>XwoKN8-l=gKT z>04OI`iF%r!1HOLdLc)VL!&gWkLE=sWKO)xYd9&Bg(hrl^Qwo~tDwJ?AC6n|)lR%; z;Kb-S5hq&cyKLPqSP>rJk9p^TY4T~op@&io<{;ej@-+1mn?{!(wG%9X~N3q z3^TPD?`?q>w)I24mP?c-vZhra(COc0fwy5f0EZp$q-(6kiFad(@!BEmV@Ers!{&2_ znFJd9vrJz&U*-hfkPXC%VXFc>eSr4oVi}!Vo&F8L!oll1EjtAWamzB~K0*d;Dq9b; zV4yV8-q%j|9_s4lvpFmlBjigZ#6&?~aeYym$`-D|@_0?qRwlb&MPRgFXG$~KB&>~G zhV~DeiADZ3g}Hyl5)5)X9^OOj3D@gxAcl|ARx`P}aY}44e^cpfJeFqb0eM@D7q*$~ zYr|${MS+(#Ms!oRtVRBXC%J#@9ws_VUz}K|<9f(svZkzaj<5Tsc{*4O%B+RHRIDv#dkC#m5(B$-QTHtky z_S37x6St2=cyj{pO@TMJO1xM+p3_Gb`*-pSem#Z+-pMvmSSFL>g_|a8;T*5_CC6)$ z^8z2(DxOIlx=#e!jBzs#YB^xuX4 zp3vp~{3D^?5cTJU{*%x@7y92q|61tRgbr^ixG@gGu4g!{(?mX-TWCo#3%+L21$z*D zshKy$VW+9*q=|2}#a4yp^ps)2hDuLD^UMI%NA<*TUZ(?k4Ehk7i5Vt=9ha4-sW^?x zqERRh+KM)FreMz4%=v;j&&)7ll@tSt0mXn~Krx^gPz)#r6a$I@#eibq|IPs4nZw?E ztcPf$^_st|fqlBcZ~o)A|6wU0Ns3hXBV~2|v)Ws(?y?4dq=NkTgQ(jIIer@$5Pce# z=+kHGgYCybo)YcvUZQ=})?QYtTrr>+Pz)#r6a$I@#eiZ!F`yVw3@8Q^1B!t=XCMz< zyznu87v!3z-Kr?Z3?l(RpwNIt;?^2mK5xAiLS^^Q~0OS6j$LH}#Vu=vOGc1wtZwu(BY$w0( z%Qyk~JzvHN$anx5S0KOt%eaHn3{PVx*GL`FTyE|NAs!NjO4MB5BF$Y?yv74IU?aPR z6nQjWEGFe17cZ8OjUG2ImXbP;hZlWhv&YMeWn`O^&T(^$2;<^kV>zI&@5u7-}l8?Ut2bXJNwLfVIh(t03~hB(~7h@P{ItQlzA z6>JT*2AY_)rEOO$Xu-B^!5z&60~JE1!J_|J)Iu;pLQx~0i{*}oBKnA)&JO9h&|Zj! zj+x0Qgn#yBvuP{T8#!Qw4#pCPdXEIHWI;p3!8GQ^;^f5S7 zi*+2rCo)*#KRHMY#4z%ry{D)BDDCY$)}upW(UM>#+HQ6nW5+Ib#9w<5?I=64=wht}%Pw4DM0<&qo7r(Q H9wGe;l2BE; literal 0 HcmV?d00001 diff --git a/bin/niconst_test.dSYM/Contents/Resources/Relocations/aarch64/niconst_test.yml b/bin/niconst_test.dSYM/Contents/Resources/Relocations/aarch64/niconst_test.yml new file mode 100644 index 0000000..108c30c --- /dev/null +++ b/bin/niconst_test.dSYM/Contents/Resources/Relocations/aarch64/niconst_test.yml @@ -0,0 +1,5 @@ +--- +triple: 'arm64-apple-darwin' +binary-path: 'bin/niconst_test' +relocations: [] +... diff --git a/makefile b/makefile new file mode 100644 index 0000000..359b8a7 --- /dev/null +++ b/makefile @@ -0,0 +1,18 @@ +RELEASE_flags=-DNDEBUG -O2 -g0 +DEBUG_flags=-std=c23 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined + +clean: + rm -fr bin + +format: + clang-format -i test/niconst_test.c + clang-format -i niconst.h + +test: bin/test + bin/niconst_test + +.PHONY: test clean + +bin/test: test/niconst_test.c + mkdir -p bin/test + cc ${DEBUG_flags} test/niconst_test.c -o bin/niconst_test \ No newline at end of file diff --git a/niconst.h b/niconst.h new file mode 100644 index 0000000..7e21d29 --- /dev/null +++ b/niconst.h @@ -0,0 +1,17 @@ +#pragma once + +#define NICONST_SIZE_T_ZERO ((size_t) 0) + +// MEMORY CONSTANTS: BINARY +#define NICONST_MEM_BINARY_FACTOR ((size_t) 1024) +#define NICONST_KIB_B(n) ((n) * NICONST_MEM_BINARY_FACTOR) +#define NICONST_MIB_B(n) ((NICONST_KIB_B(n)) * NICONST_MEM_BINARY_FACTOR) +#define NICONST_GIB_B(n) ((NICONST_MIB_B(n)) * NICONST_MEM_BINARY_FACTOR) +#define NICONST_TIB_B(n) ((NICONST_GIB_B(n)) * NICONST_MEM_BINARY_FACTOR) + +// MEMORY CONSTANTS: DECIMAL +#define NICONST_MEM_DECIMAL_FACTOR ((size_t) 1000) +#define NICONST_KB_B(n) ((n) * NICONST_MEM_DECIMAL_FACTOR) +#define NICONST_MB_B(n) ((NICONST_KB_B(n)) * NICONST_MEM_DECIMAL_FACTOR) +#define NICONST_GB_B(n) ((NICONST_MB_B(n)) * NICONST_MEM_DECIMAL_FACTOR) +#define NICONST_TB_B(n) ((NICONST_GB_B(n)) * NICONST_MEM_DECIMAL_FACTOR) diff --git a/test/niconst_test.c b/test/niconst_test.c new file mode 100644 index 0000000..1e96873 --- /dev/null +++ b/test/niconst_test.c @@ -0,0 +1,80 @@ +#include "../niconst.h" +#include +#include + +void +test_kib_b() +{ + assert(NICONST_KIB_B(0) == (size_t) 0); + assert(NICONST_KIB_B(1) == (size_t) 1024); +} + +void +test_mib_b() +{ + assert(NICONST_MIB_B(0) == (size_t) 0); + assert(NICONST_MIB_B(1) == (size_t) 1048576); + assert(NICONST_MIB_B(5) == ((size_t) 1024) * NICONST_KIB_B(5)); +} + +void +test_gib_b() +{ + assert(NICONST_GIB_B(0) == (size_t) 0); + assert(NICONST_GIB_B(1) == (size_t) 1073741824); + assert(NICONST_GIB_B(3) == ((size_t) 1024) * NICONST_MIB_B(3)); +} + +void +test_tib_b() +{ + assert(NICONST_TIB_B(0) == (size_t) 0); + assert(NICONST_TIB_B(1) == (size_t) 1099511627776); + assert(NICONST_TIB_B(3) == ((size_t) 1024) * NICONST_GIB_B(3)); +} + +void +test_kb_b() +{ + assert(NICONST_KB_B(0) == (size_t) 0); + assert(NICONST_KB_B(1) == (size_t) 1000); +} + +void +test_mb_b() +{ + assert(NICONST_MB_B(0) == (size_t) 0); + assert(NICONST_MB_B(1) == (size_t) 1000000); + assert(NICONST_MB_B(5) == ((size_t) 1000) * NICONST_KB_B(5)); +} + +void +test_gb_b() +{ + assert(NICONST_GB_B(0) == (size_t) 0); + assert(NICONST_GB_B(1) == (size_t) 1000000000); + assert(NICONST_GB_B(3) == ((size_t) 1000) * NICONST_MB_B(3)); +} + +void +test_tb_b() +{ + assert(NICONST_TB_B(0) == (size_t) 0); + assert(NICONST_TB_B(1) == (size_t) 1000000000000); + assert(NICONST_TB_B(3) == ((size_t) 1000) * NICONST_GB_B(3)); +} + +int +main() +{ + test_kib_b(); + test_mib_b(); + test_gib_b(); + test_tib_b(); + test_kb_b(); + test_mb_b(); + test_gb_b(); + test_tb_b(); + printf("== TESTS SUCCESSFUL ==\n"); + return 0; +}