[b4b313]: / matlab_xunit_3.1 / matlab_xunit / xunit / assertFilesEqual.m

Download this file

68 lines (59 with data), 2.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
function assertFilesEqual(filename1, filename2, user_message)
%assertFilesEqual Assert that files contain the same contents.
% assertFilesEqual(filename1, filename2) throws an exception if the two
% specified files do not contain the same contents.
%
% assertFilesEqual(filename1, filename2, message) prepends the specified
% message string to the assertion message.
% Steven L. Eddins
% Copyright 2009-2010 The MathWorks, Inc.
if nargin < 3
user_message = '';
end
fid1 = fopen(filename1, 'r');
if (fid1 < 0)
message = sprintf('%s\nCould not open file for reading: %s', ...
user_message, filename1);
throwAsCaller(MException('assertFilesEqual:readFailure', ...
'%s', message));
else
c1 = onCleanup(@() fclose(fid1));
end
fid2 = fopen(filename2, 'r');
if (fid2 < 0)
message = sprintf('%s\nCould not open file for reading: %s', ...
user_message, filename2);
throwAsCaller(MException('assertFilesEqual:readFailure', '%s', message));
else
c2 = onCleanup(@() fclose(fid2));
end
block_size = 100000;
num_blocks = 0;
done = false;
while ~done
block_from_file1 = fread(fid1, block_size, '*uint8');
block_from_file2 = fread(fid2, block_size, '*uint8');
if numel(block_from_file1) ~= numel(block_from_file2)
fseek(fid1, 0, 'eof');
fseek(fid2, 0, 'eof');
message = sprintf('The two files are not the same size. File "%s" has %d bytes and file "%s" has %d bytes', ...
filename1, ftell(fid1), filename2, ftell(fid2));
if ~isempty(user_message)
message = sprintf('%s\n%s', user_message, message);
end
throwAsCaller(MException('assertFilesEqual:sizeMismatch', '%s', message));
end
if ~isequal(block_from_file1, block_from_file2)
first_difference_in_block = find(block_from_file1 ~= block_from_file2);
first_difference = num_blocks * block_size + first_difference_in_block;
message = sprintf('Files are not equal. First difference is at byte %d, where file "%s" contains 0x%X and file "%s" contains 0x%X', ...
first_difference, filename1, block_from_file1(first_difference_in_block), ...
filename2, block_from_file2(first_difference_in_block));
if ~isempty(user_message)
message = sprintf('%s\n%s', user_message, message);
end
throwAsCaller(MException('assertFilesEqual:valuesDiffer', '%s', message));
end
done = numel(block_from_file1) < block_size;
num_blocks = num_blocks + 1;
end