summaryrefslogtreecommitdiff
path: root/src/examples/futuretest/futuretest.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/examples/futuretest/futuretest.c')
-rw-r--r--src/examples/futuretest/futuretest.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/examples/futuretest/futuretest.c b/src/examples/futuretest/futuretest.c
new file mode 100644
index 0000000..e426733
--- /dev/null
+++ b/src/examples/futuretest/futuretest.c
@@ -0,0 +1,89 @@
+/*
+ * libmowgli: A collection of useful routines for programming.
+ * futuretest: Combustable lemons
+ *
+ * Copyright (c) 2012 Patrick McFarland <pmcfarland@adterrasperaspera.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <string.h>
+
+#include <mowgli.h>
+
+int main(int argc, char *argv[]) {
+ char *text = "hello world";
+
+ printf("create future: ");
+ mowgli_future_t *future = mowgli_future_create();
+ if(future != NULL)
+ printf("correctly created future\n");
+ else
+ printf("error: abandon all hope\n");
+
+ printf("get state manually of waiting future: ");
+ if(mowgli_future_state(future) == MOWGLI_FUTURE_STATE_WAITING)
+ printf("correctly waiting\n");
+ else
+ printf("error: %i\n", mowgli_future_state(future));
+
+ printf("finish future: ");
+ if(mowgli_future_finish(future, text) == MOWGLI_FUTURE_STATE_FINISHED)
+ printf("correctly finished\n");
+ else
+ printf("error: %i\n", mowgli_future_state(future));
+
+ printf("get result of finished future: ");
+ if(mowgli_future_result(future) == text)
+ printf("correct: %s\n", text);
+ else
+ printf("error: %s\n", (char *)mowgli_future_result(future));
+
+ printf("get state of finished future: ");
+ if(mowgli_future_state(future) == MOWGLI_FUTURE_STATE_FINISHED)
+ printf("correctly finished\n");
+ else
+ printf("error: %i\n", mowgli_future_state(future));
+
+ printf("reinit then cancel: ");
+ if(mowgli_future_init(future) == 0) {
+ if(mowgli_future_cancel(future) == MOWGLI_FUTURE_STATE_CANCELED)
+ printf("correctly canceled\n");
+ else
+ printf("error: failed to cancel: %i\n", mowgli_future_state(future));
+
+ printf("try to finish on canceled future: ");
+ if(mowgli_future_finish(future, text) == MOWGLI_FUTURE_STATE_CANCELED)
+ printf("correctly caught cancel\n");
+ else
+ printf("error: failed to cancel: %s\n", text);
+ } else {
+ printf("error: failed to reinit\n");
+ }
+
+ printf("reinit then finish twice: ");
+ if(mowgli_future_init(future) == 0) {
+ mowgli_future_finish(future, text);
+
+ if(mowgli_future_finish(future, text) == MOWGLI_FUTURE_STATE_CONSISTENCY_FAILURE)
+ printf("correctly raised consistency failure\n");
+ else
+ printf("error: finished twice: %s\n", text);
+ } else {
+ printf("error: failed to reinit\n");
+ }
+}