+uint8_t append_test(memcached_st *memc)
+{
+ memcached_return rc;
+ char *key= "fig";
+ char *value= "we";
+ size_t value_length;
+ uint32_t flags;
+
+ rc= memcached_flush(memc, 0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ rc= memcached_set(memc, key, strlen(key),
+ value, strlen(value),
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ rc= memcached_append(memc, key, strlen(key),
+ " the", strlen(" the"),
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ rc= memcached_append(memc, key, strlen(key),
+ " people", strlen(" people"),
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ value= memcached_get(memc, key, strlen(key),
+ &value_length, &flags, &rc);
+ assert(!memcmp(value, "we the people", strlen("we the people")));
+ assert(strlen("we the people") == value_length);
+ assert(rc == MEMCACHED_SUCCESS);
+ free(value);
+
+ return 0;
+}
+
+uint8_t append_binary_test(memcached_st *memc)
+{
+ memcached_return rc;
+ char *key= "numbers";
+ unsigned int *store_ptr;
+ unsigned int store_list[] = { 23, 56, 499, 98, 32847, 0 };
+ char *value;
+ size_t value_length;
+ uint32_t flags;
+ unsigned int x;
+
+ rc= memcached_flush(memc, 0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ rc= memcached_set(memc,
+ key, strlen(key),
+ NULL, 0,
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ for (x= 0; store_list[x] ; x++)
+ {
+ rc= memcached_append(memc,
+ key, strlen(key),
+ (char *)&store_list[x], sizeof(unsigned int),
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+ }
+
+ value= memcached_get(memc, key, strlen(key),
+ &value_length, &flags, &rc);
+ assert((value_length == (sizeof(unsigned int) * x)));
+ assert(rc == MEMCACHED_SUCCESS);
+
+ store_ptr= (unsigned int *)value;
+ x= 0;
+ while ((size_t)store_ptr < (size_t)(value + value_length))
+ {
+ assert(*store_ptr == store_list[x++]);
+ store_ptr++;
+ }
+ free(value);
+
+ return 0;
+}
+
+uint8_t cas2_test(memcached_st *memc)
+{
+ memcached_return rc;
+ char *keys[]= {"fudge", "son", "food"};
+ size_t key_length[]= {5, 3, 4};
+ char *value= "we the people";
+ size_t value_length= strlen("we the people");
+ unsigned int x;
+ memcached_result_st results_obj;
+ memcached_result_st *results;
+ unsigned int set= 1;
+
+ rc= memcached_flush(memc, 0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, &set);
+
+ for (x= 0; x < 3; x++)
+ {
+ rc= memcached_set(memc, keys[x], key_length[x],
+ keys[x], key_length[x],
+ (time_t)50, (uint32_t)9);
+ assert(rc == MEMCACHED_SUCCESS);
+ }
+
+ rc= memcached_mget(memc, keys, key_length, 3);
+
+ results= memcached_result_create(memc, &results_obj);
+
+ results= memcached_fetch_result(memc, &results_obj, &rc);
+ assert(results);
+ assert(results->cas);
+ assert(rc == MEMCACHED_SUCCESS);
+ WATCHPOINT_ASSERT(memcached_result_cas(results));
+
+ assert(!memcmp(value, "we the people", strlen("we the people")));
+ assert(strlen("we the people") == value_length);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ memcached_result_free(&results_obj);
+
+ return 0;
+}
+
+uint8_t cas_test(memcached_st *memc)
+{
+ memcached_return rc;
+ char *key= "fun";
+ size_t key_length= strlen("fun");
+ char *value= "we the people";
+ size_t value_length= strlen("we the people");
+ memcached_result_st results_obj;
+ memcached_result_st *results;
+ unsigned int set= 1;
+
+ rc= memcached_flush(memc, 0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, &set);
+
+ rc= memcached_set(memc, key, strlen(key),
+ value, strlen(value),
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ rc= memcached_mget(memc, &key, &key_length, 1);
+
+ results= memcached_result_create(memc, &results_obj);
+
+ results= memcached_fetch_result(memc, &results_obj, &rc);
+ assert(results);
+ assert(rc == MEMCACHED_SUCCESS);
+ WATCHPOINT_ASSERT(memcached_result_cas(results));
+
+ assert(!memcmp(value, "we the people", strlen("we the people")));
+ assert(strlen("we the people") == value_length);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ memcached_result_free(&results_obj);
+
+ return 0;
+}
+
+uint8_t prepend_test(memcached_st *memc)
+{
+ memcached_return rc;
+ char *key= "fig";
+ char *value= "people";
+ size_t value_length;
+ uint32_t flags;
+
+ rc= memcached_flush(memc, 0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ rc= memcached_set(memc, key, strlen(key),
+ value, strlen(value),
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ rc= memcached_prepend(memc, key, strlen(key),
+ "the ", strlen("the "),
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ rc= memcached_prepend(memc, key, strlen(key),
+ "we ", strlen("we "),
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ value= memcached_get(memc, key, strlen(key),
+ &value_length, &flags, &rc);
+ assert(!memcmp(value, "we the people", strlen("we the people")));
+ assert(strlen("we the people") == value_length);
+ assert(rc == MEMCACHED_SUCCESS);
+ free(value);
+
+ return 0;
+}
+
+/*
+ Set the value, then quit to make sure it is flushed.
+ Come back in and test that add fails.
+*/