From 63659a15fe8695021ced714f92f49ad79e9981fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?=
 <stephane.adjemian@univ-lemans.fr>
Date: Thu, 19 Nov 2015 14:17:06 +0100
Subject: [PATCH] Added unit tests.

---
 data/test_dates4display.m                  |   4 +
 src/@dates/copy.m                          |  23 +++-
 src/@dates/dates.m                         |  15 +++
 src/@dates/end.m                           |  22 +++-
 src/@dates/isequal.m                       |   2 +-
 src/@dates/length.m                        |   2 +-
 src/@dates/private/comparison_arg_checks.m | 121 +++++++++++++++++++-
 src/@dates/private/dates4display.m         | 117 ++++++++++++++++++-
 src/@dates/private/greaterorequal.m        | 125 ++++++++++++++++++++-
 src/@dates/private/greaterthan.m           | 119 +++++++++++++++++++-
 src/@dates/private/lessorequal.m           | 119 +++++++++++++++++++-
 src/@dates/private/lessthan.m              | 117 ++++++++++++++++++-
 src/@dates/strings.m                       |  27 ++++-
 src/@dates/subsasgn.m                      |  19 +++-
 src/@dates/vertcat.m                       |  53 ++++++++-
 src/utilities/convert/date2string.m        |  71 +++++++++++-
 src/utilities/convert/freq2string.m        |  36 +++++-
 src/utilities/convert/string2freq.m        |  36 +++++-
 src/utilities/is/isdates.m                 |  79 ++++++++++++-
 src/utilities/is/isfreq.m                  |  79 ++++++++++++-
 src/utilities/is/issubperiod.m             |  49 +++++++-
 src/utilities/missing/isint/isint.m        |  86 +++++++++++++-
 src/utilities/missing/shiftS/shiftS.m      |  39 ++++++-
 23 files changed, 1324 insertions(+), 36 deletions(-)
 create mode 100644 data/test_dates4display.m

diff --git a/data/test_dates4display.m b/data/test_dates4display.m
new file mode 100644
index 0000000..b84264f
--- /dev/null
+++ b/data/test_dates4display.m
@@ -0,0 +1,4 @@
+expected_str_1 = sprintf('toto is an empty dates object.\n');
+expected_str_2 = sprintf('toto = <dates: 1950Q1, 1950Q2>\n');
+expected_str_3 = sprintf('toto = <dates: 1950Q1, 1950Q2, ..., 1950Q4, 1951Q1>\n');
+expected_str_4 = sprintf('toto = <dates: 1950Q1, 1950Q2, 1950Q3, 1950Q4, 1951Q1>\n');
diff --git a/src/@dates/copy.m b/src/@dates/copy.m
index e15a508..ddb4c9a 100644
--- a/src/@dates/copy.m
+++ b/src/@dates/copy.m
@@ -1,4 +1,4 @@
-function p = copy(o)
+function p = copy(o) % --*-- Unitary tests --*--
 
 % Do a copy of a dates object.
 %
@@ -26,3 +26,24 @@ function p = copy(o)
 p = dates();
 p.freq = o.freq;
 p.time = o.time;
+
+%@test:1
+%$ % Define a dates object
+%$ o = dates('1945Q3','1944Q4');
+%$ q = dates('1945Q3','1944Q4');
+%$
+%$ % Call the tested routine.
+%$ try
+%$     p = copy(o);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$ 
+%$ if t(1)
+%$      o.sort_();
+%$      t(2) = dassert(p, q);
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/src/@dates/dates.m b/src/@dates/dates.m
index 71aebea..8c837f8 100644
--- a/src/@dates/dates.m
+++ b/src/@dates/dates.m
@@ -109,6 +109,21 @@ classdef dates<handle % --*-- Unitary tests --*--
             end
             error('dates:ArgCheck','You should first read the manual!')
         end % dates constructor.
+        % Other methods
+        p = sort(o);
+        o = sort_(o);
+        p = unique(o);
+        o = unique_(o);
+        p = append(o, d);
+        o = append_(o, d);
+        p = pop(o, d);
+        o = pop_(o, d);
+        p = remove(o, d);
+        o = remove_(o, d);
+        s = char(o);
+        a = double(o);
+        n = ndat(o);
+        n = length(o);
     end % methods 
 end % classdef
 
diff --git a/src/@dates/end.m b/src/@dates/end.m
index 5de7f0b..1f0d621 100644
--- a/src/@dates/end.m
+++ b/src/@dates/end.m
@@ -1,4 +1,4 @@
-function lastIndex = end(o, k, n)
+function lastIndex = end(o, k, n) % --*-- Unitary tests --*--
 
 % Overloads end keyword.
 %
@@ -27,3 +27,23 @@ function lastIndex = end(o, k, n)
 
 assert(k==1 && n==1, 'dates:end:ArgCheck', 'dates only has one dimension');
 lastIndex = o.ndat();
+
+%@test:1
+%$ % Define a dates object
+%$ o = dates('1938Q4'):dates('2015Q4');
+%$ q = dates('2015Q4');
+%$
+%$ % Call the tested routine.
+%$ try
+%$     p = o(end);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$ 
+%$ if t(1)
+%$      t(2) = dassert(p, q);
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/src/@dates/isequal.m b/src/@dates/isequal.m
index 62f9e10..db945c7 100644
--- a/src/@dates/isequal.m
+++ b/src/@dates/isequal.m
@@ -1,4 +1,4 @@
-function l = isequal(o, p, fake)
+function l = isequal(o, p, fake) % --*-- Unitary tests --*--
 
 % Overloads isequal function for dates objects. Returns true (1) iff o and p have the same elements.
 %
diff --git a/src/@dates/length.m b/src/@dates/length.m
index 6ee6ae8..c489719 100644
--- a/src/@dates/length.m
+++ b/src/@dates/length.m
@@ -1,4 +1,4 @@
-function n = length(o)
+function n = length(o) % --*-- Unitary tests --*--
 
 % Returns the number of elements in a dates object.
 %
diff --git a/src/@dates/private/comparison_arg_checks.m b/src/@dates/private/comparison_arg_checks.m
index 4983fe8..82fa455 100644
--- a/src/@dates/private/comparison_arg_checks.m
+++ b/src/@dates/private/comparison_arg_checks.m
@@ -1,4 +1,4 @@
-function [o, p] = comparison_arg_checks(varargin)
+function [o, p] = comparison_arg_checks(varargin) % --*-- Unitary tests --*--
 
 % Returns two dates objects or an error if objects to be compared are not compatible.
 %
@@ -45,4 +45,121 @@ if ~isequal(varargin{1}.ndat, varargin{2}.ndat) && ~(isequal(varargin{1}.ndat,1)
 end
 
 o = varargin{1};
-p = varargin{2};
\ No newline at end of file
+p = varargin{2};
+
+%@test:1
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ try
+%$     [o, p] = comparison_arg_checks(1);
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:1
+
+%@test:2
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ try
+%$     [o, p] = comparison_arg_checks('make', 'my', 'day');
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:2
+
+%@test:3
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ try
+%$     [o, p] = comparison_arg_checks('punk', dates('1950Q1'));
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:3
+
+%@test:4
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ try
+%$     [o, p] = comparison_arg_checks(dates('1950Q1'), 1);
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:4
+
+%@test:5
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ try
+%$     [o, p] = comparison_arg_checks(dates('1950Q1'), dates('1950M1'));
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:5
+
+%@test:6
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ try
+%$     [o, p] = comparison_arg_checks(dates('1950Q1'):dates('1950Q2'), dates('1950Q1'):dates('1950Q3'));
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:6
+
+%@test:7
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ try
+%$     [o, p] = comparison_arg_checks(dates('1950Q2'), dates('1950Q1'));
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(o, dates('1950Q2'));
+%$     t(3) = dassert(p, dates('1950Q1'));
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:7
\ No newline at end of file
diff --git a/src/@dates/private/dates4display.m b/src/@dates/private/dates4display.m
index 7dc6109..b8d1a0a 100644
--- a/src/@dates/private/dates4display.m
+++ b/src/@dates/private/dates4display.m
@@ -1,4 +1,4 @@
-function str = dates4display(o, name, max_number_of_elements)
+function str = dates4display(o, name, max_number_of_elements) % --*-- Unitary tests --*--
 
 % Converts a list object to a string.
 %
@@ -45,4 +45,117 @@ else
     str = sprintf('%s%s, ', str, '...');
     str = sprintf('%s%s, ', str, date2string(o.time(o.length()-1,:),o.freq));
 end
-str = sprintf('%s%s>', str, date2string(o.time(o.length(),:),o.freq));
\ No newline at end of file
+str = sprintf('%s%s>\n', str, date2string(o.time(o.length(),:),o.freq));
+
+%@test:1
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$ addpath('../../../data/')
+%$
+%$ try
+%$     toto = dates();
+%$     str = dates4display(toto, 'toto', 5);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     test_dates4display;
+%$     try
+%$         t(2) = dassert(str, expected_str_1);
+%$     catch
+%$         t(2) = false;
+%$     end
+%$ end
+%$
+%$ T = all(t);
+%$ rmpath('../../../data/')
+%$ cd(OPATH);
+%@eof:1
+
+%@test:2
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$ addpath('../../../data/')
+%$
+%$ try
+%$     toto = dates('1950Q1'):dates('1950Q2');
+%$     str = dates4display(toto, 'toto', 5);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     test_dates4display;
+%$     try
+%$         t(2) = dassert(str, expected_str_2);
+%$     catch
+%$         t(2) = false;
+%$     end
+%$ end
+%$
+%$ T = all(t);
+%$ rmpath('../../../data/')
+%$ cd(OPATH);
+%@eof:2
+
+%@test:3
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$ addpath('../../../data/')
+%$
+%$ try
+%$     toto = dates('1950Q1'):dates('1951Q1');
+%$     str = dates4display(toto, 'toto', 4);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     test_dates4display;
+%$     try
+%$         t(2) = dassert(str, expected_str_3);
+%$     catch
+%$         t(2) = false;
+%$     end
+%$ end
+%$
+%$ T = all(t);
+%$ rmpath('../../../data/')
+%$ cd(OPATH);
+%@eof:3
+
+%@test:4
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$ addpath('../../../data/')
+%$
+%$ try
+%$     toto = dates('1950Q1'):dates('1951Q1');
+%$     str = dates4display(toto, 'toto', 6);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     test_dates4display;
+%$     try
+%$         t(2) = dassert(str, expected_str_4);
+%$     catch
+%$         t(2) = false;
+%$     end
+%$ end
+%$
+%$ T = all(t);
+%$ rmpath('../../../data/')
+%$ cd(OPATH);
+%@eof:4
+
diff --git a/src/@dates/private/greaterorequal.m b/src/@dates/private/greaterorequal.m
index 00d3598..d99a0ce 100644
--- a/src/@dates/private/greaterorequal.m
+++ b/src/@dates/private/greaterorequal.m
@@ -1,6 +1,6 @@
-function c = greaterorequal(a,b)
+function c = greaterorequal(a,b) % --*-- Unitary tests --*--
 
-% Copyright (C) 2013-2014 Dynare Team
+% Copyright (C) 2013-2015 Dynare Team
 %
 % This code is free software: you can redistribute it and/or modify
 % it under the terms of the GNU General Public License as published by
@@ -27,4 +27,123 @@ else
             c = false;
         end
     end
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [2, 4];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = greaterorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:1
+
+%@test:2
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 4];
+%$ b = [2, 2];
+%$
+%$ try
+%$     boolean = greaterorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:2
+
+%@test:3
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 4];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = greaterorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:3
+
+%@test:4
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 2];
+%$ b = [1, 4];
+%$
+%$ try
+%$     boolean = greaterorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:4
+
+%@test:5
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 2];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = greaterorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:5
+
+
+
+
diff --git a/src/@dates/private/greaterthan.m b/src/@dates/private/greaterthan.m
index ae0b417..ffc7695 100644
--- a/src/@dates/private/greaterthan.m
+++ b/src/@dates/private/greaterthan.m
@@ -1,4 +1,4 @@
-function c = greaterthan(a,b)
+function c = greaterthan(a,b) % --*-- Unitary tests --*--
 
 % Copyright (C) 2013-2014 Dynare Team
 %
@@ -27,4 +27,119 @@ else
             c = false;
         end
     end
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [2, 4];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = greaterthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:1
+
+%@test:2
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 4];
+%$ b = [2, 2];
+%$
+%$ try
+%$     boolean = greaterthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:2
+
+%@test:3
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 4];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = greaterthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:3
+
+%@test:4
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 2];
+%$ b = [1, 4];
+%$
+%$ try
+%$     boolean = greaterthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:4
+
+%@test:5
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 2];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = greaterthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:5
diff --git a/src/@dates/private/lessorequal.m b/src/@dates/private/lessorequal.m
index 7f85bb9..58d05e7 100644
--- a/src/@dates/private/lessorequal.m
+++ b/src/@dates/private/lessorequal.m
@@ -1,4 +1,4 @@
-function c = lessorequal(a, b)
+function c = lessorequal(a, b) % --*-- Unitary tests --*--
 
 % Copyright (C) 2013-2014 Dynare Team
 %
@@ -27,4 +27,119 @@ else
             c = false;
         end
     end
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [2, 4];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = lessorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:1
+
+%@test:2
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 4];
+%$ b = [2, 2];
+%$
+%$ try
+%$     boolean = lessorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:2
+
+%@test:3
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 4];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = lessorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:3
+
+%@test:4
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 2];
+%$ b = [1, 4];
+%$
+%$ try
+%$     boolean = lessorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:4
+
+%@test:5
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 2];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = lessorequal(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:5
diff --git a/src/@dates/private/lessthan.m b/src/@dates/private/lessthan.m
index 549199e..c2e3228 100644
--- a/src/@dates/private/lessthan.m
+++ b/src/@dates/private/lessthan.m
@@ -1,4 +1,4 @@
-function c = lessthan(a,b)
+function c = lessthan(a,b) % --*-- Unitary tests --*--
 
 % Copyright (C) 2013-2014 Dynare Team
 %
@@ -28,3 +28,118 @@ else
         end
     end
 end
+
+%@test:1
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [2, 4];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = lessthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:1
+
+%@test:2
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 4];
+%$ b = [2, 2];
+%$
+%$ try
+%$     boolean = lessthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:2
+
+%@test:3
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 4];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = lessthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:3
+
+%@test:4
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 2];
+%$ b = [1, 4];
+%$
+%$ try
+%$     boolean = lessthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:4
+
+%@test:5
+%$ OPATH = pwd();
+%$ [DATES_PATH, junk1, junk2] = fileparts(which('dates'));
+%$ cd([DATES_PATH '/private']);
+%$
+%$ a = [1, 2];
+%$ b = [1, 2];
+%$
+%$ try
+%$     boolean = lessthan(a, b);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%$ cd(OPATH);
+%@eof:5
diff --git a/src/@dates/strings.m b/src/@dates/strings.m
index 0198d15..a6c9fc8 100644
--- a/src/@dates/strings.m
+++ b/src/@dates/strings.m
@@ -1,4 +1,4 @@
-function m = strings(o)
+function m = strings(o) % --*-- Unitary tests --*--
 
 % Returns a cell array of strings containing the dates
 %
@@ -28,3 +28,28 @@ m = cell(1,o.ndat());
 for i = 1:o.length()
     m(i) = { date2string(o.time(i,:), o.freq) };
 end
+
+%@test:1
+%$ % Define a dates objects
+%$ d = dates('1950Q1'):dates('1950Q3');
+%$
+%$ % Call the tested routine.
+%$ try
+%$     m = strings(d);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ % Check the results.
+%$ if t(1)
+%$     t(2) = iscell(m);
+%$     t(3) = dassert(m{1}, '1950Q1');
+%$     t(4) = dassert(m{2}, '1950Q2');
+%$     t(5) = dassert(m{3}, '1950Q3');
+%$     t(6) = dassert(length(m), 3);
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
diff --git a/src/@dates/subsasgn.m b/src/@dates/subsasgn.m
index b9cd166..5a49f79 100644
--- a/src/@dates/subsasgn.m
+++ b/src/@dates/subsasgn.m
@@ -1,4 +1,4 @@
-function val = subsasgn(val, idx, rhs)
+function val = subsasgn(val, idx, rhs) % --*-- Unitary tests --*--
 
 % Copyright (C) 2013-2014 Dynare Team
 %
@@ -15,4 +15,19 @@ function val = subsasgn(val, idx, rhs)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-error('dates::subsasgn: Members of dates class are private')
\ No newline at end of file
+error('dates::subsasgn: Members of dates class are private')
+
+%@test:1
+%$ % Define a dates objects
+%$ d = dates('1950Q1'):dates('1950Q3');
+%$
+%$ % Call the tested routine.
+%$ try
+%$     d(1) = dates('1950Q4');
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/src/@dates/vertcat.m b/src/@dates/vertcat.m
index 82344e2..901d975 100644
--- a/src/@dates/vertcat.m
+++ b/src/@dates/vertcat.m
@@ -1,4 +1,4 @@
-function o = vertcat(varargin)
+function o = vertcat(varargin) % --*-- Unitary tests --*--
     
 % Overloads the vertcat method for dates objects.
 %
@@ -34,4 +34,53 @@ if ~all(cellfun(@isdates,varargin))
     error('dates:vertcat:ArgCheck','All input arguments must be dates objects.')
 end
     
-o = horzcat(varargin{:});
\ No newline at end of file
+o = horzcat(varargin{:});
+
+%@test:1
+%$ % Define some dates
+%$ B1 = '1953Q4';
+%$ B2 = '1950Q2';
+%$ B3 = '1950Q1';
+%$ B4 = '1945Q3';
+%$ B5 = '2009Q2';
+%$
+%$ % Define expected results.
+%$ e.time = [1945 3; 1950 1; 1950 2; 1953 4; 2009 2];
+%$ e.freq = 4;
+%$
+%$ % Call the tested routine.
+%$ d = dates(B4,B3,B2);
+%$ try
+%$     d = [d; dates(B1); dates(B5)];
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ % Check the results.
+%$ if t(1)
+%$     t(2) = dassert(d.time,e.time);
+%$     t(3) = dassert(d.freq,e.freq);
+%$     t(4) = size(e.time,1)==d.ndat();
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
+%@test:2
+%$ % Define some dates
+%$ B2 = '1950Q2';
+%$ B3 = '1950Q1';
+%$ B4 = '1945Q3';
+%$
+%$ % Call the tested routine.
+%$ d = dates(B4,B3,B2);
+%$ try
+%$     d = [d; 1];
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%@eof:2
diff --git a/src/utilities/convert/date2string.m b/src/utilities/convert/date2string.m
index ebf5c01..ad2a3a9 100644
--- a/src/utilities/convert/date2string.m
+++ b/src/utilities/convert/date2string.m
@@ -1,4 +1,4 @@
-function s = date2string(varargin)
+function s = date2string(varargin) % --*-- Unitary tests --*--
  
 % Returns date as a string.
 %
@@ -51,4 +51,71 @@ end
 s = [num2str(time(1)) freq2string(freq)];
 if freq>1
     s = strcat(s, num2str(time(2)));
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ try
+%$     str = date2string(dates('1938Q4'));
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(str, '1938Q4');
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
+%@test:2
+%$ try
+%$     str = date2string(dates('1938Q4','1945Q3'));
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%@eof:2
+
+%@test:3
+%$ try
+%$     str = date2string([1938, 11], 12);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(str, '1938M11');
+%$ end
+%$
+%$ T = all(t);
+%@eof:3
+
+%@test:4
+%$ try
+%$     str = date2string([1938; 11], 12);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(str, '1938M11');
+%$ end
+%$
+%$ T = all(t);
+%@eof:4
+
+%@test:5
+%$ try
+%$     str = date2string([1938; 11], 4);
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%@eof:5
diff --git a/src/utilities/convert/freq2string.m b/src/utilities/convert/freq2string.m
index 2d12f8d..b7a6873 100644
--- a/src/utilities/convert/freq2string.m
+++ b/src/utilities/convert/freq2string.m
@@ -1,4 +1,4 @@
-function s = freq2string(freq)
+function s = freq2string(freq) % --*-- Unitary tests --*--
 
 % INPUTS 
 %  o freq     scalar integer,  equal to 1, 4, 12 or 52 (resp. annual, quaterly, monthly or weekly)
@@ -34,4 +34,36 @@ switch freq
     s = 'W';
   otherwise
     error('dates::freq2string: Unknown frequency!')
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ try
+%$     strY = freq2string(1);
+%$     strQ = freq2string(4);
+%$     strM = freq2string(12);
+%$     strW = freq2string(52);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(strY, 'Y');
+%$     t(3) = dassert(strQ, 'Q');
+%$     t(4) = dassert(strM, 'M');
+%$     t(5) = dassert(strW, 'W');
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
+%@test:2
+%$ try
+%$     str = freq2string(13);
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%@eof:2
diff --git a/src/utilities/convert/string2freq.m b/src/utilities/convert/string2freq.m
index ea04c39..8ec1c14 100644
--- a/src/utilities/convert/string2freq.m
+++ b/src/utilities/convert/string2freq.m
@@ -1,4 +1,4 @@
-function freq = string2freq(s)
+function freq = string2freq(s) % --*-- Unitary tests --*--
 
 % INPUTS 
 %  o s        character, equal to Y, Q, M or W (resp. annual, quaterly, monthly or weekly)
@@ -34,4 +34,36 @@ switch upper(s)
     freq = 52;
   otherwise
     error('dates::freq2string: Unknown frequency!')
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ try
+%$     nY = string2freq('Y');
+%$     nQ = string2freq('Q');
+%$     nM = string2freq('M');
+%$     nW = string2freq('W');
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(nY, 1);
+%$     t(3) = dassert(nQ, 4);
+%$     t(4) = dassert(nM, 12);
+%$     t(5) = dassert(nW, 52);
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
+%@test:2
+%$ try
+%$     n = string2freq('Z');
+%$     t(1) = false;
+%$ catch
+%$     t(1) = true;
+%$ end
+%$
+%$ T = all(t);
+%@eof:2
diff --git a/src/utilities/is/isdates.m b/src/utilities/is/isdates.m
index 33b6790..360eaf9 100644
--- a/src/utilities/is/isdates.m
+++ b/src/utilities/is/isdates.m
@@ -1,4 +1,4 @@
-function B = isdates(A)
+function B = isdates(A) % --*-- Unitary tests --*--
 
 % Tests if the input A is a dates object.
 
@@ -19,4 +19,79 @@ function B = isdates(A)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-B = isa(A,'dates');
\ No newline at end of file
+B = isa(A,'dates');
+
+%@test:1
+%$ try
+%$     boolean = isdates(dates('1950Q2'));
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
+%@test:2
+%$ try
+%$     boolean = isdates(dates());
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:2
+
+%@test:3
+%$ try
+%$     boolean = isdates(dates('1950Q2'):dates('1950Q4'));
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:3
+
+%@test:4
+%$ try
+%$     boolean = isdates(1);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%@eof:4
+
+%@test:5
+%$ try
+%$     boolean = isdates('1938M11');
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%@eof:5
\ No newline at end of file
diff --git a/src/utilities/is/isfreq.m b/src/utilities/is/isfreq.m
index f552bdc..880c204 100644
--- a/src/utilities/is/isfreq.m
+++ b/src/utilities/is/isfreq.m
@@ -1,4 +1,4 @@
-function B = isfreq(A)
+function B = isfreq(A) % --*-- Unitary tests --*--
 
 % Tests if A can be interpreted as a frequency.
 %
@@ -36,4 +36,79 @@ end
 
 if isnumeric(A) && isequal(length(A),1) && ismember(A,[1 4 12 52])
     B = true;
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ try
+%$     boolean = isfreq('w');
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
+%@test:2
+%$ try
+%$     boolean = isfreq('W');
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:2
+
+%@test:3
+%$ try
+%$     boolean = isfreq('M');
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:3
+
+%@test:4
+%$ try
+%$     boolean = isfreq('Q');
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:4
+
+%@test:5
+%$ try
+%$     boolean = isfreq('Y');
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:5
diff --git a/src/utilities/is/issubperiod.m b/src/utilities/is/issubperiod.m
index 5f7a756..ec4dd1f 100644
--- a/src/utilities/is/issubperiod.m
+++ b/src/utilities/is/issubperiod.m
@@ -1,4 +1,4 @@
-function C = issubperiod(A,B)
+function C = issubperiod(A,B) % --*-- Unitary tests --*--
 
 % Copyright (C) 2013 Dynare Team
 %
@@ -21,4 +21,49 @@ if isfreq(B)
     C = all(isint(A)) && all(A>=1) && all(A<=B);
 else
     error('issubperiod:: Second input argument must be equal to 1, 4, 12 or 52 (frequency)!')
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ try
+%$    b = issubperiod(1, 1);
+%$    t(1) = true;
+%$ catch
+%$    t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(b, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
+%@test:2
+%$ try
+%$    b = issubperiod(2, 4);
+%$    t(1) = true;
+%$ catch
+%$    t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(b, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:2
+
+%@test:3
+%$ try
+%$    b = issubperiod(6, 4);
+%$    t(1) = true;
+%$ catch
+%$    t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(b, false);
+%$ end
+%$
+%$ T = all(t);
+%@eof:3
\ No newline at end of file
diff --git a/src/utilities/missing/isint/isint.m b/src/utilities/missing/isint/isint.m
index 482d34b..73417cc 100644
--- a/src/utilities/missing/isint/isint.m
+++ b/src/utilities/missing/isint/isint.m
@@ -42,4 +42,88 @@ l = abs(fix(a)-a)<1e-15;
 if nargout>1
     c = find(l==true);
     d = find(l==false);
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ a = 1938;
+%$ try
+%$     boolean = isint(a);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
+%@test:2
+%$ a = pi;
+%$ try
+%$     boolean = isint(a);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%@eof:2
+
+%@test:3
+%$ a = '1';
+%$ try
+%$     boolean = isint(a);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(boolean, false);
+%$ end
+%$
+%$ T = all(t);
+%@eof:3
+
+%@test:4
+%$ a = [1; 2; 3];
+%$ try
+%$     [boolean, iV, iF]  = isint(a);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(all(boolean), true);
+%$     t(3) = dassert(isequal(iV, [1; 2; 3]), true);
+%$     t(4) = dassert(isempty(iF), true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:4
+
+%@test:5
+%$ a = [1; pi; 3];
+%$ try
+%$     [boolean, iV, iF]  = isint(a);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(all(boolean), false);
+%$     t(3) = dassert(isequal(iV, [1; 3]), true);
+%$     t(4) = dassert(isequal(iF, 2), true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:5
\ No newline at end of file
diff --git a/src/utilities/missing/shiftS/shiftS.m b/src/utilities/missing/shiftS/shiftS.m
index 2ebd4aa..c0c77e5 100644
--- a/src/utilities/missing/shiftS/shiftS.m
+++ b/src/utilities/missing/shiftS/shiftS.m
@@ -1,4 +1,4 @@
-function S = shiftS(S,n)
+function S = shiftS(S,n) % --*-- Unitary tests --*--
 
 % Removes the first n elements of a one dimensional cell array.
 
@@ -21,4 +21,39 @@ if length(S) >= n+1
     S = S(n+1:end);
 else
     S = {};
-end
\ No newline at end of file
+end
+
+%@test:1
+%$ Cell = {'1', '2', '3'};
+%$ try
+%$     Cell = shiftS(Cell,1);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(length(Cell), 2);
+%$     t(3) = dassert(Cell, {'2', '3'});
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
+%@test:1
+%$ Cell = {'1', '2', '3'};
+%$ try
+%$     Cell = shiftS(Cell,3);
+%$     t(1) = true;
+%$ catch
+%$     t(1) = false;
+%$ end
+%$
+%$ if t(1)
+%$     t(2) = dassert(length(Cell), 0);
+%$     t(3) = dassert(isequal(Cell, {}), true);
+%$ end
+%$
+%$ T = all(t);
+%@eof:1
+
-- 
GitLab