1// =============================================================================
2// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3// Copyright (C) 2012 - INRIA - Serge STEER
4//
5//  This file is distributed under the same license as the Scilab package.
6// =============================================================================
7// <-- CLI SHELL MODE -->
8// Here only 1d dst computations are checked, because the dst gateway
9// is a clone of the dct one.
10//real cases
11A=[2,8,-1,3,7,6,8,7,9,1,6,7,7,2,5];
12n=15;
13//DST-I
14y_ref=2*sum((A'*ones(1,n)).*sin(%pi*(1:n)'*(1:n)/(n+1)),1);
15assert_checkalmostequal(dst(A,-1,"dst1"),y_ref);
16assert_checkalmostequal(dst(dst(A,-1,"dst1"),1,"dst1"),2*(n+1)*A);
17//DST-II
18y_ref=2*sum((A'*ones(1,n)).*sin(%pi*(0.5:n)'*(1:n)/(n)),1);
19assert_checkalmostequal(dst(A,-1,"dst2"),y_ref);
20assert_checkalmostequal(dst(dst(A,-1,"dst2"),1,"dst3"),2*n*A);
21//DST-III
22y_ref=((-1).^(0:n-1))*A(n)+ 2*sum((A(1:n-1)'*ones(1,n)).*sin(%pi*(1:n-1)'*(0.5:n)/(n)),1);
23assert_checkalmostequal(dst(A,1,"dst3"),y_ref);
24assert_checkalmostequal(dst(dst(A,1,"dst3"),-1,"dst2"),2*n*A);
25//DST-iV
26y_ref=2*sum((A'*ones(1,n)).*sin(%pi*(0.5:n)'*(0.5:n)/(n)),1);
27assert_checkalmostequal(dst(A,-1,"dst4"),y_ref);
28assert_checkalmostequal(dst(dst(A,-1,"dst4"),1,"dst4"),2*n*A);
29//complex cases
30A=[2,8,-1,3,7,6,8,7,9,1,6,7,7,2,5]+%i*[2 2 2 9 7 3 9 2 3 4 3 6 5 3 6];
31n=15;
32//DST-I
33y_ref=2*sum((A.'*ones(1,n)).*sin(%pi*(1:n)'*(1:n)/(n+1)),1);
34assert_checkalmostequal(dst(A,-1,"dst1"),y_ref);
35assert_checkalmostequal(dst(dst(A,-1,"dst1"),1,"dst1"),2*(n+1)*A);
36//DST-II
37y_ref=2*sum((A.'*ones(1,n)).*sin(%pi*(0.5:n)'*(1:n)/(n)),1);
38assert_checkalmostequal(dst(A,-1,"dst2"),y_ref);
39assert_checkalmostequal(dst(dst(A,-1,"dst2"),1,"dst3"),2*n*A);
40//DST-III
41y_ref=((-1).^(0:n-1))*A(n)+ 2*sum((A(1:n-1).'*ones(1,n)).*sin(%pi*(1:n-1)'*(0.5:n)/(n)),1);
42assert_checkalmostequal(dst(A,1,"dst3"),y_ref,100*%eps,104*%eps);
43assert_checkalmostequal(dst(dst(A,1,"dst3"),-1,"dst2"),2*n*A);
44//DST-iV
45y_ref=2*sum((A.'*ones(1,n)).*sin(%pi*(0.5:n)'*(0.5:n)/(n)),1);
46assert_checkalmostequal(dst(A,-1,"dst4"),y_ref);
47assert_checkalmostequal(dst(dst(A,-1,"dst4"),1,"dst4"),2*n*A);
48//complex cases
49