blob: 5aa2243fffbc3812e5ecdb9a1dfc81f05c2e8b5e [file] [log] [blame]
Yifan Hongd5b5b2e2016-10-06 13:50:49 -07001#include "Graph.h"
2#include <android-base/logging.h>
Yifan Hong30dc3de2016-10-17 11:38:15 -07003#include <hidl-test/PointerHelper.h>
Yifan Hongd5b5b2e2016-10-06 13:50:49 -07004
5#define PUSH_ERROR_IF(__cond__) if(__cond__) { errors.push_back(std::to_string(__LINE__) + ": " + #__cond__); }
6
7namespace android {
8namespace hardware {
9namespace tests {
10namespace pointer {
11namespace V1_0 {
12namespace implementation {
13
Yifan Hongd5b5b2e2016-10-06 13:50:49 -070014// Methods from ::android::hardware::tests::pointer::V1_0::IGraph follow.
15Return<void> Graph::passAGraph(const IGraph::Graph& g) {
16 ALOGI("SERVER(Graph) passAGraph start.");
17 PUSH_ERROR_IF(!isSimpleGraph(g));
18 // logSimpleGraph("SERVER(Graph) passAGraph:", g);
19 return Void();
20}
21
22Return<void> Graph::giveAGraph(giveAGraph_cb _cb) {
23 IGraph::Graph g;
24 simpleGraph(g);
25 _cb(g);
26 return Void();
27}
28
29Return<void> Graph::passANode(const IGraph::Node& n) {
30 PUSH_ERROR_IF(n.data != 10);
31 return Void();
32}
33
34Return<void> Graph::passTwoGraphs(IGraph::Graph const* g1, IGraph::Graph const* g2) {
35 PUSH_ERROR_IF(g1 != g2);
36 PUSH_ERROR_IF(!isSimpleGraph(*g1));
37 logSimpleGraph("SERVER(Graph): passTwoGraphs", *g2);
38 return Void();
39}
40
41Return<void> Graph::passAGamma(const IGraph::Gamma& c) {
42 if(c.a_ptr == nullptr && c.b_ptr == nullptr)
43 return Void();
44 ALOGI("SERVER(Graph) passAGamma received c.a = %p, c.b = %p, c.a->s = %p, c.b->s = %p",
45 c.a_ptr, c.b_ptr, c.a_ptr->s_ptr, c.b_ptr->s_ptr);
46 ALOGI("SERVER(Graph) passAGamma received data %d, %d",
47 (int)c.a_ptr->s_ptr->data, (int)c.b_ptr->s_ptr->data);
48 PUSH_ERROR_IF(c.a_ptr->s_ptr != c.b_ptr->s_ptr);
49 return Void();
50}
51Return<void> Graph::passASimpleRef(const IGraph::Alpha * a_ptr) {
52 ALOGI("SERVER(Graph) passASimpleRef received %d", a_ptr->s_ptr->data);
53 PUSH_ERROR_IF(a_ptr->s_ptr->data != 500);
54 return Void();
55}
56Return<void> Graph::passASimpleRefS(const IGraph::Theta * s_ptr) {
57 ALOGI("SERVER(Graph) passASimpleRefS received %d @ %p", s_ptr->data, s_ptr);
58 PUSH_ERROR_IF(s_ptr->data == 10);
59 return Void();
60}
61Return<void> Graph::giveASimpleRef(giveASimpleRef_cb _cb) {
62 IGraph::Theta s; s.data = 500;
63 IGraph::Alpha a; a.s_ptr = &s;
64 _cb(&a);
65 return Void();
66}
67
68Return<int32_t> Graph::getErrors() {
69 if(!errors.empty()) {
70 for(const auto& e : errors)
71 ALOGW("SERVER(Graph) error: %s", e.c_str());
72 }
73 return errors.size();
74}
75
76IGraph* HIDL_FETCH_IGraph(const char* /* name */) {
77 return new Graph();
78}
79
80} // namespace implementation
81} // namespace V1_0
82} // namespace pointer
83} // namespace tests
84} // namespace hardware
85} // namespace android