c577a61b53073d2a9f5744c89dd5e798739b1103
[AXE.git] / demos / acltest.cpp
1 /**************************************************************************
2 **  (c) Copyright 1999, Andromeda Technology & Automation
3 ***************************************************************************
4 ** MODULE INFORMATION *
5 ***********************
6 **      FILE NAME      : acltest.cpp
7 **      SYSTEM NAME    : AXE - Andromeda X-windows Encapsulation
8 **      VERSION NUMBER : $Revision: 1.6 $
9 **
10 **  DESCRIPTION      :  Test routine for non-X classes
11 **
12 **  EXPORTED OBJECTS : 
13 **  LOCAL    OBJECTS : 
14 **  MODULES  USED    :
15 ***************************************************************************
16 **  ADMINISTRATIVE INFORMATION *
17 ********************************
18 **      ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
19 **      CREATION DATE   : Feb 06, 1998
20 **      LAST UPDATE     : Jul 27, 2002
21 **************************************************************************/
22
23 /*****************************
24    $Log: acltest.cpp,v $
25    Revision 1.6  2002-11-04 07:25:00  arjen
26    Use proper namespace for iostream classes
27
28    Revision 1.5  2002/11/03 13:19:33  arjen
29    New functions - String::escape() and String::unescape()
30
31    Revision 1.4  2002/09/26 14:48:46  arjen
32    Use the std: namespace for STL objects
33
34    Revision 1.3  2002/09/02 06:18:12  arjen
35    Fixed some date and time conversion functions
36
37    Revision 1.2  2002/07/27 06:34:06  arjen
38    Removed the obsolete complex number test from acltest.
39    BUG FIX: testaxe crashed when no configuration file is available.
40
41    Revision 1.1  2002/07/25 08:01:18  arjen
42    First checkin, AXE release 0.2
43
44 *****************************/
45
46 static const char *RCSID = "$Id: acltest.cpp,v 1.6 2002-11-04 07:25:00 arjen Exp $";
47
48 #include "String.h"
49 #include "integer.h" 
50 #include "date.h"
51
52 int main()
53 {
54    String hello = "Hello there";
55    String points, pattern;
56
57    std::cout << hello << ",length= " << ~hello << "\n";
58    std::cout << "4th character = " << hello[3] << " (Changed to L)\n";
59    hello[3] = 'L';
60    
61    if ((char *)points)
62       std::cout  << "Points is not empty\n";
63    if (!points)
64       std::cout << "Points is empty\n";
65    points = "123456";
66
67    if ((char *)points)
68       std::cout  << "after assignment: Points is not empty\n";
69    if (!points)
70       std::cout << "after assignment: points is empty\n";
71
72    hello += points + String("!??");
73    std::cout << "Catenated: " << hello << ",length= " << ~hello << "\n";
74
75    std::cout << "Substring(10,3) = " << String(hello(10,3)) << "\n";
76
77    hello(10,3) = points;
78    std::cout << "hello(10,3)=points ->hello = " << hello << "\n";
79    std::cout << "Substring(8,9) = " << String(hello(8,9)) << "\n";
80
81    std::cout << "Converted to upper case: " << hello.upper() << "\n";
82    std::cout << "Converted to lower case: " << hello.lower() << "\n";
83
84    hello(8,9) = "__";
85    std::cout << "hello(8,9)=__ ->hello = " << hello << "\n";
86    hello(8,7) = "";
87    std::cout << "Removing with hello(8,7) = \"\": " << hello << "\n";
88    hello(8,0) = "ere ";
89    std::cout << "Inserting with hello(8,0) = \"ere \": " << hello << "\n";
90    hello(5, ~hello-5) = "";
91    std::cout << "Truncating with hello(5, ~hello-5) = \"\": " << hello << "\n";
92
93    std::cout << "String shifting:\n";
94    String x("abcdefgh");
95    String y;
96    y = x << 3;
97    std::cout << x << " << 3 = " << y << "\n";
98    y = x >> 3;
99    std::cout << x << " >> 3 = " << y << "\n";
100
101    std::cout << "\nInput a string:\n";
102    std::cin >> hello;
103    std::cout << hello << "\n\n";
104    std::cout << "\nAnd another one:\n";
105    std::cin >> pattern;
106    std::cout << pattern << "\n\n";
107    std::cout << "Second string found at position " << pattern.in(hello);
108    std::cout << " of first string.\n";
109     
110    std::cout << "Construct a string from an int: ";
111    String num(3737);
112    std::cout << num << "\n";
113
114    std::cout << "***********************\nEscape Test\n*********************\n";
115
116    x = "\a\b\f\n\r\t\v\"'\\\xC0\x02";
117    y = x.escape();
118    std::cout << "Escaped sequence = " << y << "\n";
119    if (y.unescape() == x)
120    {
121       std::cout << "Escape sequence converts back into original string.\n";
122    }
123    else
124    {
125       std::cout << "Escape sequence does NOT convert back into original string.\n";
126       x = y.unescape();
127       std::cout << x.escape() << "\n";
128    }
129
130    std::cout << "***********************\nInteger Test\n*********************\n";
131    integer a(2000000000), b(2048);
132    integer c;
133
134    std::cout << "a = " << a << ", b = " << b << "\n";
135    std::cout << "c = " << c << "\n";
136    c = b;
137    std::cout << "c = b : c = " << c << "\n";
138
139    std::cout << "***********************\nDate Test\n*********************\n";
140
141    date d1, d2(22,7,1964);
142    
143    std::cout << "Default constructor: " << d1 << ", with (d,m,y): " << d2 << "\n";
144    std::cout << "Enter a date: \n";
145    
146    String datestring;
147
148    std::cin  >> datestring;
149    d2 = date(datestring);
150
151    std::cout << datestring << " parses into (DD-MM-YYYY): " << d2 << "\n";
152    datestring = d2.format("%F");
153    std::cout << "Formatted date: " << datestring << "\n";
154
155    d1 = today();
156
157    std::cout << "Size of a date is " << sizeof(d1) << "\n";
158
159    std::cout << "365 days after " << d2 << " is " << d2 + 365 << "\n";
160    date d3(0,0,0);
161    d3 += 365;
162    std::cout << "365 days was converted to " << d3 << "\n";
163    std::cout << "Added to the date you entered: " << d2 + d3 << "\n";
164
165    std::cout << d2 << " == " << d1 << " is " << (d2 == d1) << "\n";
166    std::cout << d2 << " != " << d1 << " is " << (d2 != d1) << "\n";
167    std::cout << d2 << " >= " << d1 << " is " << (d2 >= d1) << "\n";
168    std::cout << d2 << " <= " << d1 << " is " << (d2 <= d1) << "\n";
169    std::cout << d2 << " >  " << d1 << " is " << (d2 >  d1) << "\n";
170    std::cout << d2 << " <  " << d1 << " is " << (d2 <  d1) << "\n";
171
172    std::cout << "difference is " << d2 - d1 << " days.\n\n";
173
174    std::cout << "***********************\nTime Test\n*********************\n";
175
176    hour t1, t2;
177
178    std::cout << "Default constructor: " << t1 << "\n";
179    t1 = hour(10, 50, 30);
180    std::cout << "With 10,50,30: " << t1 << "\n";
181    std::cout << "Enter a time: \n";
182
183    std::cin  >> datestring;
184    t2 = hour(datestring);
185
186    std::cout << datestring << " parses into (HH:MM:SS): " << t2 << "\n";
187
188    std::cout << "t1 + t2 = " << t1 + t2 << "\n";
189    std::cout << "t1 - t2 = " << t1 - t2 << "\n";
190    std::cout << "t2 - t1 = " << t2 - t1 << "\n";
191
192    d1 = today();
193    t1 = now();
194
195    std::cout << "\nThe time now is " << d1 << " " << t1 << "\n";
196    return 0;
197 }