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");
101 env, {.owner = owner, .series = {{
"XRP",
"EUR", 740, 1}}, .fee =
static_cast<int>(baseFee.drops())});
103 BEAST_EXPECT(ret[jss::error].asString() ==
"objectNotFound");
107 for (
auto const& v : invalidTrim)
110 BEAST_EXPECT(ret[jss::error].asString() ==
"invalidParams");
115 for (
auto const& v : invalidTime)
118 BEAST_EXPECT(ret[jss::error].asString() ==
"invalidParams");
125 auto const baseFee =
static_cast<int>(env.
current()->fees().base.drops());
128 for (
int i = 0; i < 201; ++i)
132 Oracle oracle(env, {.owner = owner, .documentID = i, .fee = baseFee});
136 BEAST_EXPECT(ret[jss::error].asString() ==
"oracleMalformed");
146 auto prep = [&](
Env& env,
auto& oracles) {
148 for (
int i = 0; i < 10; ++i)
150 auto const baseFee =
static_cast<int>(env.
current()->fees().base.drops());
157 .documentID = rand(),
158 .series = {{
"XRP",
"USD", 740 + i, 1}, {
"XRP",
"EUR", 740, 1}},
160 oracles.emplace_back(owner, oracle.documentID());
168 for (
auto const& feats : {
all - featureSingleAssetVault - featureLendingProtocol,
all})
178 Env env(*
this, feats);
183 BEAST_EXPECT(ret[jss::entire_set][jss::mean] ==
"74.45");
184 BEAST_EXPECT(ret[jss::entire_set][jss::size].
asUInt() == 10);
187 ret[jss::entire_set][jss::standard_deviation] ==
"0.3027650354097491666",
188 ret[jss::entire_set][jss::standard_deviation].asString());
189 BEAST_EXPECT(ret[jss::median] ==
"74.45");
190 BEAST_EXPECT(ret[jss::time] == 946694900);
202 BEAST_EXPECT(ret[jss::entire_set][jss::mean] ==
"74.45");
203 BEAST_EXPECT(ret[jss::entire_set][jss::size].
asUInt() == 10);
206 ret[jss::entire_set][jss::standard_deviation] ==
"0.3027650354097491666",
207 ret[jss::entire_set][jss::standard_deviation].asString());
208 BEAST_EXPECT(ret[jss::median] ==
"74.45");
209 BEAST_EXPECT(ret[jss::trimmed_set][jss::mean] ==
"74.45");
210 BEAST_EXPECT(ret[jss::trimmed_set][jss::size].
asUInt() == 6);
213 ret[jss::trimmed_set][jss::standard_deviation] ==
"0.1870828693386970693",
214 ret[jss::trimmed_set][jss::standard_deviation].asString());
215 BEAST_EXPECT(ret[jss::time] == 946694900);
222 auto const baseFee =
static_cast<int>(env.
current()->fees().base.drops());
226 for (
int i = 0; i < 3; ++i)
229 env, {.owner = oracles[i].first, .documentID =
asUInt(*oracles[i].second), .fee = baseFee},
false);
232 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
233 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
234 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
236 for (
int i = 3; i < 6; ++i)
239 env, {.owner = oracles[i].first, .documentID =
asUInt(*oracles[i].second), .fee = baseFee},
false);
242 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
243 oracle.set(
UpdateArg{.
series = {{
"XRP",
"EUR", 740, 1}}, .fee = baseFee});
248 BEAST_EXPECT(ret[jss::entire_set][jss::mean] ==
"74.6");
249 BEAST_EXPECT(ret[jss::entire_set][jss::size].
asUInt() == 7);
252 ret[jss::entire_set][jss::standard_deviation] ==
"0.2160246899469286744",
253 ret[jss::entire_set][jss::standard_deviation].asString());
254 BEAST_EXPECT(ret[jss::median] ==
"74.6");
255 BEAST_EXPECT(ret[jss::trimmed_set][jss::mean] ==
"74.6");
256 BEAST_EXPECT(ret[jss::trimmed_set][jss::size].
asUInt() == 5);
259 ret[jss::trimmed_set][jss::standard_deviation] ==
"0.1581138830084189666",
260 ret[jss::trimmed_set][jss::standard_deviation].asString());
261 BEAST_EXPECT(ret[jss::time] == 946694900);
267 auto const baseFee =
static_cast<int>(env.
current()->fees().base.drops());
271 for (
int i = 0; i < oracles.
size(); ++i)
274 env, {.owner = oracles[i].first, .documentID =
asUInt(*oracles[i].second), .fee = baseFee},
false);
277 oracle.set(
UpdateArg{.
series = {{
"XRP",
"USD", 740, 1}}, .fee = baseFee});
282 BEAST_EXPECT(ret[jss::entire_set][jss::mean] ==
"74");
283 BEAST_EXPECT(ret[jss::entire_set][jss::size].
asUInt() == 8);
284 BEAST_EXPECT(ret[jss::entire_set][jss::standard_deviation] ==
"0");
285 BEAST_EXPECT(ret[jss::median] ==
"74");
286 BEAST_EXPECT(ret[jss::time] == 946695000);