From fde7cc0d6fb42b3f13b147f8c381c8f06f489e60 Mon Sep 17 00:00:00 2001 From: whh8b <whh8b@git.zephyr-software.com> Date: Fri, 24 Oct 2014 17:36:18 +0000 Subject: [PATCH] Add unit testing for binary search. --- .gitattributes | 1 + test/MemorySpace.cpp | 206 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 207 insertions(+) create mode 100644 test/MemorySpace.cpp diff --git a/.gitattributes b/.gitattributes index 51578ab9d..7f14fc898 100644 --- a/.gitattributes +++ b/.gitattributes @@ -32,6 +32,7 @@ src/memory_space.cpp -text src/zipr.cpp -text src/zipr_options.cpp -text src/zipr_stats.cpp -text +test/MemorySpace.cpp -text test/MemorySpace.o -text third_party/ELFIO/elfio-2.2/AUTHORS -text third_party/ELFIO/elfio-2.2/COPYING -text diff --git a/test/MemorySpace.cpp b/test/MemorySpace.cpp new file mode 100644 index 000000000..0ec450bbb --- /dev/null +++ b/test/MemorySpace.cpp @@ -0,0 +1,206 @@ +#include <zipr_all.h> + +using namespace zipr; +using namespace std; + +#define INVOKE(a) \ +bool __ ## a ## _result = false; \ +__ ## a ## _result = a(); \ +printf(#a ":"); \ +if (__ ## a ## _result) \ +{ \ +printf(" pass\n"); \ +} \ +else \ +{ \ +printf(" fail\n"); \ +} + +bool TestSplitMemorySpace() +{ + Options_t opts; + opts.SetVerbose(true); + MemorySpace_t m(&opts); + + m.AddFreeRange(Range_t(500, 600)); + + m.SplitFreeRange(550); + + assert(m.GetRangeCount() == 2); + + return true; +} + +bool TestBinarySearchMaxRange() +{ + std::list<Range_t>::iterator foundRange; + Options_t opts; + opts.SetVerbose(true); + MemorySpace_t m(&opts); + m.AddFreeRange(Range_t(256, (RangeAddress_t)-1)); + + m.SplitFreeRange(336); + m.SplitFreeRange(345); + m.SplitFreeRange(355); + m.SplitFreeRange(365); + m.SplitFreeRange(375); + m.SplitFreeRange(385); + + m.Sort(); + + cout << "Looking for 0x" << std::hex << (RangeAddress_t)-1 << ":" << endl; + foundRange = m.FindFreeRange(RangeAddress_t((RangeAddress_t)-1)); + assert(m.IsValidRange(foundRange)); + cout << "Found: 0x" << std::hex << (*foundRange).GetStart() << " - 0x" << (*foundRange).GetEnd() << endl; + + return true; +} + + +bool TestBinarySearch() +{ + std::list<Range_t>::iterator foundRange; + Options_t opts; + opts.SetVerbose(true); + MemorySpace_t m(&opts); + m.AddFreeRange(Range_t(256, 512)); + + m.SplitFreeRange(300); + m.SplitFreeRange(315); + m.SplitFreeRange(336); + m.SplitFreeRange(337); + m.SplitFreeRange(400); + + m.PrintMemorySpace(cout); + m.Sort(); + m.PrintMemorySpace(cout); + + cout << "Looking for 0x" << std::hex << 258 << ":" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(258)); + assert(m.IsValidRange(foundRange)); + cout << "Found: 0x" << std::hex << (*foundRange).GetStart() << " - 0x" << (*foundRange).GetEnd() << endl; + + cout << "Looking for 0x" << std::hex << 335 << ":" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(335)); + assert(m.IsValidRange(foundRange)); + cout << "Found: 0x" << std::hex << (*foundRange).GetStart() << " - 0x" << (*foundRange).GetEnd() << endl; + + cout << "Looking for 0x" << std::hex << 301 << ":" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(301)); + assert(m.IsValidRange(foundRange)); + cout << "Found: 0x" << std::hex << (*foundRange).GetStart() << " - 0x" << (*foundRange).GetEnd() << endl; + + cout << "Looking for 0x" << std::hex << 316 << ":" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(316)); + assert(m.IsValidRange(foundRange)); + cout << "Found: 0x" << std::hex << (*foundRange).GetStart() << " - 0x" << (*foundRange).GetEnd() << endl; + + cout << "Looking for 0x" << std::hex << 338 << ":" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(338)); + assert(m.IsValidRange(foundRange)); + cout << "Found: 0x" << std::hex << (*foundRange).GetStart() << " - 0x" << (*foundRange).GetEnd() << endl; + + cout << "Looking for 0x" << std::hex << 401 << ":" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(401)); + assert(m.IsValidRange(foundRange)); + cout << "Found: 0x" << std::hex << (*foundRange).GetStart() << " - 0x" << (*foundRange).GetEnd() << endl; + + cout << "Looking for 0x" << std::hex << 450 << ":" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(450)); + assert(m.IsValidRange(foundRange)); + cout << "Found: 0x" << std::hex << (*foundRange).GetStart() << " - 0x" << (*foundRange).GetEnd() << endl; + + cout << "Looking for 0x" << std::hex << 512 << ":" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(512)); + assert(m.IsValidRange(foundRange)); + cout << "Found: 0x" << std::hex << (*foundRange).GetStart() << " - 0x" << (*foundRange).GetEnd() << endl; + + cout << "Looking for 0x" << std::hex << 400 << ": (but won't find)" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(400)); + assert(!m.IsValidRange(foundRange)); + + cout << "Looking for 0x" << std::hex << 300 << ": (but won't find)" << endl; + foundRange = m.FindFreeRange(RangeAddress_t(300)); + assert(!m.IsValidRange(foundRange)); + return true; +} +bool TestSort() +{ + Options_t opts; + opts.SetVerbose(true); + MemorySpace_t m(&opts); + m.AddFreeRange(Range_t(256, 512)); + + m.SplitFreeRange(300); + m.SplitFreeRange(315); + m.SplitFreeRange(336); + m.SplitFreeRange(337); + m.SplitFreeRange(400); + + m.MergeFreeRange(300); + m.MergeFreeRange(337); + m.MergeFreeRange(315); + + m.PrintMemorySpace(cout); + m.Sort(); + m.PrintMemorySpace(cout); + + return true; +} +bool TestMergeFreeRange() +{ + Options_t opts; + opts.SetVerbose(true); + MemorySpace_t m(&opts); + m.AddFreeRange(Range_t(256, 512)); + + m.SplitFreeRange(300); + + m.SplitFreeRange(315); + + m.SplitFreeRange(336); + + m.SplitFreeRange(337); + + m.SplitFreeRange(400); + + cout << "Post Splits at:"; + cout << "0x" << std::hex << 300 << " "; + cout << "0x" << std::hex << 315 << " "; + cout << "0x" << std::hex << 336 << " "; + cout << "0x" << std::hex << 337 << " "; + cout << "0x" << std::hex << 400 << endl; + m.PrintMemorySpace(cout); + + m.MergeFreeRange(300); + + cout << "Post 0x" << std::hex << 300 << " Merge" << endl; + m.PrintMemorySpace(cout); + + m.MergeFreeRange(315); + + cout << "Post 0x" << std::hex << 315 << " Merge" << endl; + m.PrintMemorySpace(cout); + + m.MergeFreeRange(337); + + cout << "Post 0x" << std::hex << 337 << " Merge" << endl; + m.PrintMemorySpace(cout); + + assert(m.GetRangeCount() == 3); + assert(m.IsByteFree(300)); + assert(m.IsByteFree(315)); + assert(m.IsByteFree(317)); + assert(!m.IsByteFree(336)); + assert(!m.IsByteFree(400)); + return true; +} + +int main(int argc, char *argv[]) +{ + INVOKE(TestSplitMemorySpace); + INVOKE(TestMergeFreeRange); + INVOKE(TestSort); + INVOKE(TestBinarySearch); + INVOKE(TestBinarySearchMaxRange); +} -- GitLab