Code covered by the BSD License  

Highlights from
Compare Structures

from Compare Structures by michael arant
Compares two structured variables recursively and notes where the two structures are different.

test_comp_struct.m
clear all

% first struct
a(1).a = 1;
a(2).a = 2;
a(1).b.a = 'test';
a(2).b.a = 'test';
a(1).b.b = cellstr('a');
a(2).b.b = cellstr('a');
a(1).b.c = 1==1;
a(2).b.c = 1==1;
a(1).c = single([1 2 3]);
a(2).c = single([1 2 3]);
a(1).d(1).a = int8(2);
a(1).d(2).a = uint8(2);
a(1).d(3).a = int16(2);
a(1).d(4).a = uint16(2);
a(1).d(5).a = int32(2);
a(1).d(6).a = uint32(2);
a(1).d(7).a = int64(2);
a(1).d(8).a = uint64(2);
a(2).d(1).a = int8(2);
a(2).d(2).a = uint8(2);
a(2).d(3).a = int16(2);
a(2).d(4).a = uint16(2);
a(2).d(5).a = int32(2);
a(2).d(6).a = uint32(2);
a(2).d(7).a = int64(2);
a(2).d(8).a = uint64(2);
a(1).e = @(x)sin(x);
a(2).e = @(x)sin(x);
a(1).f = 1;
a(1).j = [1.1 2.2 3.3];
a(1).k = @(x)sin(x);



% second struct
b = a;
b(2).a = 1;
b(2).b.a = 'x';
b(2).b.b = cellstr('b');
b(2).b.c = 1==2;
b(2).c = single([1 2 5]);
b(2).d(1).a = int8(4);
b(2).d(2).a = uint8(54);
b(2).d(3).a = int16(5);
b(2).d(4).a = uint16(65);
b(2).d(5).a = int32(7);
b(2).d(6).a = uint32(7);
b(2).d(7).a = int64(7);
b(2).d(8).a = uint64(7);
b(2).e = @(x)tan(x);
b(1).f = 1+1e-8;
b(1).j = single(a(1).j);


% non-match
a(2).h = 1;
b(1).g = 1;
b(2).i.a = 'r';
b(3) = b(2);
b(4) = b(2);
x = .5; a(2).k = @(x)sin(x);
x = .25; b(2).k = @(x)sin(x);
a(1).l.a = 1;
b(1).l.c = 2;

% wrong order fields
a(1).m.a = 1; a(1).m.b = 1;
a(1).n.a = 1; a(1).n.b = 1;
b(1).n.b = 1; b(1).n.a = 1;
b(1).m.b = 1; b(1).m.a = 1;


% test
% [match, er1, er2, erc] = comp_struct(a,b,3,2,1e-6,'a','b',0);
% [match, er1, er2, erc] = comp_struct(a,b,2,2,1e-6,'a','b',0);
% [match, er1, er2, erc] = comp_struct(a,b,1,2,1e-6,'a','b',0);
% [match, er1, er2, erc] = comp_struct(a,b,1,0,1e-6,'a','b',0);
[match, er1, er2, erc] = comp_struct(a,b,0,0,1e-6,'a','b');
[match, er1, er2, erc] = comp_struct(a,b,0,0,1e-6,'a','b',0);

match
disp('pause'); pause
er1
disp('pause'); pause
er2
disp('pause'); pause
erc
disp('pause'); pause

Contact us