Skip to content

Commit

Permalink
Add tests about time precision preservation when converting MATLAB du…
Browse files Browse the repository at this point in the history
…ration to arrow time32 and time64
  • Loading branch information
leihou6116 committed Nov 9, 2023
1 parent 8033342 commit 0e1061d
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
24 changes: 24 additions & 0 deletions matlab/test/arrow/array/tTime32Array.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ function Basic(tc)
times = seconds(1:4);
array = tc.ArrowArrayConstructorFcn(times);
tc.verifyInstanceOf(array, "arrow.array.Time32Array");
tc.verifyEqual(array.toMATLAB, times');
end

function TimeUnitDefaultValue(tc)
% Verify that the default value of "TimeUnit" is "second".
times = seconds([1.2 1.3 1.4 1.5 1.7]);
array = tc.ArrowArrayConstructorFcn(times);
tc.verifyEqual(array.toMATLAB, seconds([1;1;1;2;2]));
end

function TypeIsTime32(tc)
Expand Down Expand Up @@ -274,6 +282,22 @@ function TestIsEqualFalseTimeUnitMistmatch(tc)
% arrays are not equal
tc.verifyFalse(isequal(array1, array2));
end

function RoundTimeBySpecifyTimeUnit(tc)
% Verify that the input parameter "TimeUnit" is used to specify
% the time resolution. The value is rounded off based on the
% specified "TimeUnit".

% TimeUnit="Second"
matlabTimes = seconds([1.1, 1.4, 1.5, 1.9, 2.001]);
arrowTimes = tc.ArrowArrayConstructorFcn(matlabTimes, TimeUnit="Second");
tc.verifyEqual(arrowTimes.toMATLAB(),seconds([1, 1, 2, 2, 2])');

% TimeUnit="Millisecond"
matlabTimes = seconds([1.1, 1.99, 1.001, 1.0004, 1.0005, 2.001]);
arrowTimes = tc.ArrowArrayConstructorFcn(matlabTimes, TimeUnit="Millisecond");
tc.verifyEqual(arrowTimes.toMATLAB(),seconds([1.1, 1.99, 1.001, 1, 1.001, 2.001])','AbsTol',seconds(1e-15));
end
end

methods
Expand Down
67 changes: 67 additions & 0 deletions matlab/test/arrow/array/tTime64Array.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,25 @@ function Basic(tc)
times = seconds(1:4);
array = tc.ArrowArrayConstructorFcn(times);
tc.verifyInstanceOf(array, "arrow.array.Time64Array");
tc.verifyEqual(array.toMATLAB, times');
end

function TimeUnitDefaultValue(tc)
% Verify that the default value of "TimeUnit" is "Microsecond".
matlabTimes = seconds([1; ...
0.001; ...
2.004521; ...
3.1234564; ...
4.1234566; ...
5.000000123]);
arrowArray = tc.ArrowArrayConstructorFcn(matlabTimes);
tc.verifyEqual(arrowArray.toMATLAB(), ...
seconds([1;...
0.001; ...
2.004521; ...
3.123456; ...
4.123457; ...
5]));
end

function TypeIsTime64(tc)
Expand Down Expand Up @@ -290,6 +309,54 @@ function TestIsEqualFalseTimeUnitMistmatch(tc)
% arrays are not equal
tc.verifyFalse(isequal(array1, array2));
end

function RoundTimeBySpecifyTimeUnit(tc)
% Verify that the input parameter "TimeUnit" is used to specify
% the time resolution. The value is rounded off based on the
% specified "TimeUnit".

% TimeUnit="Microsecond"
matlabTimes = seconds([1.000001, ...
2.999999, ...
0.0002004, ...
0.0000035, ...
10.123456499, ...
9.999999543]);
arrowTimes = tc.ArrowArrayConstructorFcn(matlabTimes, TimeUnit="Microsecond");
tc.verifyEqual(arrowTimes.toMATLAB(), ...
seconds([1.000001, ...
2.999999, ...
0.0002, ...
0.000004, ...
10.123456, ...
10])', ...
'AbsTol',seconds(1e-14));

% TimeUnit="Nanosecond"
matlabTimes = seconds([1, ...
1.123, ...
1.12345, ...
1.123456, ...
1.1234567, ...
1.12345678, ...
1.123456789, ...
1.1234567894, ...
1.1234567895, ...
1.123456789009]);
arrowTimes = tc.ArrowArrayConstructorFcn(matlabTimes, TimeUnit="Nanosecond");
tc.verifyEqual(arrowTimes.toMATLAB(),...
seconds([1, ...
1.123, ...
1.12345, ...
1.123456, ...
1.1234567, ...
1.12345678, ...
1.123456789, ...
1.123456789, ...
1.123456790, ...
1.123456789])',...
'AbsTol',seconds(1e-15));
end
end

methods
Expand Down

0 comments on commit 0e1061d

Please sign in to comment.