| // Copyright 2020 Google LLC |
| // |
| // 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 |
| // |
| // https://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 "presence/presence_zone.h" |
| |
| #include "gmock/gmock.h" |
| #include "protobuf-matchers/protocol-buffer-matchers.h" |
| #include "gtest/gtest.h" |
| #include "presence/device_motion.h" |
| |
| namespace nearby { |
| namespace presence { |
| namespace { |
| |
| using DistanceBoundary = nearby::presence::PresenceZone::DistanceBoundary; |
| using RangeType = nearby::presence::PresenceZone::DistanceBoundary::RangeType; |
| using AngleOfArrivalBoundary = |
| nearby::presence::PresenceZone::AngleOfArrivalBoundary; |
| |
| static const float kDefaultDistanceMeters = 0; |
| static const float kTestMinDistanceMeters = 1; |
| static const float kTestMaxDistanceMeters = 2; |
| |
| static const float kDefaultDegrees = 0; |
| static const float kTestMinAngleDegrees = 10; |
| static const float kTestMaxAngleDegrees = 20; |
| |
| static const float kTestConfidence = 0.1; |
| |
| static const RangeType kDefaultRangeType = RangeType::kRangeUnknown; |
| static const RangeType kTestRangeType = RangeType::kFar; |
| |
| static const DistanceBoundary kDefaultDistanceBoundary; |
| static const DistanceBoundary kTestDistanceBoundary = { |
| kTestMinDistanceMeters, kTestMaxDistanceMeters, kTestRangeType}; |
| static const AngleOfArrivalBoundary kDefaultAngleBoundary; |
| static const AngleOfArrivalBoundary kTestAzimuthAngleBoundary = { |
| kTestMinAngleDegrees, kTestMaxAngleDegrees}; |
| static const AngleOfArrivalBoundary kTestElevationAngleBoundary = { |
| kTestMinAngleDegrees, kTestMaxAngleDegrees}; |
| static const DeviceMotion kTestDeviceMotion = { |
| DeviceMotion::MotionType::kPointAndHold, kTestConfidence}; |
| |
| TEST(DistanceBoundaryTest, DefaultConstructorWorks) { |
| DistanceBoundary boundary; |
| EXPECT_EQ(boundary.GetMinDistanceMeters(), kDefaultDistanceMeters); |
| EXPECT_EQ(boundary.GetMaxDistanceMeters(), kDefaultDistanceMeters); |
| EXPECT_EQ(boundary.GetRangeType(), kDefaultRangeType); |
| } |
| |
| TEST(DistanceBoundaryTest, DefaultEquals) { |
| DistanceBoundary boundary1; |
| DistanceBoundary boundary2; |
| EXPECT_EQ(boundary1, boundary2); |
| } |
| |
| TEST(DistanceBoundaryTest, PartiallyInitializationWorks) { |
| DistanceBoundary boundary1 = {kTestMinDistanceMeters, kTestMaxDistanceMeters}; |
| DistanceBoundary boundary2 = {kTestMinDistanceMeters}; |
| EXPECT_EQ(boundary1.GetMinDistanceMeters(), kTestMinDistanceMeters); |
| EXPECT_EQ(boundary1.GetMaxDistanceMeters(), kTestMaxDistanceMeters); |
| EXPECT_EQ(boundary1.GetRangeType(), kDefaultRangeType); |
| EXPECT_EQ(boundary2.GetMinDistanceMeters(), kTestMinDistanceMeters); |
| EXPECT_EQ(boundary2.GetMaxDistanceMeters(), kDefaultDistanceMeters); |
| EXPECT_EQ(boundary2.GetRangeType(), kDefaultRangeType); |
| } |
| |
| TEST(DistanceBoundaryTest, ExplicitInitEquals) { |
| DistanceBoundary boundary1 = {kTestMinDistanceMeters, kTestMaxDistanceMeters, |
| kTestRangeType}; |
| DistanceBoundary boundary2 = {kTestMinDistanceMeters, kTestMaxDistanceMeters, |
| kTestRangeType}; |
| EXPECT_EQ(boundary1.GetMinDistanceMeters(), kTestMinDistanceMeters); |
| EXPECT_EQ(boundary1.GetMaxDistanceMeters(), kTestMaxDistanceMeters); |
| EXPECT_EQ(boundary1.GetRangeType(), kTestRangeType); |
| EXPECT_EQ(boundary1, boundary2); |
| } |
| |
| TEST(DistanceBoundaryTest, ExplicitInitNotEquals) { |
| DistanceBoundary boundary1 = {kTestMinDistanceMeters, kTestMaxDistanceMeters, |
| kTestRangeType}; |
| DistanceBoundary boundary2 = {kTestMinDistanceMeters + 0.1f, |
| kTestMaxDistanceMeters, kTestRangeType}; |
| EXPECT_NE(boundary1, boundary2); |
| } |
| |
| TEST(DistanceBoundaryTest, CopyInitEquals) { |
| DistanceBoundary boundary1 = {kTestMinDistanceMeters, kTestMaxDistanceMeters, |
| kTestRangeType}; |
| DistanceBoundary boundary2 = {boundary1}; |
| EXPECT_EQ(boundary1, boundary2); |
| } |
| |
| TEST(AngleOfArrivalBoundaryTest, DefaultConstructorWorks) { |
| AngleOfArrivalBoundary aoa_boundary; |
| EXPECT_EQ(aoa_boundary.GetMinAngleDegrees(), kDefaultDegrees); |
| EXPECT_EQ(aoa_boundary.GetMaxAngleDegrees(), kDefaultDegrees); |
| } |
| |
| TEST(AngleOfArrivalBoundaryTest, DefaultEquals) { |
| AngleOfArrivalBoundary aoa_boundary1; |
| AngleOfArrivalBoundary aoa_boundary2; |
| EXPECT_EQ(aoa_boundary1, aoa_boundary2); |
| } |
| |
| TEST(AngleOfArrivalBoundaryTest, PartiallyInitializationWorks) { |
| AngleOfArrivalBoundary aoa_boundary = {kTestMinAngleDegrees}; |
| EXPECT_EQ(aoa_boundary.GetMinAngleDegrees(), kTestMinAngleDegrees); |
| EXPECT_EQ(aoa_boundary.GetMaxAngleDegrees(), kDefaultDegrees); |
| } |
| |
| TEST(AngleOfArrivalBoundaryTest, ExplicitInitEquals) { |
| AngleOfArrivalBoundary aoa_boundary1 = {kTestMinAngleDegrees, |
| kTestMaxAngleDegrees}; |
| AngleOfArrivalBoundary aoa_boundary2 = {kTestMinAngleDegrees, |
| kTestMaxAngleDegrees}; |
| EXPECT_EQ(aoa_boundary1.GetMinAngleDegrees(), kTestMinAngleDegrees); |
| EXPECT_EQ(aoa_boundary1.GetMaxAngleDegrees(), kTestMaxAngleDegrees); |
| EXPECT_EQ(aoa_boundary1, aoa_boundary2); |
| } |
| |
| TEST(AngleOfArrivalBoundaryTest, ExplicitInitNotEquals) { |
| AngleOfArrivalBoundary aoa_boundary1 = {kTestMinAngleDegrees, |
| kTestMaxAngleDegrees}; |
| AngleOfArrivalBoundary aoa_boundary2 = {kTestMinAngleDegrees, |
| kTestMaxAngleDegrees + 0.1f}; |
| EXPECT_NE(aoa_boundary1, aoa_boundary2); |
| } |
| |
| TEST(AngleOfArrivalBoundaryTest, CopyInitEquals) { |
| AngleOfArrivalBoundary aoa_boundary1 = {kTestMinAngleDegrees, |
| kTestMaxAngleDegrees}; |
| AngleOfArrivalBoundary aoa_boundary2 = {aoa_boundary1}; |
| EXPECT_EQ(aoa_boundary1, aoa_boundary2); |
| } |
| |
| TEST(PresenceZoneTest, DefaultConstructorWorks) { |
| PresenceZone zone; |
| EXPECT_EQ(zone.GetDistanceBoundary(), kDefaultDistanceBoundary); |
| EXPECT_EQ(zone.GetAzimuthAngleBoundary(), kDefaultAngleBoundary); |
| EXPECT_EQ(zone.GetElevationAngleBoundary(), kDefaultAngleBoundary); |
| EXPECT_EQ(zone.GetLocalDeviceMotions().capacity(), 0); |
| } |
| |
| TEST(PresenceZoneTest, DefaultEquals) { |
| PresenceZone zone1; |
| PresenceZone zone2; |
| EXPECT_EQ(zone1, zone2); |
| } |
| |
| TEST(PresenceZoneTest, PartiallyInitializationWorks) { |
| PresenceZone zone1 = {kTestDistanceBoundary, kTestAzimuthAngleBoundary, |
| kTestElevationAngleBoundary}; |
| PresenceZone zone2 = {kTestDistanceBoundary, kTestAzimuthAngleBoundary}; |
| PresenceZone zone3 = {kTestDistanceBoundary}; |
| EXPECT_EQ(zone1.GetDistanceBoundary(), kTestDistanceBoundary); |
| EXPECT_EQ(zone1.GetAzimuthAngleBoundary(), kTestAzimuthAngleBoundary); |
| EXPECT_EQ(zone1.GetElevationAngleBoundary(), kTestElevationAngleBoundary); |
| EXPECT_EQ(zone1.GetLocalDeviceMotions().capacity(), 0); |
| EXPECT_EQ(zone2.GetDistanceBoundary(), kTestDistanceBoundary); |
| EXPECT_EQ(zone2.GetAzimuthAngleBoundary(), kTestAzimuthAngleBoundary); |
| EXPECT_EQ(zone2.GetElevationAngleBoundary(), kDefaultAngleBoundary); |
| EXPECT_EQ(zone2.GetLocalDeviceMotions().capacity(), 0); |
| EXPECT_EQ(zone3.GetDistanceBoundary(), kTestDistanceBoundary); |
| EXPECT_EQ(zone3.GetAzimuthAngleBoundary(), kDefaultAngleBoundary); |
| EXPECT_EQ(zone3.GetElevationAngleBoundary(), kDefaultAngleBoundary); |
| EXPECT_EQ(zone3.GetLocalDeviceMotions().capacity(), 0); |
| } |
| |
| TEST(PresenceZoneTest, ExplicitInitEquals) { |
| PresenceZone zone1 = {kTestDistanceBoundary, |
| kTestAzimuthAngleBoundary, |
| kTestElevationAngleBoundary, |
| {kTestDeviceMotion}}; |
| PresenceZone zone2 = {kTestDistanceBoundary, |
| kTestAzimuthAngleBoundary, |
| kTestElevationAngleBoundary, |
| {kTestDeviceMotion}}; |
| EXPECT_EQ(zone1.GetDistanceBoundary(), kTestDistanceBoundary); |
| EXPECT_EQ(zone1.GetAzimuthAngleBoundary(), kTestAzimuthAngleBoundary); |
| EXPECT_EQ(zone1.GetElevationAngleBoundary(), kTestElevationAngleBoundary); |
| EXPECT_EQ(zone1.GetLocalDeviceMotions().size(), 1); |
| EXPECT_EQ(zone1.GetLocalDeviceMotions()[0], kTestDeviceMotion); |
| EXPECT_EQ(zone1, zone2); |
| } |
| |
| TEST(PresenceZoneTest, ExplicitInitNotEquals) { |
| PresenceZone zone1 = {kTestDistanceBoundary, |
| kTestAzimuthAngleBoundary, |
| kTestElevationAngleBoundary, |
| {kTestDeviceMotion}}; |
| PresenceZone zone2 = {kTestDistanceBoundary, |
| kTestAzimuthAngleBoundary, |
| kTestElevationAngleBoundary, |
| {}}; |
| EXPECT_NE(zone1, zone2); |
| } |
| |
| TEST(PresenceZoneTest, CopyInitEquals) { |
| PresenceZone zone1 = {kTestDistanceBoundary, |
| kTestAzimuthAngleBoundary, |
| kTestElevationAngleBoundary, |
| {kTestDeviceMotion}}; |
| PresenceZone zone2 = {zone1}; |
| EXPECT_EQ(zone1, zone2); |
| } |
| |
| } // namespace |
| } // namespace presence |
| } // namespace nearby |