| /* |
| * Copyright 2015 Facebook, Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| #include "Koan.h" |
| #include <folly/futures/Future.h> |
| |
| using folly::Future; |
| using folly::makeFuture; |
| |
| #if 0 // compilation cursor |
| |
| TEST(Values, canonicalForm) { |
| // The canonical way to make a Future from an immediate value is with the |
| // Future constructor. |
| Future<int> answer(__); |
| EXPECT_EQ(42, answer.get()); |
| } |
| |
| TEST(Values, typeDeduction) { |
| // If you use makeFuture, the compiler will deduce the type. |
| auto answer = makeFuture(__); |
| EXPECT_EQ(42, answer.get()); |
| } |
| |
| TEST(Values, exceptionNeedsType) { |
| // To create a Future holding an exception, you must |
| // use makeFuture with the type |
| std::runtime_error err("Don't Panic"); |
| auto question = __(err); |
| // not |
| //auto question = makeFuture(err); |
| EXPECT_THROW(question.get(), std::runtime_error); |
| } |
| |
| TEST(Values, typeConversion) { |
| // Sometimes it's cleaner to give the type and let the compiler do implicit |
| // type conversion |
| __ answer(42); |
| // not |
| //auto answer = makeFuture((double)42); |
| EXPECT_EQ(__, answer.get()); |
| } |
| |
| using folly::Try; |
| |
| TEST(Values, tryInside) { |
| // Futures hold either a Value or Exception. This is accomplished under the |
| // covers with Try |
| Try<int> t = makeFuture(42).__(); |
| EXPECT_TRUE(t.hasValue()); |
| EXPECT_EQ(42, t.value()); |
| |
| t = Future<int>(std::runtime_error("Don't Panic")).__(); |
| EXPECT_TRUE(t.hasException()); |
| EXPECT_THROW(t.value(), std::runtime_error); |
| } |
| |
| #endif |