From 5ea012c1929a4371540e2d220eb8518b7bbb07fc Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Mon, 18 Feb 2013 20:31:05 +0000 Subject: [PATCH] base: add Array::Swap() method and the corresponding unit test. --- src/lol/base/array.h | 15 +++++++++++++++ test/unit/array.cpp | 13 +++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/lol/base/array.h b/src/lol/base/array.h index 99f7ef42..d30b9f72 100644 --- a/src/lol/base/array.h +++ b/src/lol/base/array.h @@ -168,6 +168,21 @@ public: Remove(m_count - 1, 1); } + void Swap(int pos1, int pos2) + { + ASSERT(pos1 >= 0); + ASSERT(pos2 >= 0); + ASSERT(pos1 < m_count); + ASSERT(pos2 < m_count); + + if (pos1 != pos2) + { + Element tmp = (*this)[pos1]; + (*this)[pos1] = (*this)[pos2]; + (*this)[pos2] = tmp; + } + } + void Remove(int pos, int todelete = 1) { ASSERT(pos >= 0); diff --git a/test/unit/array.cpp b/test/unit/array.cpp index cc572f45..5cf609fe 100644 --- a/test/unit/array.cpp +++ b/test/unit/array.cpp @@ -100,6 +100,19 @@ LOLUNIT_FIXTURE(ArrayTest) LOLUNIT_ASSERT_EQUAL(a[0].m8, 0); } + LOLUNIT_TEST(ArraySwap) + { + Array a; + a.Push(10, 20); + a.Push(30, 40); + a.Swap(0, 1); + + LOLUNIT_ASSERT_EQUAL(30, a[0].m1); + LOLUNIT_ASSERT_EQUAL(40, a[0].m2); + LOLUNIT_ASSERT_EQUAL(10, a[1].m1); + LOLUNIT_ASSERT_EQUAL(20, a[1].m2); + } + LOLUNIT_TEST(ArrayConcat) { Array a, b;