27 auto const baseFee = env.
current()->fees().base;
30 BEAST_EXPECT(ret[jss::error_message].asString() ==
"Missing field 'base_asset'.");
34 BEAST_EXPECT(ret[jss::error_message].asString() ==
"Missing field 'quote_asset'.");
50 "012345678901234567890123456789012345678",
51 "012345678901234567890123456789012345678G"};
52 for (
auto const& v : invalidAsset)
55 BEAST_EXPECT(ret[jss::error].asString() ==
"invalidParams");
57 BEAST_EXPECT(ret[jss::error].asString() ==
"invalidParams");
59 BEAST_EXPECT(ret[jss::error].asString() ==
"invalidParams");
64 BEAST_EXPECT(ret[jss::error_message].asString() ==
"Missing field 'oracles'.");
68 BEAST_EXPECT(ret[jss::error].asString() ==
"oracleMalformed");
72 BEAST_EXPECT(ret[jss::error].asString() ==
"objectNotFound");
77 BEAST_EXPECT(ret[jss::error].asString() ==
"objectNotFound");
80 for (
auto const& v : invalidDocument)
85 BEAST_EXPECT(ret[jss::error].asString() ==
"invalidParams");
89 BEAST_EXPECT(ret[jss::error].asString() ==
"oracleMalformed");
93 BEAST_EXPECT(ret[jss::error].asString() ==
"objectNotFound");
96 BEAST_EXPECT(ret[jss::error].asString() ==
"oracleMalformed");
103 .series = {{
"XRP",
"EUR", 740, 1}},
104 .fee =
static_cast<int>(baseFee.drops())});
106 BEAST_EXPECT(ret[jss::error].asString() ==
"objectNotFound");
110 for (
auto const& v : invalidTrim)
114 BEAST_EXPECT(ret[jss::error].asString() ==
"invalidParams");
119 for (
auto const& v : invalidTime)
122 env,
"XRP",
"USD", {{{owner, oracle.documentID()}}},
std::nullopt, v);
123 BEAST_EXPECT(ret[jss::error].asString() ==
"invalidParams");
130 auto const baseFee =
static_cast<int>(env.
current()->fees().base.drops());
133 for (
int i = 0; i < 201; ++i)
137 Oracle const oracle(env, {.owner = owner, .documentID = i, .fee = baseFee});
141 BEAST_EXPECT(ret[jss::error].asString() ==
"oracleMalformed");
151 auto prep = [&](
Env& env,
auto& oracles) {
153 for (
int i = 0; i < 10; ++i)
155 auto const baseFee =
static_cast<int>(env.
current()->fees().base.drops());
162 .documentID = rand(),
163 .series = {{
"XRP",
"USD", 740 + i, 1}, {
"XRP",
"EUR", 740, 1}},
165 oracles.emplace_back(owner, oracle.documentID());
173 for (
auto const& feats : {all - featureSingleAssetVault - featureLendingProtocol, all})
183 Env env(*
this, feats);
188 BEAST_EXPECT(ret[jss::entire_set][jss::mean] ==
"74.45");
189 BEAST_EXPECT(ret[jss::entire_set][jss::size].
asUInt() == 10);
192 ret[jss::entire_set][jss::standard_deviation] ==
"0.3027650354097491666",
193 ret[jss::entire_set][jss::standard_deviation].asString());
194 BEAST_EXPECT(ret[jss::median] ==
"74.45");
195 BEAST_EXPECT(ret[jss::time] == 946694900);
207 BEAST_EXPECT(ret[jss::entire_set][jss::mean] ==
"74.45");
208 BEAST_EXPECT(ret[jss::entire_set][jss::size].
asUInt() == 10);
211 ret[jss::entire_set][jss::standard_deviation] ==
"0.3027650354097491666",
212 ret[jss::entire_set][jss::standard_deviation].asString());
213 BEAST_EXPECT(ret[jss::median] ==
"74.45");
214 BEAST_EXPECT(ret[jss::trimmed_set][jss::mean] ==
"74.45");
215 BEAST_EXPECT(ret[jss::trimmed_set][jss::size].
asUInt() == 6);
218 ret[jss::trimmed_set][jss::standard_deviation] ==
"0.1870828693386970693",
219 ret[jss::trimmed_set][jss::standard_deviation].asString());
220 BEAST_EXPECT(ret[jss::time] == 946694900);
227 auto const baseFee =
static_cast<int>(env.
current()->fees().base.drops());
231 for (
int i = 0; i < 3; ++i)
235 {.owner = oracles[i].first,
237 .documentID =
asUInt(*oracles[i].second),
242 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
243 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
244 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
246 for (
int i = 3; i < 6; ++i)
250 {.owner = oracles[i].first,
252 .documentID =
asUInt(*oracles[i].second),
257 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
258 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
263 BEAST_EXPECT(ret[jss::entire_set][jss::mean] ==
"74.6");
264 BEAST_EXPECT(ret[jss::entire_set][jss::size].
asUInt() == 7);
267 ret[jss::entire_set][jss::standard_deviation] ==
"0.2160246899469286744",
268 ret[jss::entire_set][jss::standard_deviation].asString());
269 BEAST_EXPECT(ret[jss::median] ==
"74.6");
270 BEAST_EXPECT(ret[jss::trimmed_set][jss::mean] ==
"74.6");
271 BEAST_EXPECT(ret[jss::trimmed_set][jss::size].
asUInt() == 5);
274 ret[jss::trimmed_set][jss::standard_deviation] ==
"0.1581138830084189666",
275 ret[jss::trimmed_set][jss::standard_deviation].asString());
276 BEAST_EXPECT(ret[jss::time] == 946694900);
282 auto const baseFee =
static_cast<int>(env.
current()->fees().base.drops());
286 for (
int i = 0; i < oracles.
size(); ++i)
290 {.owner = oracles[i].first,
292 .documentID =
asUInt(*oracles[i].second),
297 oracle.set(
UpdateArg{.
series = {{
"XRP",
"USD", 740, 1}}, .fee = baseFee});
302 BEAST_EXPECT(ret[jss::entire_set][jss::mean] ==
"74");
303 BEAST_EXPECT(ret[jss::entire_set][jss::size].
asUInt() == 8);
304 BEAST_EXPECT(ret[jss::entire_set][jss::standard_deviation] ==
"0");
305 BEAST_EXPECT(ret[jss::median] ==
"74");
306 BEAST_EXPECT(ret[jss::time] == 946695000);