/src/basicstuff_fuzzer.cc
Line | Count | Source |
1 | | // Copyright 2020 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 | | |
17 | | #include "Eigen/Core" |
18 | | |
19 | | namespace { |
20 | | |
21 | | static constexpr Eigen::Index kEigenTestMaxSize = 64; |
22 | | static constexpr Eigen::Index kEigenIndexOne = static_cast<Eigen::Index>(1); |
23 | | |
24 | | template <typename T> |
25 | 644k | T ConsumeValue(FuzzedDataProvider* stream) { |
26 | 644k | return stream->ConsumeIntegral<T>(); |
27 | 644k | } |
28 | | |
29 | | template <> |
30 | 863k | float ConsumeValue(FuzzedDataProvider* stream) { |
31 | 863k | return stream->ConsumeFloatingPoint<float>(); |
32 | 863k | } |
33 | | |
34 | | template <> |
35 | 727k | double ConsumeValue(FuzzedDataProvider* stream) { |
36 | 727k | return stream->ConsumeFloatingPoint<double>(); |
37 | 727k | } |
38 | | |
39 | | template <> |
40 | 1.07M | long double ConsumeValue(FuzzedDataProvider* stream) { |
41 | 1.07M | return stream->ConsumeFloatingPoint<long double>(); |
42 | 1.07M | } |
43 | | |
44 | | template <> |
45 | 660k | std::complex<float> ConsumeValue(FuzzedDataProvider* stream) { |
46 | 660k | return std::complex<float>(stream->ConsumeFloatingPoint<float>(), |
47 | 660k | stream->ConsumeFloatingPoint<float>()); |
48 | 660k | } |
49 | | |
50 | | template <> |
51 | 926k | std::complex<double> ConsumeValue(FuzzedDataProvider* stream) { |
52 | 926k | return std::complex<float>(stream->ConsumeFloatingPoint<double>(), |
53 | 926k | stream->ConsumeFloatingPoint<double>()); |
54 | 926k | } |
55 | | |
56 | | template <typename MatrixType> |
57 | | MatrixType GenerateTestMatrix(size_t rows, size_t cols, |
58 | 30.2k | FuzzedDataProvider* stream) { |
59 | 30.2k | std::vector<typename MatrixType::value_type> test_data(rows * cols); |
60 | 4.88M | for (auto& value : test_data) { |
61 | 4.88M | value = ConsumeValue<typename MatrixType::value_type>(stream); |
62 | 4.88M | } |
63 | 30.2k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); |
64 | 30.2k | return MatrixType(mapped_map); |
65 | 30.2k | } basicstuff_fuzzer.cc:Eigen::Matrix<std::__1::complex<float>, -1, -1, 0, -1, -1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<std::__1::complex<float>, -1, -1, 0, -1, -1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 4.53k | FuzzedDataProvider* stream) { | 59 | 4.53k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 651k | for (auto& value : test_data) { | 61 | 651k | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 651k | } | 63 | 4.53k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 4.53k | return MatrixType(mapped_map); | 65 | 4.53k | } |
basicstuff_fuzzer.cc:Eigen::Matrix<std::__1::complex<float>, -1, 1, 0, -1, 1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<std::__1::complex<float>, -1, 1, 0, -1, 1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 1.51k | FuzzedDataProvider* stream) { | 59 | 1.51k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 7.14k | for (auto& value : test_data) { | 61 | 7.14k | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 7.14k | } | 63 | 1.51k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 1.51k | return MatrixType(mapped_map); | 65 | 1.51k | } |
basicstuff_fuzzer.cc:Eigen::Matrix<int, -1, -1, 0, -1, -1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 4.53k | FuzzedDataProvider* stream) { | 59 | 4.53k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 636k | for (auto& value : test_data) { | 61 | 636k | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 636k | } | 63 | 4.53k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 4.53k | return MatrixType(mapped_map); | 65 | 4.53k | } |
basicstuff_fuzzer.cc:Eigen::Matrix<int, -1, 1, 0, -1, 1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<int, -1, 1, 0, -1, 1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 1.51k | FuzzedDataProvider* stream) { | 59 | 1.51k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 7.24k | for (auto& value : test_data) { | 61 | 7.24k | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 7.24k | } | 63 | 1.51k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 1.51k | return MatrixType(mapped_map); | 65 | 1.51k | } |
basicstuff_fuzzer.cc:Eigen::Matrix<std::__1::complex<double>, -1, -1, 0, -1, -1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<std::__1::complex<double>, -1, -1, 0, -1, -1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 4.53k | FuzzedDataProvider* stream) { | 59 | 4.53k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 916k | for (auto& value : test_data) { | 61 | 916k | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 916k | } | 63 | 4.53k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 4.53k | return MatrixType(mapped_map); | 65 | 4.53k | } |
basicstuff_fuzzer.cc:Eigen::Matrix<std::__1::complex<double>, -1, 1, 0, -1, 1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<std::__1::complex<double>, -1, 1, 0, -1, 1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 1.51k | FuzzedDataProvider* stream) { | 59 | 1.51k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 8.89k | for (auto& value : test_data) { | 61 | 8.89k | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 8.89k | } | 63 | 1.51k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 1.51k | return MatrixType(mapped_map); | 65 | 1.51k | } |
basicstuff_fuzzer.cc:Eigen::Matrix<long double, -1, -1, 0, -1, -1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<long double, -1, -1, 0, -1, -1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 4.53k | FuzzedDataProvider* stream) { | 59 | 4.53k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 1.05M | for (auto& value : test_data) { | 61 | 1.05M | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 1.05M | } | 63 | 4.53k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 4.53k | return MatrixType(mapped_map); | 65 | 4.53k | } |
basicstuff_fuzzer.cc:Eigen::Matrix<long double, -1, 1, 0, -1, 1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<long double, -1, 1, 0, -1, 1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 1.51k | FuzzedDataProvider* stream) { | 59 | 1.51k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 10.5k | for (auto& value : test_data) { | 61 | 10.5k | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 10.5k | } | 63 | 1.51k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 1.51k | return MatrixType(mapped_map); | 65 | 1.51k | } |
basicstuff_fuzzer.cc:Eigen::Matrix<float, -1, -1, 0, -1, -1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<float, -1, -1, 0, -1, -1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 3.02k | FuzzedDataProvider* stream) { | 59 | 3.02k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 863k | for (auto& value : test_data) { | 61 | 863k | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 863k | } | 63 | 3.02k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 3.02k | return MatrixType(mapped_map); | 65 | 3.02k | } |
basicstuff_fuzzer.cc:Eigen::Matrix<double, -1, -1, 0, -1, -1> (anonymous namespace)::GenerateTestMatrix<Eigen::Matrix<double, -1, -1, 0, -1, -1> >(unsigned long, unsigned long, FuzzedDataProvider*) Line | Count | Source | 58 | 3.02k | FuzzedDataProvider* stream) { | 59 | 3.02k | std::vector<typename MatrixType::value_type> test_data(rows * cols); | 60 | 727k | for (auto& value : test_data) { | 61 | 727k | value = ConsumeValue<typename MatrixType::value_type>(stream); | 62 | 727k | } | 63 | 3.02k | Eigen::Map<MatrixType> mapped_map(test_data.data(), rows, cols); | 64 | 3.02k | return MatrixType(mapped_map); | 65 | 3.02k | } |
|
66 | | |
67 | | template <typename MatrixType> |
68 | 6.04k | void basicStuff(const MatrixType& m, FuzzedDataProvider* stream) { |
69 | 6.04k | typedef typename MatrixType::Scalar Scalar; |
70 | 6.04k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> VectorType; |
71 | 6.04k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, |
72 | 6.04k | MatrixType::RowsAtCompileTime> |
73 | 6.04k | SquareMatrixType; |
74 | | |
75 | 6.04k | Eigen::Index rows = m.rows(); |
76 | 6.04k | Eigen::Index cols = m.cols(); |
77 | | |
78 | 6.04k | MatrixType m1 = GenerateTestMatrix<MatrixType>(rows, cols, stream), |
79 | 6.04k | m2 = GenerateTestMatrix<MatrixType>(rows, cols, stream), |
80 | 6.04k | m3(rows, cols), mzero = MatrixType::Zero(rows, cols), |
81 | 6.04k | square = GenerateTestMatrix< |
82 | 6.04k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, |
83 | 6.04k | MatrixType::RowsAtCompileTime>>(rows, rows, |
84 | 6.04k | stream); |
85 | 6.04k | VectorType v1 = GenerateTestMatrix<VectorType>(rows, 1, stream), |
86 | 6.04k | vzero = VectorType::Zero(rows); |
87 | 6.04k | SquareMatrixType sm1 = SquareMatrixType::Random(rows, rows), sm2(rows, rows); |
88 | | |
89 | 6.04k | Scalar x = ConsumeValue<typename MatrixType::Scalar>(stream); |
90 | | |
91 | 6.04k | Eigen::Index r = stream->ConsumeIntegralInRange( |
92 | 6.04k | std::min(kEigenIndexOne, rows - 1), rows - 1), |
93 | 6.04k | c = stream->ConsumeIntegralInRange( |
94 | 6.04k | std::min(kEigenIndexOne, cols - 1), cols - 1); |
95 | | |
96 | 6.04k | m1.coeffRef(r, c) = x; |
97 | 6.04k | m1(r, c) = x; |
98 | 6.04k | v1.coeffRef(r) = x; |
99 | 6.04k | v1(r) = x; |
100 | 6.04k | v1[r] = x; |
101 | | |
102 | 6.04k | Eigen::Index r1 = stream->ConsumeIntegralInRange( |
103 | 6.04k | static_cast<Eigen::Index>(0), |
104 | 6.04k | std::min(static_cast<Eigen::Index>(127), rows - 1)); |
105 | 6.04k | x = v1(static_cast<char>(r1)); |
106 | 6.04k | x = v1(static_cast<signed char>(r1)); |
107 | 6.04k | x = v1(static_cast<unsigned char>(r1)); |
108 | 6.04k | x = v1(static_cast<signed short>(r1)); |
109 | 6.04k | x = v1(static_cast<unsigned short>(r1)); |
110 | 6.04k | x = v1(static_cast<signed int>(r1)); |
111 | 6.04k | x = v1(static_cast<unsigned int>(r1)); |
112 | 6.04k | x = v1(static_cast<signed long>(r1)); |
113 | 6.04k | x = v1(static_cast<unsigned long>(r1)); |
114 | 6.04k | x = v1(static_cast<long long int>(r1)); |
115 | 6.04k | x = v1(static_cast<unsigned long long int>(r1)); |
116 | | |
117 | | // now test copying a row-vector into a (column-)vector and conversely. |
118 | 6.04k | square.col(r) = square.row(r).eval(); |
119 | 6.04k | Eigen::Matrix<Scalar, 1, MatrixType::RowsAtCompileTime> rv(rows); |
120 | 6.04k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> cv(rows); |
121 | 6.04k | rv = square.row(r); |
122 | 6.04k | cv = square.col(r); |
123 | | |
124 | 6.04k | cv.transpose(); |
125 | | |
126 | 6.04k | m3.real() = m1.real(); |
127 | 6.04k | m1 = m2; |
128 | | |
129 | 6.04k | sm2.setZero(); |
130 | 39.8k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i) = sm1.row(i); |
131 | | |
132 | 6.04k | sm2.setZero(); |
133 | 39.8k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() = sm1.row(i); |
134 | | |
135 | 6.04k | sm2.setZero(); |
136 | 39.8k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() += sm1.row(i); |
137 | | |
138 | 6.04k | sm2.setZero(); |
139 | 39.8k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() -= sm1.row(i); |
140 | 6.04k | } basicstuff_fuzzer.cc:void (anonymous namespace)::basicStuff<Eigen::Matrix<std::__1::complex<float>, -1, -1, 0, -1, -1> >(Eigen::Matrix<std::__1::complex<float>, -1, -1, 0, -1, -1> const&, FuzzedDataProvider*) Line | Count | Source | 68 | 1.51k | void basicStuff(const MatrixType& m, FuzzedDataProvider* stream) { | 69 | 1.51k | typedef typename MatrixType::Scalar Scalar; | 70 | 1.51k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> VectorType; | 71 | 1.51k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, | 72 | 1.51k | MatrixType::RowsAtCompileTime> | 73 | 1.51k | SquareMatrixType; | 74 | | | 75 | 1.51k | Eigen::Index rows = m.rows(); | 76 | 1.51k | Eigen::Index cols = m.cols(); | 77 | | | 78 | 1.51k | MatrixType m1 = GenerateTestMatrix<MatrixType>(rows, cols, stream), | 79 | 1.51k | m2 = GenerateTestMatrix<MatrixType>(rows, cols, stream), | 80 | 1.51k | m3(rows, cols), mzero = MatrixType::Zero(rows, cols), | 81 | 1.51k | square = GenerateTestMatrix< | 82 | 1.51k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, | 83 | 1.51k | MatrixType::RowsAtCompileTime>>(rows, rows, | 84 | 1.51k | stream); | 85 | 1.51k | VectorType v1 = GenerateTestMatrix<VectorType>(rows, 1, stream), | 86 | 1.51k | vzero = VectorType::Zero(rows); | 87 | 1.51k | SquareMatrixType sm1 = SquareMatrixType::Random(rows, rows), sm2(rows, rows); | 88 | | | 89 | 1.51k | Scalar x = ConsumeValue<typename MatrixType::Scalar>(stream); | 90 | | | 91 | 1.51k | Eigen::Index r = stream->ConsumeIntegralInRange( | 92 | 1.51k | std::min(kEigenIndexOne, rows - 1), rows - 1), | 93 | 1.51k | c = stream->ConsumeIntegralInRange( | 94 | 1.51k | std::min(kEigenIndexOne, cols - 1), cols - 1); | 95 | | | 96 | 1.51k | m1.coeffRef(r, c) = x; | 97 | 1.51k | m1(r, c) = x; | 98 | 1.51k | v1.coeffRef(r) = x; | 99 | 1.51k | v1(r) = x; | 100 | 1.51k | v1[r] = x; | 101 | | | 102 | 1.51k | Eigen::Index r1 = stream->ConsumeIntegralInRange( | 103 | 1.51k | static_cast<Eigen::Index>(0), | 104 | 1.51k | std::min(static_cast<Eigen::Index>(127), rows - 1)); | 105 | 1.51k | x = v1(static_cast<char>(r1)); | 106 | 1.51k | x = v1(static_cast<signed char>(r1)); | 107 | 1.51k | x = v1(static_cast<unsigned char>(r1)); | 108 | 1.51k | x = v1(static_cast<signed short>(r1)); | 109 | 1.51k | x = v1(static_cast<unsigned short>(r1)); | 110 | 1.51k | x = v1(static_cast<signed int>(r1)); | 111 | 1.51k | x = v1(static_cast<unsigned int>(r1)); | 112 | 1.51k | x = v1(static_cast<signed long>(r1)); | 113 | 1.51k | x = v1(static_cast<unsigned long>(r1)); | 114 | 1.51k | x = v1(static_cast<long long int>(r1)); | 115 | 1.51k | x = v1(static_cast<unsigned long long int>(r1)); | 116 | | | 117 | | // now test copying a row-vector into a (column-)vector and conversely. | 118 | 1.51k | square.col(r) = square.row(r).eval(); | 119 | 1.51k | Eigen::Matrix<Scalar, 1, MatrixType::RowsAtCompileTime> rv(rows); | 120 | 1.51k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> cv(rows); | 121 | 1.51k | rv = square.row(r); | 122 | 1.51k | cv = square.col(r); | 123 | | | 124 | 1.51k | cv.transpose(); | 125 | | | 126 | 1.51k | m3.real() = m1.real(); | 127 | 1.51k | m1 = m2; | 128 | | | 129 | 1.51k | sm2.setZero(); | 130 | 8.65k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i) = sm1.row(i); | 131 | | | 132 | 1.51k | sm2.setZero(); | 133 | 8.65k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() = sm1.row(i); | 134 | | | 135 | 1.51k | sm2.setZero(); | 136 | 8.65k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() += sm1.row(i); | 137 | | | 138 | 1.51k | sm2.setZero(); | 139 | 8.65k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() -= sm1.row(i); | 140 | 1.51k | } |
basicstuff_fuzzer.cc:void (anonymous namespace)::basicStuff<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, FuzzedDataProvider*) Line | Count | Source | 68 | 1.51k | void basicStuff(const MatrixType& m, FuzzedDataProvider* stream) { | 69 | 1.51k | typedef typename MatrixType::Scalar Scalar; | 70 | 1.51k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> VectorType; | 71 | 1.51k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, | 72 | 1.51k | MatrixType::RowsAtCompileTime> | 73 | 1.51k | SquareMatrixType; | 74 | | | 75 | 1.51k | Eigen::Index rows = m.rows(); | 76 | 1.51k | Eigen::Index cols = m.cols(); | 77 | | | 78 | 1.51k | MatrixType m1 = GenerateTestMatrix<MatrixType>(rows, cols, stream), | 79 | 1.51k | m2 = GenerateTestMatrix<MatrixType>(rows, cols, stream), | 80 | 1.51k | m3(rows, cols), mzero = MatrixType::Zero(rows, cols), | 81 | 1.51k | square = GenerateTestMatrix< | 82 | 1.51k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, | 83 | 1.51k | MatrixType::RowsAtCompileTime>>(rows, rows, | 84 | 1.51k | stream); | 85 | 1.51k | VectorType v1 = GenerateTestMatrix<VectorType>(rows, 1, stream), | 86 | 1.51k | vzero = VectorType::Zero(rows); | 87 | 1.51k | SquareMatrixType sm1 = SquareMatrixType::Random(rows, rows), sm2(rows, rows); | 88 | | | 89 | 1.51k | Scalar x = ConsumeValue<typename MatrixType::Scalar>(stream); | 90 | | | 91 | 1.51k | Eigen::Index r = stream->ConsumeIntegralInRange( | 92 | 1.51k | std::min(kEigenIndexOne, rows - 1), rows - 1), | 93 | 1.51k | c = stream->ConsumeIntegralInRange( | 94 | 1.51k | std::min(kEigenIndexOne, cols - 1), cols - 1); | 95 | | | 96 | 1.51k | m1.coeffRef(r, c) = x; | 97 | 1.51k | m1(r, c) = x; | 98 | 1.51k | v1.coeffRef(r) = x; | 99 | 1.51k | v1(r) = x; | 100 | 1.51k | v1[r] = x; | 101 | | | 102 | 1.51k | Eigen::Index r1 = stream->ConsumeIntegralInRange( | 103 | 1.51k | static_cast<Eigen::Index>(0), | 104 | 1.51k | std::min(static_cast<Eigen::Index>(127), rows - 1)); | 105 | 1.51k | x = v1(static_cast<char>(r1)); | 106 | 1.51k | x = v1(static_cast<signed char>(r1)); | 107 | 1.51k | x = v1(static_cast<unsigned char>(r1)); | 108 | 1.51k | x = v1(static_cast<signed short>(r1)); | 109 | 1.51k | x = v1(static_cast<unsigned short>(r1)); | 110 | 1.51k | x = v1(static_cast<signed int>(r1)); | 111 | 1.51k | x = v1(static_cast<unsigned int>(r1)); | 112 | 1.51k | x = v1(static_cast<signed long>(r1)); | 113 | 1.51k | x = v1(static_cast<unsigned long>(r1)); | 114 | 1.51k | x = v1(static_cast<long long int>(r1)); | 115 | 1.51k | x = v1(static_cast<unsigned long long int>(r1)); | 116 | | | 117 | | // now test copying a row-vector into a (column-)vector and conversely. | 118 | 1.51k | square.col(r) = square.row(r).eval(); | 119 | 1.51k | Eigen::Matrix<Scalar, 1, MatrixType::RowsAtCompileTime> rv(rows); | 120 | 1.51k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> cv(rows); | 121 | 1.51k | rv = square.row(r); | 122 | 1.51k | cv = square.col(r); | 123 | | | 124 | 1.51k | cv.transpose(); | 125 | | | 126 | 1.51k | m3.real() = m1.real(); | 127 | 1.51k | m1 = m2; | 128 | | | 129 | 1.51k | sm2.setZero(); | 130 | 8.75k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i) = sm1.row(i); | 131 | | | 132 | 1.51k | sm2.setZero(); | 133 | 8.75k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() = sm1.row(i); | 134 | | | 135 | 1.51k | sm2.setZero(); | 136 | 8.75k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() += sm1.row(i); | 137 | | | 138 | 1.51k | sm2.setZero(); | 139 | 8.75k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() -= sm1.row(i); | 140 | 1.51k | } |
basicstuff_fuzzer.cc:void (anonymous namespace)::basicStuff<Eigen::Matrix<std::__1::complex<double>, -1, -1, 0, -1, -1> >(Eigen::Matrix<std::__1::complex<double>, -1, -1, 0, -1, -1> const&, FuzzedDataProvider*) Line | Count | Source | 68 | 1.51k | void basicStuff(const MatrixType& m, FuzzedDataProvider* stream) { | 69 | 1.51k | typedef typename MatrixType::Scalar Scalar; | 70 | 1.51k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> VectorType; | 71 | 1.51k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, | 72 | 1.51k | MatrixType::RowsAtCompileTime> | 73 | 1.51k | SquareMatrixType; | 74 | | | 75 | 1.51k | Eigen::Index rows = m.rows(); | 76 | 1.51k | Eigen::Index cols = m.cols(); | 77 | | | 78 | 1.51k | MatrixType m1 = GenerateTestMatrix<MatrixType>(rows, cols, stream), | 79 | 1.51k | m2 = GenerateTestMatrix<MatrixType>(rows, cols, stream), | 80 | 1.51k | m3(rows, cols), mzero = MatrixType::Zero(rows, cols), | 81 | 1.51k | square = GenerateTestMatrix< | 82 | 1.51k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, | 83 | 1.51k | MatrixType::RowsAtCompileTime>>(rows, rows, | 84 | 1.51k | stream); | 85 | 1.51k | VectorType v1 = GenerateTestMatrix<VectorType>(rows, 1, stream), | 86 | 1.51k | vzero = VectorType::Zero(rows); | 87 | 1.51k | SquareMatrixType sm1 = SquareMatrixType::Random(rows, rows), sm2(rows, rows); | 88 | | | 89 | 1.51k | Scalar x = ConsumeValue<typename MatrixType::Scalar>(stream); | 90 | | | 91 | 1.51k | Eigen::Index r = stream->ConsumeIntegralInRange( | 92 | 1.51k | std::min(kEigenIndexOne, rows - 1), rows - 1), | 93 | 1.51k | c = stream->ConsumeIntegralInRange( | 94 | 1.51k | std::min(kEigenIndexOne, cols - 1), cols - 1); | 95 | | | 96 | 1.51k | m1.coeffRef(r, c) = x; | 97 | 1.51k | m1(r, c) = x; | 98 | 1.51k | v1.coeffRef(r) = x; | 99 | 1.51k | v1(r) = x; | 100 | 1.51k | v1[r] = x; | 101 | | | 102 | 1.51k | Eigen::Index r1 = stream->ConsumeIntegralInRange( | 103 | 1.51k | static_cast<Eigen::Index>(0), | 104 | 1.51k | std::min(static_cast<Eigen::Index>(127), rows - 1)); | 105 | 1.51k | x = v1(static_cast<char>(r1)); | 106 | 1.51k | x = v1(static_cast<signed char>(r1)); | 107 | 1.51k | x = v1(static_cast<unsigned char>(r1)); | 108 | 1.51k | x = v1(static_cast<signed short>(r1)); | 109 | 1.51k | x = v1(static_cast<unsigned short>(r1)); | 110 | 1.51k | x = v1(static_cast<signed int>(r1)); | 111 | 1.51k | x = v1(static_cast<unsigned int>(r1)); | 112 | 1.51k | x = v1(static_cast<signed long>(r1)); | 113 | 1.51k | x = v1(static_cast<unsigned long>(r1)); | 114 | 1.51k | x = v1(static_cast<long long int>(r1)); | 115 | 1.51k | x = v1(static_cast<unsigned long long int>(r1)); | 116 | | | 117 | | // now test copying a row-vector into a (column-)vector and conversely. | 118 | 1.51k | square.col(r) = square.row(r).eval(); | 119 | 1.51k | Eigen::Matrix<Scalar, 1, MatrixType::RowsAtCompileTime> rv(rows); | 120 | 1.51k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> cv(rows); | 121 | 1.51k | rv = square.row(r); | 122 | 1.51k | cv = square.col(r); | 123 | | | 124 | 1.51k | cv.transpose(); | 125 | | | 126 | 1.51k | m3.real() = m1.real(); | 127 | 1.51k | m1 = m2; | 128 | | | 129 | 1.51k | sm2.setZero(); | 130 | 10.4k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i) = sm1.row(i); | 131 | | | 132 | 1.51k | sm2.setZero(); | 133 | 10.4k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() = sm1.row(i); | 134 | | | 135 | 1.51k | sm2.setZero(); | 136 | 10.4k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() += sm1.row(i); | 137 | | | 138 | 1.51k | sm2.setZero(); | 139 | 10.4k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() -= sm1.row(i); | 140 | 1.51k | } |
basicstuff_fuzzer.cc:void (anonymous namespace)::basicStuff<Eigen::Matrix<long double, -1, -1, 0, -1, -1> >(Eigen::Matrix<long double, -1, -1, 0, -1, -1> const&, FuzzedDataProvider*) Line | Count | Source | 68 | 1.51k | void basicStuff(const MatrixType& m, FuzzedDataProvider* stream) { | 69 | 1.51k | typedef typename MatrixType::Scalar Scalar; | 70 | 1.51k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> VectorType; | 71 | 1.51k | typedef Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, | 72 | 1.51k | MatrixType::RowsAtCompileTime> | 73 | 1.51k | SquareMatrixType; | 74 | | | 75 | 1.51k | Eigen::Index rows = m.rows(); | 76 | 1.51k | Eigen::Index cols = m.cols(); | 77 | | | 78 | 1.51k | MatrixType m1 = GenerateTestMatrix<MatrixType>(rows, cols, stream), | 79 | 1.51k | m2 = GenerateTestMatrix<MatrixType>(rows, cols, stream), | 80 | 1.51k | m3(rows, cols), mzero = MatrixType::Zero(rows, cols), | 81 | 1.51k | square = GenerateTestMatrix< | 82 | 1.51k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, | 83 | 1.51k | MatrixType::RowsAtCompileTime>>(rows, rows, | 84 | 1.51k | stream); | 85 | 1.51k | VectorType v1 = GenerateTestMatrix<VectorType>(rows, 1, stream), | 86 | 1.51k | vzero = VectorType::Zero(rows); | 87 | 1.51k | SquareMatrixType sm1 = SquareMatrixType::Random(rows, rows), sm2(rows, rows); | 88 | | | 89 | 1.51k | Scalar x = ConsumeValue<typename MatrixType::Scalar>(stream); | 90 | | | 91 | 1.51k | Eigen::Index r = stream->ConsumeIntegralInRange( | 92 | 1.51k | std::min(kEigenIndexOne, rows - 1), rows - 1), | 93 | 1.51k | c = stream->ConsumeIntegralInRange( | 94 | 1.51k | std::min(kEigenIndexOne, cols - 1), cols - 1); | 95 | | | 96 | 1.51k | m1.coeffRef(r, c) = x; | 97 | 1.51k | m1(r, c) = x; | 98 | 1.51k | v1.coeffRef(r) = x; | 99 | 1.51k | v1(r) = x; | 100 | 1.51k | v1[r] = x; | 101 | | | 102 | 1.51k | Eigen::Index r1 = stream->ConsumeIntegralInRange( | 103 | 1.51k | static_cast<Eigen::Index>(0), | 104 | 1.51k | std::min(static_cast<Eigen::Index>(127), rows - 1)); | 105 | 1.51k | x = v1(static_cast<char>(r1)); | 106 | 1.51k | x = v1(static_cast<signed char>(r1)); | 107 | 1.51k | x = v1(static_cast<unsigned char>(r1)); | 108 | 1.51k | x = v1(static_cast<signed short>(r1)); | 109 | 1.51k | x = v1(static_cast<unsigned short>(r1)); | 110 | 1.51k | x = v1(static_cast<signed int>(r1)); | 111 | 1.51k | x = v1(static_cast<unsigned int>(r1)); | 112 | 1.51k | x = v1(static_cast<signed long>(r1)); | 113 | 1.51k | x = v1(static_cast<unsigned long>(r1)); | 114 | 1.51k | x = v1(static_cast<long long int>(r1)); | 115 | 1.51k | x = v1(static_cast<unsigned long long int>(r1)); | 116 | | | 117 | | // now test copying a row-vector into a (column-)vector and conversely. | 118 | 1.51k | square.col(r) = square.row(r).eval(); | 119 | 1.51k | Eigen::Matrix<Scalar, 1, MatrixType::RowsAtCompileTime> rv(rows); | 120 | 1.51k | Eigen::Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> cv(rows); | 121 | 1.51k | rv = square.row(r); | 122 | 1.51k | cv = square.col(r); | 123 | | | 124 | 1.51k | cv.transpose(); | 125 | | | 126 | 1.51k | m3.real() = m1.real(); | 127 | 1.51k | m1 = m2; | 128 | | | 129 | 1.51k | sm2.setZero(); | 130 | 12.0k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i) = sm1.row(i); | 131 | | | 132 | 1.51k | sm2.setZero(); | 133 | 12.0k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() = sm1.row(i); | 134 | | | 135 | 1.51k | sm2.setZero(); | 136 | 12.0k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() += sm1.row(i); | 137 | | | 138 | 1.51k | sm2.setZero(); | 139 | 12.0k | for (Eigen::Index i = 0; i < rows; ++i) sm2.col(i).noalias() -= sm1.row(i); | 140 | 1.51k | } |
|
141 | | |
142 | | template <typename MatrixType> |
143 | 3.02k | void basicStuffComplex(const MatrixType& m, FuzzedDataProvider* stream) { |
144 | 3.02k | typedef typename MatrixType::Scalar Scalar; |
145 | 3.02k | typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; |
146 | 3.02k | typedef Eigen::Matrix<RealScalar, MatrixType::RowsAtCompileTime, |
147 | 3.02k | MatrixType::ColsAtCompileTime> |
148 | 3.02k | RealMatrixType; |
149 | | |
150 | 3.02k | Eigen::Index rows = m.rows(); |
151 | 3.02k | Eigen::Index cols = m.cols(); |
152 | | |
153 | 3.02k | RealMatrixType rm1 = GenerateTestMatrix<RealMatrixType>(rows, cols, stream), |
154 | 3.02k | rm2 = GenerateTestMatrix<RealMatrixType>(rows, cols, stream); |
155 | 3.02k | MatrixType cm(rows, cols); |
156 | 3.02k | cm.real() = rm1; |
157 | 3.02k | cm.imag() = rm2; |
158 | 3.02k | rm1.setZero(); |
159 | 3.02k | rm2.setZero(); |
160 | 3.02k | rm1 = cm.real(); |
161 | 3.02k | rm2 = cm.imag(); |
162 | 3.02k | cm.real().setZero(); |
163 | 3.02k | } basicstuff_fuzzer.cc:void (anonymous namespace)::basicStuffComplex<Eigen::Matrix<std::__1::complex<float>, -1, -1, 0, -1, -1> >(Eigen::Matrix<std::__1::complex<float>, -1, -1, 0, -1, -1> const&, FuzzedDataProvider*) Line | Count | Source | 143 | 1.51k | void basicStuffComplex(const MatrixType& m, FuzzedDataProvider* stream) { | 144 | 1.51k | typedef typename MatrixType::Scalar Scalar; | 145 | 1.51k | typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; | 146 | 1.51k | typedef Eigen::Matrix<RealScalar, MatrixType::RowsAtCompileTime, | 147 | 1.51k | MatrixType::ColsAtCompileTime> | 148 | 1.51k | RealMatrixType; | 149 | | | 150 | 1.51k | Eigen::Index rows = m.rows(); | 151 | 1.51k | Eigen::Index cols = m.cols(); | 152 | | | 153 | 1.51k | RealMatrixType rm1 = GenerateTestMatrix<RealMatrixType>(rows, cols, stream), | 154 | 1.51k | rm2 = GenerateTestMatrix<RealMatrixType>(rows, cols, stream); | 155 | 1.51k | MatrixType cm(rows, cols); | 156 | 1.51k | cm.real() = rm1; | 157 | 1.51k | cm.imag() = rm2; | 158 | 1.51k | rm1.setZero(); | 159 | 1.51k | rm2.setZero(); | 160 | 1.51k | rm1 = cm.real(); | 161 | 1.51k | rm2 = cm.imag(); | 162 | 1.51k | cm.real().setZero(); | 163 | 1.51k | } |
basicstuff_fuzzer.cc:void (anonymous namespace)::basicStuffComplex<Eigen::Matrix<std::__1::complex<double>, -1, -1, 0, -1, -1> >(Eigen::Matrix<std::__1::complex<double>, -1, -1, 0, -1, -1> const&, FuzzedDataProvider*) Line | Count | Source | 143 | 1.51k | void basicStuffComplex(const MatrixType& m, FuzzedDataProvider* stream) { | 144 | 1.51k | typedef typename MatrixType::Scalar Scalar; | 145 | 1.51k | typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; | 146 | 1.51k | typedef Eigen::Matrix<RealScalar, MatrixType::RowsAtCompileTime, | 147 | 1.51k | MatrixType::ColsAtCompileTime> | 148 | 1.51k | RealMatrixType; | 149 | | | 150 | 1.51k | Eigen::Index rows = m.rows(); | 151 | 1.51k | Eigen::Index cols = m.cols(); | 152 | | | 153 | 1.51k | RealMatrixType rm1 = GenerateTestMatrix<RealMatrixType>(rows, cols, stream), | 154 | 1.51k | rm2 = GenerateTestMatrix<RealMatrixType>(rows, cols, stream); | 155 | 1.51k | MatrixType cm(rows, cols); | 156 | 1.51k | cm.real() = rm1; | 157 | 1.51k | cm.imag() = rm2; | 158 | 1.51k | rm1.setZero(); | 159 | 1.51k | rm2.setZero(); | 160 | 1.51k | rm1 = cm.real(); | 161 | 1.51k | rm2 = cm.imag(); | 162 | 1.51k | cm.real().setZero(); | 163 | 1.51k | } |
|
164 | | |
165 | | } // namespace |
166 | | |
167 | 1.51k | extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { |
168 | 1.51k | FuzzedDataProvider stream(data, size); |
169 | | |
170 | 1.51k | basicStuff( |
171 | 1.51k | Eigen::MatrixXcf( |
172 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize), |
173 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize)), |
174 | 1.51k | &stream); |
175 | 1.51k | basicStuff( |
176 | 1.51k | Eigen::MatrixXi( |
177 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize), |
178 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize)), |
179 | 1.51k | &stream); |
180 | 1.51k | basicStuff( |
181 | 1.51k | Eigen::MatrixXcd( |
182 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize), |
183 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize)), |
184 | 1.51k | &stream); |
185 | 1.51k | basicStuff( |
186 | 1.51k | Eigen::Matrix<long double, Eigen::Dynamic, Eigen::Dynamic>( |
187 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize), |
188 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize)), |
189 | 1.51k | &stream); |
190 | 1.51k | basicStuffComplex( |
191 | 1.51k | Eigen::MatrixXcf( |
192 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize), |
193 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize)), |
194 | 1.51k | &stream); |
195 | 1.51k | basicStuffComplex( |
196 | 1.51k | Eigen::MatrixXcd( |
197 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize), |
198 | 1.51k | stream.ConsumeIntegralInRange(kEigenIndexOne, kEigenTestMaxSize)), |
199 | 1.51k | &stream); |
200 | | |
201 | 1.51k | return 0; |
202 | 1.51k | } |