Compare commits

..

3 Commits

Author SHA1 Message Date
Kyle Isom 6266148eed adding more to intro 2024-02-23 23:41:24 -08:00
K. Isom af61d914f0 add rpm support 2024-02-04 07:01:06 +00:00
Kyle Isom f99d5a8356 Add integer square root to SCMP. 2023-11-09 00:38:01 -08:00
6 changed files with 77 additions and 2 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.22) cmake_minimum_required(VERSION 3.22)
project(scsl LANGUAGES CXX project(scsl LANGUAGES CXX
VERSION 1.1.3 VERSION 1.1.4
DESCRIPTION "Shimmering Clarity Standard Library") DESCRIPTION "Shimmering Clarity Standard Library")
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD 14)

View File

@ -20,7 +20,7 @@ set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
if(LINUX) if(LINUX)
set(CPACK_GENERATOR "DEB;STGZ;TGZ") set(CPACK_GENERATOR "DEB;RPM;STGZ;TGZ")
elseif(APPLE) elseif(APPLE)
set(CPACK_GENERATOR "STGZ;TGZ") set(CPACK_GENERATOR "STGZ;TGZ")
elseif(MSVC OR MSYS OR MINGW) elseif(MSVC OR MSYS OR MINGW)

View File

@ -115,6 +115,13 @@ WithinTolerance(T a, T b, T epsilon)
} }
/// \brief Integer square-root.
///
/// \param n A max-value integer whose square root should be returned.
/// \return The square root of $n$.
size_t ISqrt(size_t n);
} // namespace scmp } // namespace scmp

View File

@ -72,6 +72,12 @@ namespace scsl {
/// working on a graphical editor. For this, I needed some data structures to /// working on a graphical editor. For this, I needed some data structures to
/// manage memory in the editor. Thus, Buffer was born. /// manage memory in the editor. Thus, Buffer was born.
/// ///
/// \subsection finally Finally
///
/// I'd been writing Go professionally for a while, but C was my first love. I
/// recently started a job that is mostly in C++, and the best way for me to
/// learn is to build a bunch of stuff with it. So, I took a bunch of micro-
/// controller stuff I'd been writing and started building out some other stuff.
} }

View File

@ -151,5 +151,37 @@ DefaultEpsilon(int& epsilon)
} }
size_t
ISqrt(size_t n)
{
if (n < 2) {
return n;
}
size_t start = 0;
size_t end = n / 2;
size_t result = 0;
while (start <= end) {
auto middle = (start + end) >> 1;
result = middle * middle;
if (result == n) {
return middle;
}
if (result < n) {
start = middle + 1;
result = middle;
} else {
end = middle - 1;
result = middle;
}
}
return result;
}
} // namespace scmp } // namespace scmp

View File

@ -116,6 +116,35 @@ RotateRadians()
} }
bool
IntegerSquareRoot()
{
static std::vector<size_t> ns{
// standard integer roots
4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
// a few float cases
42, 90, 92
};
static std::vector<size_t> expected{
// standard integer roots
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
// a few float cases
6, 9, 10
};
SCTEST_CHECK_EQ(ns.size(), expected.size());
for (size_t i = 0; i < ns.size(); i++) {
auto root = scmp::ISqrt(ns.at(i));
SCTEST_CHECK_EQ(root, expected.at(i));
}
return true;
}
} // anonymous namespace } // anonymous namespace
@ -148,6 +177,7 @@ main(int argc, char *argv[])
suite.AddTest("WithinToleranceFloat", WithinToleranceFloat); suite.AddTest("WithinToleranceFloat", WithinToleranceFloat);
suite.AddTest("WithinToleranceDouble", WithinToleranceDouble); suite.AddTest("WithinToleranceDouble", WithinToleranceDouble);
suite.AddTest("RotateRadians", RotateRadians); suite.AddTest("RotateRadians", RotateRadians);
suite.AddTest("IntegerSquareRoot", IntegerSquareRoot);
delete flags; delete flags;
auto result = suite.Run(); auto result = suite.Run();