function results = vl_test_liop(varargin)
% VL_TEST_SIFT
vl_test_init ;

function s = setup()
randn('state',0) ;
s.patch = randn(65,'single') ;
xr = -32:32 ;
[x,y] = meshgrid(xr) ;
s.blob = - single(x.^2+y.^2) ;

function test_basic(s)
d = vl_liop(s.patch) ;

function test_blob(s)
% with a blob, all local intensity order pattern are equal. In
% particular, if the blob intensity decreases away from the center,
% then all local intensities sampled in a neighbourhood of 2 elements
% are already sorted (see LIOP details).
d = vl_liop(s.blob, ...
            'IntensityThreshold', 0,  ...
            'NumNeighbours', 2, ...
            'NumSpatialBins', 1) ;
assert(isequal(d, single([1;0]))) ;

function test_neighbours(s)
for n=2:5
  for p=1:3
    d = vl_liop(s.patch, 'NumNeighbours', n, 'NumSpatialBins', p) ;
    assert(numel(d) == p * factorial(n)) ;
  end
end

function test_multiple(s)
x = randn(31,31,3, 'single') ;
d = vl_liop(x) ;
for i=1:3
  d_(:,i) = vl_liop(squeeze(x(:,:,i))) ;
end
assert(isequal(d,d_)) ;