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