@@ -142,6 +142,94 @@ TEST_F(TestRecordBatch, ApproxEqualOptions) {
142142 EXPECT_TRUE (b1->ApproxEquals (*b2, options));
143143}
144144
145+ class TestRecordBatchEqualsSameAddress : public TestRecordBatch {};
146+
147+ TEST_F (TestRecordBatchEqualsSameAddress, NonFloatType) {
148+ auto f0 = field (" f0" , int32 ());
149+ auto f1 = field (" f1" , int64 ());
150+
151+ auto schema = ::arrow::schema ({f0, f1});
152+
153+ auto a0 = ArrayFromJSON (f0->type (), " [0, 1, 2]" );
154+ auto a1 = ArrayFromJSON (f1->type (), " [0, 1, 2]" );
155+
156+ auto b0 = RecordBatch::Make (schema, 3 , {a0, a1});
157+ auto b1 = b0;
158+
159+ auto options = EqualOptions::Defaults ();
160+
161+ ASSERT_TRUE (b0->Equals (*b1, true , options));
162+ ASSERT_TRUE (b0->Equals (*b1, true , options.nans_equal (true )));
163+
164+ ASSERT_TRUE (b0->ApproxEquals (*b1, options));
165+ ASSERT_TRUE (b0->ApproxEquals (*b1, options.nans_equal (true )));
166+ }
167+
168+ TEST_F (TestRecordBatchEqualsSameAddress, NestedTypesWithoutFloatType) {
169+ auto f0 = field (" f0" , int32 ());
170+ auto f1 = field (" f1" , struct_ ({{" f2" , int64 ()}, {" f3" , int8 ()}}));
171+
172+ auto schema = ::arrow::schema ({f0, f1});
173+
174+ auto a0 = ArrayFromJSON (f0->type (), " [0, 1, 2]" );
175+ auto a1 = ArrayFromJSON (
176+ f1->type (), R"( [{"f2": 1, "f3": 4}, {"f2": 2, "f3": 5}, {"f2":3, "f3": 6}])" );
177+
178+ auto b0 = RecordBatch::Make (schema, 3 , {a0, a1});
179+ auto b1 = b0;
180+
181+ auto options = EqualOptions::Defaults ();
182+
183+ ASSERT_TRUE (b0->Equals (*b1, true , options));
184+ ASSERT_TRUE (b0->Equals (*b1, true , options.nans_equal (true )));
185+
186+ ASSERT_TRUE (b0->ApproxEquals (*b1, options));
187+ ASSERT_TRUE (b0->ApproxEquals (*b1, options.nans_equal (true )));
188+ }
189+
190+ TEST_F (TestRecordBatchEqualsSameAddress, FloatType) {
191+ auto f0 = field (" f0" , int32 ());
192+ auto f1 = field (" f1" , float64 ());
193+
194+ auto schema = ::arrow::schema ({f0, f1});
195+
196+ auto a0 = ArrayFromJSON (f0->type (), " [0, 1, 2]" );
197+ auto a1 = ArrayFromJSON (f1->type (), " [0.0, 1.0, 2.0, NaN]" );
198+
199+ auto b0 = RecordBatch::Make (schema, 3 , {a0, a1});
200+ auto b1 = b0;
201+
202+ auto options = EqualOptions::Defaults ();
203+
204+ ASSERT_FALSE (b0->Equals (*b1, true , options));
205+ ASSERT_TRUE (b0->Equals (*b1, true , options.nans_equal (true )));
206+
207+ ASSERT_FALSE (b0->ApproxEquals (*b1, options));
208+ ASSERT_TRUE (b0->ApproxEquals (*b1, options.nans_equal (true )));
209+ }
210+
211+ TEST_F (TestRecordBatchEqualsSameAddress, NestedTypesWithFloatType) {
212+ auto f0 = field (" f0" , int32 ());
213+ auto f1 = field (" f1" , struct_ ({{" f2" , int64 ()}, {" f3" , float32 ()}}));
214+
215+ auto schema = ::arrow::schema ({f0, f1});
216+
217+ auto a0 = ArrayFromJSON (f0->type (), " [0, 1, 2]" );
218+ auto a1 = ArrayFromJSON (
219+ f1->type (), R"( [{"f2": 1, "f3": 4.0}, {"f2": 2, "f3": 4.0}, {"f2":3, "f3": NaN}])" );
220+
221+ auto b0 = RecordBatch::Make (schema, 3 , {a0, a1});
222+ auto b1 = b0;
223+
224+ auto options = EqualOptions::Defaults ();
225+
226+ ASSERT_FALSE (b0->Equals (*b1, true , options));
227+ ASSERT_TRUE (b0->Equals (*b1, true , options.nans_equal (true )));
228+
229+ ASSERT_FALSE (b0->ApproxEquals (*b1, options));
230+ ASSERT_TRUE (b0->ApproxEquals (*b1, options.nans_equal (true )));
231+ }
232+
145233TEST_F (TestRecordBatch, Validate) {
146234 const int length = 10 ;
147235
0 commit comments