xref: /aoo4110/main/tools/test/tests.cxx (revision b1cdbd2c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_tools.hxx"
26 // autogenerated file with codegen.pl
27 
28 #include <testshl/simpleheader.hxx>
29 #include <rtl/math.hxx>
30 #include <tools/fract.hxx>
31 
32 #include <stdio.h>
33 
34 namespace tools
35 {
36 
37 class FractionTest : public CppUnit::TestFixture
38 {
39 public:
setUp()40     void setUp()
41     {
42     }
43 
tearDown()44     void tearDown()
45     {
46     }
47 
testFraction()48     void testFraction()
49     {
50         const Fraction aFract(1082130431,1073741824);
51         CPPUNIT_ASSERT_MESSAGE( "Fraction #1 not approximately equal to 1.007812499068677",
52                                 rtl::math::approxEqual((double)aFract,1.007812499068677) );
53 
54         Fraction aFract2( aFract );
55         aFract2.ReduceInaccurate(8);
56         CPPUNIT_ASSERT_MESSAGE( "Fraction #2 not 1",
57                                 aFract2.GetNumerator() == 1 &&
58                                 aFract2.GetDenominator() == 1 );
59 
60         Fraction aFract3( 0x7AAAAAAA, 0x35555555 );
61         CPPUNIT_ASSERT_MESSAGE( "Fraction #3 cancellation wrong",
62                                 aFract3.GetNumerator() == 0x7AAAAAAA &&
63                                 aFract3.GetDenominator() == 0x35555555 );
64         aFract3.ReduceInaccurate(30);
65         CPPUNIT_ASSERT_MESSAGE( "Fraction #3 ReduceInaccurate errorneously cut precision",
66                                 aFract3.GetNumerator() == 0x7AAAAAAA &&
67                                 aFract3.GetDenominator() == 0x35555555 );
68 
69         aFract3.ReduceInaccurate(29);
70         CPPUNIT_ASSERT_MESSAGE( "Fraction #3 reduce to 29 bits failed",
71                                 aFract3.GetNumerator() == 0x3D555555 &&
72                                 aFract3.GetDenominator() == 0x1AAAAAAA );
73 
74         aFract3.ReduceInaccurate(9);
75         CPPUNIT_ASSERT_MESSAGE( "Fraction #3 reduce to 9 bits failed",
76                                 aFract3.GetNumerator() == 0x0147 &&
77                                 aFract3.GetDenominator() == 0x008E );
78 
79         aFract3.ReduceInaccurate(1);
80         CPPUNIT_ASSERT_MESSAGE( "Fraction #3 reduce to 1 bit failed",
81                                 aFract3.GetNumerator() == 2 &&
82                                 aFract3.GetDenominator() == 1 );
83 
84         aFract3.ReduceInaccurate(0);
85         CPPUNIT_ASSERT_MESSAGE( "Fraction #3 reduce to 0 bits failed",
86                                 aFract3.GetNumerator() == 2 &&
87                                 aFract3.GetDenominator() == 1 );
88 
89 #if SAL_TYPES_SIZEOFLONG == 8
90 		Fraction aFract4(0x7AAAAAAAAAAAAAAA, 0x3555555555555555);
91 		CPPUNIT_ASSERT_MESSAGE( "Fraction #4 cancellation wrong",
92 						        aFract4.GetNumerator() == 0x7AAAAAAAAAAAAAAA &&
93 								aFract4.GetDenominator() == 0x3555555555555555 );
94 		aFract4.ReduceInaccurate(62);
95 		CPPUNIT_ASSERT_MESSAGE( "Fraction #4 ReduceInaccurate errorneously cut precision",
96 								aFract4.GetNumerator() == 0x7AAAAAAAAAAAAAAA &&
97 								aFract4.GetDenominator() == 0x3555555555555555 );
98 
99 		aFract4.ReduceInaccurate(61);
100 		CPPUNIT_ASSERT_MESSAGE( "Fraction #4 ReduceInaccurate reduce to 61 bit failed",
101 								aFract4.GetNumerator() == 0x3D55555555555555 &&
102 								aFract4.GetDenominator() == 0x1AAAAAAAAAAAAAAA );
103 #endif
104 	}
105 
106     CPPUNIT_TEST_SUITE(FractionTest);
107     CPPUNIT_TEST(testFraction);
108     CPPUNIT_TEST_SUITE_END();
109 };
110 
111 // -----------------------------------------------------------------------------
112 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(tools::FractionTest, "FractionTest");
113 } // namespace tools
114 
115 
116 // -----------------------------------------------------------------------------
117 
118 // this macro creates an empty function, which will called by the RegisterAllFunctions()
119 // to let the user the possibility to also register some functions by hand.
120 NOADDITIONAL;
121 
122