From d33ead3f1692342bc43fb2c96e037836d985bce6 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Thu, 27 Feb 2020 05:40:02 -0800 Subject: [PATCH] Fix matricesDiffer ignoring first value of matrix Summary: Changelog: [internal] # Problem Implementation of `matricesDiffer` was ignoring first element in the matrix, therefore two matrixes that were different were actually evaluated as same and React didn't pass value to native. # Solution Take first element in the matrix into account when comparing matrices. Reviewed By: cpojer Differential Revision: D20117210 fbshipit-source-id: 84c3b4e580da44bda4fc8bd8669318282ae9aa32 --- .../differ/__tests__/matricesDiffer-test.js | 45 +++++++++++++++++++ Libraries/Utilities/differ/matricesDiffer.js | 1 + 2 files changed, 46 insertions(+) create mode 100644 Libraries/Utilities/differ/__tests__/matricesDiffer-test.js diff --git a/Libraries/Utilities/differ/__tests__/matricesDiffer-test.js b/Libraries/Utilities/differ/__tests__/matricesDiffer-test.js new file mode 100644 index 00000000000..26cc35ce3f5 --- /dev/null +++ b/Libraries/Utilities/differ/__tests__/matricesDiffer-test.js @@ -0,0 +1,45 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + * @emails oncall+react_native + */ + +'use strict'; + +const matricesDiffer = require('../matricesDiffer'); + +describe('matricesDiffer', function() { + it('diffs matrices with single element', () => { + var x = [1]; + var y = [2]; + expect(matricesDiffer(x, y)).toBe(true); + + x = [1]; + y = [1]; + expect(matricesDiffer(x, y)).toBe(false); + }); + + it('diffs matrices with different number of elements', () => { + var x = [1, 1, 1, 1]; + var y = [1, 1, 1, 2]; + expect(matricesDiffer(x, y)).toBe(true); + }); + + it('diffs matrices with 16 elements', () => { + var x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; + var y = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; + expect(matricesDiffer(x, y)).toBe(false); + + x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; + y = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1]; + expect(matricesDiffer(x, y)).toBe(true); + + x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; + y = [2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; + expect(matricesDiffer(x, y)).toBe(true); + }); +}); diff --git a/Libraries/Utilities/differ/matricesDiffer.js b/Libraries/Utilities/differ/matricesDiffer.js index ade2a5fc3f9..1726ad361e3 100644 --- a/Libraries/Utilities/differ/matricesDiffer.js +++ b/Libraries/Utilities/differ/matricesDiffer.js @@ -30,6 +30,7 @@ const matricesDiffer = function(one, two) { one[14] !== two[14] || one[5] !== two[5] || one[10] !== two[10] || + one[0] !== two[0] || one[1] !== two[1] || one[2] !== two[2] || one[3] !== two[3] ||