diff options
author | Damien Martin-Guillerez <dmarting@google.com> | 2015-03-24 09:05:08 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@google.com> | 2015-03-24 16:41:48 +0000 |
commit | adeef73a97cf191301a7b563883a075caed733b7 (patch) | |
tree | c06734cbffa4160b156779da7c87dbf5cc2b6f94 /examples/cpp | |
parent | 5247ff53465afc6ad9db889d1ec3f106ec09a3d6 (diff) |
Move all examples into Bazel workspace
Those examples will be used for Bazel integration tests and their
sources should be available directly to the Bazel workspace itself.
--
MOS_MIGRATED_REVID=89380736
Diffstat (limited to 'examples/cpp')
-rw-r--r-- | examples/cpp/BUILD | 25 | ||||
-rw-r--r-- | examples/cpp/README.md | 4 | ||||
-rw-r--r-- | examples/cpp/hello-fail.cc | 22 | ||||
-rw-r--r-- | examples/cpp/hello-lib.cc | 21 | ||||
-rw-r--r-- | examples/cpp/hello-lib.h | 23 | ||||
-rw-r--r-- | examples/cpp/hello-world.cc | 26 |
6 files changed, 121 insertions, 0 deletions
diff --git a/examples/cpp/BUILD b/examples/cpp/BUILD new file mode 100644 index 0000000000..195bbb3d25 --- /dev/null +++ b/examples/cpp/BUILD @@ -0,0 +1,25 @@ +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "hello-lib", + srcs = ["hello-lib.cc"], + hdrs = ["hello-lib.h"], +) + +cc_binary( + name = "hello-world", + srcs = ["hello-world.cc"], + deps = [":hello-lib"], +) + +cc_test( + name = "hello-success_test", + srcs = ["hello-world.cc"], + deps = [":hello-lib"], +) + +cc_test( + name = "hello-fail_test", + srcs = ["hello-fail.cc"], + deps = [":hello-lib"], +) diff --git a/examples/cpp/README.md b/examples/cpp/README.md new file mode 100644 index 0000000000..fba714321c --- /dev/null +++ b/examples/cpp/README.md @@ -0,0 +1,4 @@ +C++ Examples +============ + +These examples demonstrate building C++ binaries, libraries, and tests. diff --git a/examples/cpp/hello-fail.cc b/examples/cpp/hello-fail.cc new file mode 100644 index 0000000000..5b561cb0ce --- /dev/null +++ b/examples/cpp/hello-fail.cc @@ -0,0 +1,22 @@ +#include "examples/cpp/hello-lib.h" + +#include <string> + +using hello::HelloLib; +using std::string; + +/** + * This is a fake test that prints "Hello barf" and then exits with exit code 1. + * If run as a test (cc_test), the non-0 exit code indicates to Bazel that the + * "test" has failed. + */ +int main(int argc, char** argv) { + HelloLib lib; + string thing = "barf"; + if (argc > 1) { + thing = argv[1]; + } + + lib.greet(thing); + return 1; +} diff --git a/examples/cpp/hello-lib.cc b/examples/cpp/hello-lib.cc new file mode 100644 index 0000000000..8e40921cee --- /dev/null +++ b/examples/cpp/hello-lib.cc @@ -0,0 +1,21 @@ +#include "examples/cpp/hello-lib.h" + +#include <iostream> + +using std::cout; +using std::endl; +using std::string; + +namespace hello { + +HelloLib::HelloLib() : HelloLib("Hello") { +} + +HelloLib::HelloLib(const string& greeting) : greeting_(new string(greeting)) { +} + +void HelloLib::greet(const string& thing) { + cout << *greeting_ << " " << thing << endl; +} + +} // namespace hello diff --git a/examples/cpp/hello-lib.h b/examples/cpp/hello-lib.h new file mode 100644 index 0000000000..555d177936 --- /dev/null +++ b/examples/cpp/hello-lib.h @@ -0,0 +1,23 @@ +#ifndef EXAMPLES_CPP_HELLO_LIB_H_ +#define EXAMPLES_CPP_HELLO_LIB_H_ + +#include <string> +#include <memory> + +namespace hello { + +class HelloLib { + public: + HelloLib(); + + explicit HelloLib(const std::string &greeting); + + void greet(const std::string &thing); + + private: + std::unique_ptr<const std::string> greeting_; +}; + +} // namespace hello + +#endif // EXAMPLES_CPP_HELLO_LIB_H_ diff --git a/examples/cpp/hello-world.cc b/examples/cpp/hello-world.cc new file mode 100644 index 0000000000..be435c3256 --- /dev/null +++ b/examples/cpp/hello-world.cc @@ -0,0 +1,26 @@ +#include "examples/cpp/hello-lib.h" + +#include <string> + +using hello::HelloLib; +using std::string; + +/** + * This prints "Hello world". If it is run with arguments, it will use the first + * argument instead of "world". Build and run //examples/cpp:hello-world to see + * this program in action. + * + * This file does double-duty as a "test." It is a cc_binary, so it can also be + * compiled as a cc_test and Bazel will decide on whether it passed or failed + * based on exit code (which is always 0 here, so the test "passes"). See + * hello-fail.cc for an example of making a test fail. + */ +int main(int argc, char** argv) { + HelloLib lib("Hello"); + string thing = "world"; + if (argc > 1) { + thing = argv[1]; + } + lib.greet(thing); + return 0; +} |