1 #include "test/lib/common.hpp"
2 #include "test/lib/MemcachedCluster.hpp"
4 TEST_CASE("memcached_inc_dec") {
5 pair
<string
, MemcachedCluster
> tests
[] = {
6 {"mixed", MemcachedCluster::mixed()},
9 LOOPED_SECTION(tests
) {
10 auto memc
= &test
.memc
;
11 auto proto
= GENERATE(as
<memcached_behavior_t
>{}, 0, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL
, MEMCACHED_BEHAVIOR_META_PROTOCOL
);
12 char *prefix
= GENERATE(as
<char *>{}, "", "namespace:");
14 if (proto
== MEMCACHED_BEHAVIOR_META_PROTOCOL
&& !test
.isGEVersion(1, 6)) {
18 REQUIRE_SUCCESS(memcached_behavior_set(memc
, proto
, 1));
21 REQUIRE_SUCCESS(memcached_callback_set(memc
, MEMCACHED_CALLBACK_NAMESPACE
, prefix
));
24 DYNAMIC_SECTION("increment (" << (proto
? libmemcached_string_behavior(proto
) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix
<< ")") {
27 REQUIRE_SUCCESS(memcached_set(memc
, S("number"), S("0"), 0, 0));
29 for (auto i
= 1; i
<= 10; ++i
) {
30 INFO("iteration " << i
);
31 REQUIRE_SUCCESS(memcached_increment(memc
, S("number"), 1, &number
));
32 REQUIRE(number
== static_cast<uint64_t>(i
));
36 DYNAMIC_SECTION("increment by_key (" << (proto
? libmemcached_string_behavior(proto
) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix
<< ")") {
39 REQUIRE_SUCCESS(memcached_set_by_key(memc
, S("key"), S("number"), S("0"), 0, 0));
41 for (auto i
= 1; i
<= 10; ++i
) {
42 REQUIRE_SUCCESS(memcached_increment_by_key(memc
, S("key"), S("number"), 1, &number
));
43 REQUIRE(number
== static_cast<uint64_t>(i
));
47 DYNAMIC_SECTION("increment with initial (" << (proto
? libmemcached_string_behavior(proto
) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix
<< ")") {
49 uint64_t initial
= GENERATE(0, 456);
52 REQUIRE_RC(MEMCACHED_INVALID_ARGUMENTS
,
53 memcached_increment_with_initial(memc
, S("number"), 1, initial
, 0, &number
));
55 REQUIRE_SUCCESS(memcached_increment_with_initial(memc
, S("number"), 123, initial
, 0, &number
));
56 REQUIRE(number
== initial
);
57 REQUIRE_SUCCESS(memcached_increment_with_initial(memc
, S("number"), 123, initial
, 0, &number
));
58 REQUIRE(number
== initial
+ 123);
62 DYNAMIC_SECTION("increment with initial by_key (" << (proto
? libmemcached_string_behavior(proto
) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix
<< ")") {
64 uint64_t initial
= GENERATE(0, 456);
67 REQUIRE_RC(MEMCACHED_INVALID_ARGUMENTS
,
68 memcached_increment_with_initial_by_key(memc
, S("key"), S("number"), 1, initial
, 0, &number
));
70 REQUIRE_SUCCESS(memcached_increment_with_initial_by_key(memc
, S("key"), S("number"), 123, initial
, 0, &number
));
71 REQUIRE(number
== initial
);
72 REQUIRE_SUCCESS(memcached_increment_with_initial_by_key(memc
, S("key"), S("number"), 123, initial
, 0, &number
));
73 REQUIRE(number
== initial
+ 123);
77 DYNAMIC_SECTION("decrement (" << (proto
? libmemcached_string_behavior(proto
) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix
<< ")") {
80 REQUIRE_SUCCESS(memcached_set(memc
, S("number"), S("10"), 0, 0));
82 for (auto i
= 9; i
>= 0; --i
) {
83 REQUIRE_SUCCESS(memcached_decrement(memc
, S("number"), 1, &number
));
84 REQUIRE(number
== static_cast<uint64_t>(i
));
87 DYNAMIC_SECTION("decrement by_key (" << (proto
? libmemcached_string_behavior(proto
) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix
<< ")") {
90 REQUIRE_SUCCESS(memcached_set_by_key(memc
, S("key"), S("number"), S("10"), 0, 0));
92 for (auto i
= 9; i
>= 0; --i
) {
93 REQUIRE_SUCCESS(memcached_decrement_by_key(memc
, S("key"), S("number"), 1, &number
));
94 REQUIRE(number
== static_cast<uint64_t>(i
));
97 DYNAMIC_SECTION("decrement with initial (" << (proto
? libmemcached_string_behavior(proto
) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix
<< ")") {
99 uint64_t initial
= GENERATE(987, 456);
102 REQUIRE_RC(MEMCACHED_INVALID_ARGUMENTS
,
103 memcached_decrement_with_initial(memc
, S("number"), 1, initial
, 0, &number
));
105 REQUIRE_SUCCESS(memcached_decrement_with_initial(memc
, S("number"), 123, initial
, 0, &number
));
106 REQUIRE(number
== initial
);
107 REQUIRE_SUCCESS(memcached_decrement_with_initial(memc
, S("number"), 123, initial
, 0, &number
));
108 REQUIRE(number
== initial
- 123);
111 DYNAMIC_SECTION("decrement with initial by_key (" << (proto
? libmemcached_string_behavior(proto
) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix
<< ")") {
113 uint64_t initial
= GENERATE(987, 456);
116 REQUIRE_RC(MEMCACHED_INVALID_ARGUMENTS
,
117 memcached_decrement_with_initial_by_key(memc
, S("key"), S("number"), 1, initial
, 0, &number
));
119 REQUIRE_SUCCESS(memcached_decrement_with_initial_by_key(memc
, S("key"), S("number"), 123, initial
, 0, &number
));
120 REQUIRE(number
== initial
);
121 REQUIRE_SUCCESS(memcached_decrement_with_initial_by_key(memc
, S("key"), S("number"), 123, initial
, 0, &number
));
122 REQUIRE(number
== initial
- 123);