Coverage Report

Created: 2026-10-28 06:39

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/geometry_fuzzer.cc
Line
Count
Source
1
// Copyright 2026 Google LLC
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//      http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#include <fuzzer/FuzzedDataProvider.h>
16
#include <Eigen/Core>
17
#include <Eigen/Geometry>
18
19
namespace {
20
21
template <typename Scalar>
22
994
void fuzzGeometry(FuzzedDataProvider* stream) {
23
994
  typedef Eigen::Matrix<Scalar, 3, 1> Vector3;
24
994
  typedef Eigen::Quaternion<Scalar> Quaternion;
25
994
  typedef Eigen::AngleAxis<Scalar> AngleAxis;
26
994
  typedef Eigen::Rotation2D<Scalar> Rotation2D;
27
994
  typedef Eigen::Transform<Scalar, 3, Eigen::Affine> Transform3;
28
29
994
  Vector3 v1(stream->ConsumeFloatingPoint<Scalar>(),
30
994
             stream->ConsumeFloatingPoint<Scalar>(),
31
994
             stream->ConsumeFloatingPoint<Scalar>());
32
994
  Vector3 v2(stream->ConsumeFloatingPoint<Scalar>(),
33
994
             stream->ConsumeFloatingPoint<Scalar>(),
34
994
             stream->ConsumeFloatingPoint<Scalar>());
35
36
  // Quaternions
37
994
  Quaternion q1(stream->ConsumeFloatingPoint<Scalar>(),
38
994
                stream->ConsumeFloatingPoint<Scalar>(),
39
994
                stream->ConsumeFloatingPoint<Scalar>(),
40
994
                stream->ConsumeFloatingPoint<Scalar>());
41
994
  q1.normalize();
42
994
  Quaternion q2(stream->ConsumeFloatingPoint<Scalar>(),
43
994
                stream->ConsumeFloatingPoint<Scalar>(),
44
994
                stream->ConsumeFloatingPoint<Scalar>(),
45
994
                stream->ConsumeFloatingPoint<Scalar>());
46
994
  q2.normalize();
47
48
994
  (void)q1.slerp(stream->ConsumeFloatingPoint<Scalar>(), q2);
49
994
  (void)q1.inverse();
50
994
  (void)q1.conjugate();
51
994
  (void)(q1 * q2);
52
994
  (void)(q1 * v1);
53
54
  // AngleAxis
55
994
  AngleAxis aa1(stream->ConsumeFloatingPoint<Scalar>(), v1.normalized());
56
994
  (void)aa1.toRotationMatrix();
57
994
  (void)Quaternion(aa1);
58
59
  // Transform
60
994
  Transform3 t1 = Transform3::Identity();
61
994
  t1.translate(v1);
62
994
  t1.rotate(q1);
63
994
  t1.scale(stream->ConsumeFloatingPoint<Scalar>());
64
  
65
994
  (void)(t1 * v2);
66
994
  (void)t1.inverse();
67
68
  // Hyperplane
69
994
  Eigen::Hyperplane<Scalar, 3> hp(v1.normalized(), stream->ConsumeFloatingPoint<Scalar>());
70
994
  (void)hp.absDistance(v2);
71
994
  (void)hp.projection(v2);
72
73
  // ParametrizedLine
74
994
  Eigen::ParametrizedLine<Scalar, 3> line(v1, v2.normalized());
75
994
  (void)line.distance(v2);
76
994
  (void)line.projection(v2);
77
994
}
geometry_fuzzer.cc:void (anonymous namespace)::fuzzGeometry<float>(FuzzedDataProvider*)
Line
Count
Source
22
514
void fuzzGeometry(FuzzedDataProvider* stream) {
23
514
  typedef Eigen::Matrix<Scalar, 3, 1> Vector3;
24
514
  typedef Eigen::Quaternion<Scalar> Quaternion;
25
514
  typedef Eigen::AngleAxis<Scalar> AngleAxis;
26
514
  typedef Eigen::Rotation2D<Scalar> Rotation2D;
27
514
  typedef Eigen::Transform<Scalar, 3, Eigen::Affine> Transform3;
28
29
514
  Vector3 v1(stream->ConsumeFloatingPoint<Scalar>(),
30
514
             stream->ConsumeFloatingPoint<Scalar>(),
31
514
             stream->ConsumeFloatingPoint<Scalar>());
32
514
  Vector3 v2(stream->ConsumeFloatingPoint<Scalar>(),
33
514
             stream->ConsumeFloatingPoint<Scalar>(),
34
514
             stream->ConsumeFloatingPoint<Scalar>());
35
36
  // Quaternions
37
514
  Quaternion q1(stream->ConsumeFloatingPoint<Scalar>(),
38
514
                stream->ConsumeFloatingPoint<Scalar>(),
39
514
                stream->ConsumeFloatingPoint<Scalar>(),
40
514
                stream->ConsumeFloatingPoint<Scalar>());
41
514
  q1.normalize();
42
514
  Quaternion q2(stream->ConsumeFloatingPoint<Scalar>(),
43
514
                stream->ConsumeFloatingPoint<Scalar>(),
44
514
                stream->ConsumeFloatingPoint<Scalar>(),
45
514
                stream->ConsumeFloatingPoint<Scalar>());
46
514
  q2.normalize();
47
48
514
  (void)q1.slerp(stream->ConsumeFloatingPoint<Scalar>(), q2);
49
514
  (void)q1.inverse();
50
514
  (void)q1.conjugate();
51
514
  (void)(q1 * q2);
52
514
  (void)(q1 * v1);
53
54
  // AngleAxis
55
514
  AngleAxis aa1(stream->ConsumeFloatingPoint<Scalar>(), v1.normalized());
56
514
  (void)aa1.toRotationMatrix();
57
514
  (void)Quaternion(aa1);
58
59
  // Transform
60
514
  Transform3 t1 = Transform3::Identity();
61
514
  t1.translate(v1);
62
514
  t1.rotate(q1);
63
514
  t1.scale(stream->ConsumeFloatingPoint<Scalar>());
64
  
65
514
  (void)(t1 * v2);
66
514
  (void)t1.inverse();
67
68
  // Hyperplane
69
514
  Eigen::Hyperplane<Scalar, 3> hp(v1.normalized(), stream->ConsumeFloatingPoint<Scalar>());
70
514
  (void)hp.absDistance(v2);
71
514
  (void)hp.projection(v2);
72
73
  // ParametrizedLine
74
514
  Eigen::ParametrizedLine<Scalar, 3> line(v1, v2.normalized());
75
514
  (void)line.distance(v2);
76
514
  (void)line.projection(v2);
77
514
}
geometry_fuzzer.cc:void (anonymous namespace)::fuzzGeometry<double>(FuzzedDataProvider*)
Line
Count
Source
22
480
void fuzzGeometry(FuzzedDataProvider* stream) {
23
480
  typedef Eigen::Matrix<Scalar, 3, 1> Vector3;
24
480
  typedef Eigen::Quaternion<Scalar> Quaternion;
25
480
  typedef Eigen::AngleAxis<Scalar> AngleAxis;
26
480
  typedef Eigen::Rotation2D<Scalar> Rotation2D;
27
480
  typedef Eigen::Transform<Scalar, 3, Eigen::Affine> Transform3;
28
29
480
  Vector3 v1(stream->ConsumeFloatingPoint<Scalar>(),
30
480
             stream->ConsumeFloatingPoint<Scalar>(),
31
480
             stream->ConsumeFloatingPoint<Scalar>());
32
480
  Vector3 v2(stream->ConsumeFloatingPoint<Scalar>(),
33
480
             stream->ConsumeFloatingPoint<Scalar>(),
34
480
             stream->ConsumeFloatingPoint<Scalar>());
35
36
  // Quaternions
37
480
  Quaternion q1(stream->ConsumeFloatingPoint<Scalar>(),
38
480
                stream->ConsumeFloatingPoint<Scalar>(),
39
480
                stream->ConsumeFloatingPoint<Scalar>(),
40
480
                stream->ConsumeFloatingPoint<Scalar>());
41
480
  q1.normalize();
42
480
  Quaternion q2(stream->ConsumeFloatingPoint<Scalar>(),
43
480
                stream->ConsumeFloatingPoint<Scalar>(),
44
480
                stream->ConsumeFloatingPoint<Scalar>(),
45
480
                stream->ConsumeFloatingPoint<Scalar>());
46
480
  q2.normalize();
47
48
480
  (void)q1.slerp(stream->ConsumeFloatingPoint<Scalar>(), q2);
49
480
  (void)q1.inverse();
50
480
  (void)q1.conjugate();
51
480
  (void)(q1 * q2);
52
480
  (void)(q1 * v1);
53
54
  // AngleAxis
55
480
  AngleAxis aa1(stream->ConsumeFloatingPoint<Scalar>(), v1.normalized());
56
480
  (void)aa1.toRotationMatrix();
57
480
  (void)Quaternion(aa1);
58
59
  // Transform
60
480
  Transform3 t1 = Transform3::Identity();
61
480
  t1.translate(v1);
62
480
  t1.rotate(q1);
63
480
  t1.scale(stream->ConsumeFloatingPoint<Scalar>());
64
  
65
480
  (void)(t1 * v2);
66
480
  (void)t1.inverse();
67
68
  // Hyperplane
69
480
  Eigen::Hyperplane<Scalar, 3> hp(v1.normalized(), stream->ConsumeFloatingPoint<Scalar>());
70
480
  (void)hp.absDistance(v2);
71
480
  (void)hp.projection(v2);
72
73
  // ParametrizedLine
74
480
  Eigen::ParametrizedLine<Scalar, 3> line(v1, v2.normalized());
75
480
  (void)line.distance(v2);
76
480
  (void)line.projection(v2);
77
480
}
78
79
} // namespace
80
81
994
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
82
994
  FuzzedDataProvider stream(data, size);
83
84
994
  uint8_t type = stream.ConsumeIntegral<uint8_t>();
85
994
  if (type % 2 == 0) {
86
514
    fuzzGeometry<float>(&stream);
87
514
  } else {
88
480
    fuzzGeometry<double>(&stream);
89
480
  }
90
91
994
  return 0;
92
994
}