Skip to content

Commit 142b6dc

Browse files
authored
Merge pull request #4053 from gateway240/alex/initilizer-list
Add initializer list support to the Array class
2 parents 23b786f + f57281c commit 142b6dc

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

OpenSim/Common/Array.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
#include <algorithm>
3636
#include <cstddef>
37+
#include <initializer_list>
3738
#include <iostream>
3839
#include <iterator>
3940
#include <sstream>
@@ -60,6 +61,10 @@ class Array {
6061
Array& operator=(Array&&) noexcept = default;
6162
~Array() noexcept = default;
6263

64+
Array(std::initializer_list<T> initList) :
65+
_defaultValue{}, _storage(initList.begin(), initList.end())
66+
{}
67+
6368
explicit Array(T aDefaultValue = T(), int aSize = 0, int aCapacity = 1) :
6469
_defaultValue{std::move(aDefaultValue)}
6570
{

OpenSim/Common/Test/testArray.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
using namespace OpenSim;
2828

29+
constexpr double tol = std::numeric_limits<double>::epsilon() * 10;
30+
2931
namespace
3032
{
3133
template<typename T>
@@ -129,3 +131,47 @@ TEST_CASE("Array set keeps size if within bounds")
129131
REQUIRE(vals.size() == 1);
130132
REQUIRE(vals.get(0) == 4);
131133
}
134+
135+
TEST_CASE("Array initializer list works with integers")
136+
{
137+
Array<int> vals{-1, 2, 4};
138+
139+
REQUIRE(vals.get(0) == -1);
140+
REQUIRE(vals.get(1) == 2);
141+
REQUIRE(vals.get(2) == 4);
142+
}
143+
144+
TEST_CASE("Array constructor initialization works")
145+
{
146+
Array<int> vals(-1, 2);
147+
148+
REQUIRE(vals.get(0) == -1);
149+
REQUIRE(vals.get(1) == -1);
150+
}
151+
152+
TEST_CASE("Array initializer list works with doubles")
153+
{
154+
Array<double> vals{-1.5, 2.2, 4.6};
155+
156+
REQUIRE_THAT(vals.get(0), Catch::Matchers::WithinAbs(-1.5,tol));
157+
REQUIRE_THAT(vals.get(1), Catch::Matchers::WithinAbs(2.2,tol));
158+
REQUIRE_THAT(vals.get(2), Catch::Matchers::WithinAbs(4.6,tol));
159+
}
160+
161+
TEST_CASE("Array initializer list works with doubles and alternate syntax")
162+
{
163+
Array<double> vals = {-1.5, 2.2, 4.6};
164+
165+
REQUIRE_THAT(vals.get(0), Catch::Matchers::WithinAbs(-1.5,tol));
166+
REQUIRE_THAT(vals.get(1), Catch::Matchers::WithinAbs(2.2,tol));
167+
REQUIRE_THAT(vals.get(2), Catch::Matchers::WithinAbs(4.6,tol));
168+
}
169+
170+
TEST_CASE("Array initializer list works with booleans")
171+
{
172+
Array<bool> vals{true, false, true};
173+
174+
REQUIRE(vals.get(0) == true);
175+
REQUIRE(vals.get(1) == false);
176+
REQUIRE(vals.get(2) == true);
177+
}

0 commit comments

Comments
 (0)