File Exchange

image thumbnail

Compare Nested Cell & Struct Arrays Recursively

version 1.0.0.1 (3.74 KB) by Ameya Deoras
Compare two cell or struct arrays and find exactly where they differ

2 Downloads

Updated 01 Sep 2016

View License

This package contains two functions CELLEQ and STRUCTEQ which compare two cell arrays or two structures respectively. The cells/structs may internally contain more nested cell and struct arrays which are compared recursively.
Feature summary:
* Support for nested structures/cell arrays
* Return of full stack information on where the two cells/structs differ
* Control for comparison of Function handles within structs/cells
* Control for comparison of NaN properties

Usage:
[iseq, info]= celleq(cell1, cell2, funh2string, ignorenan)
[iseq, info] = structeq(struct1, struct2, funh2string, ignorenan)

* iseq is true if all elements and subelements of the two cells or structs are identical
* info is a structure that contains a field "Reason" which gives you a text stack of why the difference occurred as well as a field "Where" which contains the indices of the element and subelement where the comparison failed.
* (optional) funh2string, if true, instructs function handle comparisons to return true if the string representations of the function handles are the same.
* (optional) ignorenan, if true, will return true for nan == nan. By default both properties are set to false

Example:
>> figure;
>> g = surf(peaks(50));
>> rotate3d
>> hg1 = handle2struct(gcf);
>> set(g,'XDataMode', 'manual');
>> hg2 = handle2struct(gcf);

>> [iseq, info] = structeq(hg1, hg2)
iseq =
0
info =
Reason: [1x137 char]
Where: '(1).properties(1).KeyPressFcn{1}'

>> [iseq, info] = structeq(hg1, hg2, true)
iseq =
0
info =
Reason: [1x188 char]
Where: '(1).children(1).children(1).properties(1).XDataMode'

Comments and Ratings (4)

Very Nice. A useful addition would be to output the adresses of all difference cells in 'Where' field - at the moment only the first address is generated.

Error in line 61 'Where' should be between quotes I think

Very useful!

Updates

1.0.0.1

Updated license

MATLAB Release Compatibility
Created with R2009b
Compatible with any release
Platform Compatibility
Windows macOS Linux