189b56da7SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
389b56da7SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
489b56da7SAndrew Rist * or more contributor license agreements. See the NOTICE file
589b56da7SAndrew Rist * distributed with this work for additional information
689b56da7SAndrew Rist * regarding copyright ownership. The ASF licenses this file
789b56da7SAndrew Rist * to you under the Apache License, Version 2.0 (the
889b56da7SAndrew Rist * "License"); you may not use this file except in compliance
989b56da7SAndrew Rist * with the License. You may obtain a copy of the License at
1089b56da7SAndrew Rist *
1189b56da7SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
1289b56da7SAndrew Rist *
1389b56da7SAndrew Rist * Unless required by applicable law or agreed to in writing,
1489b56da7SAndrew Rist * software distributed under the License is distributed on an
1589b56da7SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1689b56da7SAndrew Rist * KIND, either express or implied. See the License for the
1789b56da7SAndrew Rist * specific language governing permissions and limitations
1889b56da7SAndrew Rist * under the License.
1989b56da7SAndrew Rist *
2089b56da7SAndrew Rist *************************************************************/
2189b56da7SAndrew Rist
2289b56da7SAndrew Rist
23cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
24cdf0e10cSrcweir #include "precompiled_tools.hxx"
25cdf0e10cSrcweir // autogenerated file with codegen.pl
26cdf0e10cSrcweir
27*7969c931SDamjan Jovanovic #include "gtest/gtest.h"
28cdf0e10cSrcweir #include <rtl/math.hxx>
29cdf0e10cSrcweir #include <tools/fract.hxx>
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include <stdio.h>
32cdf0e10cSrcweir
33cdf0e10cSrcweir namespace tools
34cdf0e10cSrcweir {
35cdf0e10cSrcweir
36*7969c931SDamjan Jovanovic class FractionTest : public ::testing::Test
37cdf0e10cSrcweir {
38cdf0e10cSrcweir public:
SetUp()39*7969c931SDamjan Jovanovic void SetUp()
40cdf0e10cSrcweir {
41cdf0e10cSrcweir }
42cdf0e10cSrcweir
TearDown()43*7969c931SDamjan Jovanovic void TearDown()
44cdf0e10cSrcweir {
45cdf0e10cSrcweir }
46*7969c931SDamjan Jovanovic };
47cdf0e10cSrcweir
TEST_F(FractionTest,testFraction)48*7969c931SDamjan Jovanovic TEST_F(FractionTest, testFraction)
49*7969c931SDamjan Jovanovic {
50*7969c931SDamjan Jovanovic const Fraction aFract(1082130431,1073741824);
51*7969c931SDamjan Jovanovic ASSERT_TRUE(rtl::math::approxEqual((double)aFract,1.007812499068677)) << "Fraction #1 not approximately equal to 1.007812499068677";
52cdf0e10cSrcweir
53*7969c931SDamjan Jovanovic Fraction aFract2( aFract );
54*7969c931SDamjan Jovanovic aFract2.ReduceInaccurate(8);
55*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract2.GetNumerator() == 1 &&
56*7969c931SDamjan Jovanovic aFract2.GetDenominator() == 1) << "Fraction #2 not 1";
57cdf0e10cSrcweir
58*7969c931SDamjan Jovanovic Fraction aFract3( 0x7AAAAAAA, 0x35555555 );
59*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract3.GetNumerator() == 0x7AAAAAAA &&
60*7969c931SDamjan Jovanovic aFract3.GetDenominator() == 0x35555555) << "Fraction #3 cancellation wrong";
61*7969c931SDamjan Jovanovic aFract3.ReduceInaccurate(30);
62*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract3.GetNumerator() == 0x7AAAAAAA &&
63*7969c931SDamjan Jovanovic aFract3.GetDenominator() == 0x35555555) << "Fraction #3 ReduceInaccurate errorneously cut precision";
64cdf0e10cSrcweir
65*7969c931SDamjan Jovanovic aFract3.ReduceInaccurate(29);
66*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract3.GetNumerator() == 0x3D555555 &&
67*7969c931SDamjan Jovanovic aFract3.GetDenominator() == 0x1AAAAAAA) << "Fraction #3 reduce to 29 bits failed";
68cdf0e10cSrcweir
69*7969c931SDamjan Jovanovic aFract3.ReduceInaccurate(9);
70*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract3.GetNumerator() == 0x0147 &&
71*7969c931SDamjan Jovanovic aFract3.GetDenominator() == 0x008E) << "Fraction #3 reduce to 9 bits failed";
72cdf0e10cSrcweir
73*7969c931SDamjan Jovanovic aFract3.ReduceInaccurate(1);
74*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract3.GetNumerator() == 2 &&
75*7969c931SDamjan Jovanovic aFract3.GetDenominator() == 1) << "Fraction #3 reduce to 1 bit failed";
76cdf0e10cSrcweir
77*7969c931SDamjan Jovanovic aFract3.ReduceInaccurate(0);
78*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract3.GetNumerator() == 2 &&
79*7969c931SDamjan Jovanovic aFract3.GetDenominator() == 1) << "Fraction #3 reduce to 0 bits failed";
80cdf0e10cSrcweir
81*7969c931SDamjan Jovanovic #if SAL_TYPES_SIZEOFLONG == 8
82*7969c931SDamjan Jovanovic Fraction aFract4(0x7AAAAAAAAAAAAAAA, 0x3555555555555555);
83*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract4.GetNumerator() == 0x7AAAAAAAAAAAAAAA &&
84*7969c931SDamjan Jovanovic aFract4.GetDenominator() == 0x3555555555555555) << "Fraction #4 cancellation wrong";
85*7969c931SDamjan Jovanovic aFract4.ReduceInaccurate(62);
86*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract4.GetNumerator() == 0x7AAAAAAAAAAAAAAA &&
87*7969c931SDamjan Jovanovic aFract4.GetDenominator() == 0x3555555555555555) << "Fraction #4 ReduceInaccurate errorneously cut precision";
88*7969c931SDamjan Jovanovic
89*7969c931SDamjan Jovanovic aFract4.ReduceInaccurate(61);
90*7969c931SDamjan Jovanovic ASSERT_TRUE(aFract4.GetNumerator() == 0x3D55555555555555 &&
91*7969c931SDamjan Jovanovic aFract4.GetDenominator() == 0x1AAAAAAAAAAAAAAA) << "Fraction #4 ReduceInaccurate reduce to 61 bit failed";
92*7969c931SDamjan Jovanovic #endif
93*7969c931SDamjan Jovanovic }
94*7969c931SDamjan Jovanovic
95*7969c931SDamjan Jovanovic } // namespace tools
96*7969c931SDamjan Jovanovic
97*7969c931SDamjan Jovanovic
main(int argc,char ** argv)98*7969c931SDamjan Jovanovic int main(int argc, char **argv)
99*7969c931SDamjan Jovanovic {
100*7969c931SDamjan Jovanovic ::testing::InitGoogleTest(&argc, argv);
101*7969c931SDamjan Jovanovic return RUN_ALL_TESTS();
102*7969c931SDamjan Jovanovic }
103