00001 #pragma once
00002
00003 #include <memory>
00004 #include <vector>
00005
00006 #include <fdr/error.h>
00007 #include <fdr/tasks/progress_reporter.h>
00008
00009 namespace FDR
00010 {
00011 class Canceller;
00012 class Session;
00013
00014 namespace Assertions
00015 {
00016 class Counterexample;
00017 class Progress;
00018
00022 class Assertion
00023 {
00024 public:
00025 virtual ~Assertion();
00026
00027 Assertion(const Assertion& assertion) = delete;
00028 Assertion& operator=(const Assertion& assertion) = delete;
00029
00043 void execute(Canceller* canceller);
00044
00053 const std::vector<std::shared_ptr<Counterexample>>& counterexamples() const;
00054
00058 bool passed() const;
00059
00064 std::shared_ptr<Progress> progress() const;
00065
00070 std::string to_string() const;
00071
00075 TaskId root_task_id() const;
00076
00077 protected:
00078 Assertion();
00079
00080 friend struct AssertionFactory;
00081 friend Session;
00082
00083 struct Data;
00084 std::shared_ptr<Data> data;
00085 };
00086
00087 }
00088 }