1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4 Copyright (C) 2010 Manas Bhatt
5
6 This file is part of QuantLib, a free-software/open-source library
7 for financial quantitative analysts and developers - http://quantlib.org/
8
9 QuantLib is free software: you can redistribute it and/or modify it
10 under the terms of the QuantLib license. You should have received a
11 copy of the license along with this program; if not, please email
12 <quantlib-dev@lists.sf.net>. The license is also available online at
13 <http://quantlib.org/license.shtml>.
14
15 This program is distributed in the hope that it will be useful, but WITHOUT
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17 FOR A PARTICULAR PURPOSE. See the license for more details.
18*/
19
20#include "commodityunitofmeasure.hpp"
21#include "utilities.hpp"
22#include <ql/experimental/commodities/unitofmeasureconversionmanager.hpp>
23#include <ql/experimental/commodities/petroleumunitsofmeasure.hpp>
24
25using namespace QuantLib;
26using namespace boost::unit_test_framework;
27
28void CommodityUnitOfMeasureTest::testDirect() {
29
30 BOOST_TEST_MESSAGE("Testing direct commodity unit of measure conversions...");
31
32 UnitOfMeasureConversionManager& UOMManager =
33 UnitOfMeasureConversionManager::instance();
34
35 //MB to BBL
36 Quantity actual =
37 UnitOfMeasureConversion(NullCommodityType(), MBUnitOfMeasure(),
38 BarrelUnitOfMeasure(), 1000)
39 .convert(quantity: Quantity(NullCommodityType(), MBUnitOfMeasure(), 1000));
40 Quantity calc =
41 UOMManager.lookup(commodityType: NullCommodityType(), BarrelUnitOfMeasure(),
42 MBUnitOfMeasure(), type: UnitOfMeasureConversion::Direct)
43 .convert(quantity: Quantity(NullCommodityType(), MBUnitOfMeasure(), 1000));
44
45 if (!close(calc,actual)) {
46 BOOST_FAIL("Wrong result for MB to BBL Conversion: \n"
47 << " actual: " << actual << "\n"
48 << " calculated: " << calc);
49 }
50
51 //BBL to Gallon
52 actual =
53 UnitOfMeasureConversion(NullCommodityType(), BarrelUnitOfMeasure(),
54 GallonUnitOfMeasure(), 42)
55 .convert(quantity: Quantity(NullCommodityType(), GallonUnitOfMeasure(), 1000));
56 calc =
57 UOMManager.lookup(commodityType: NullCommodityType(), BarrelUnitOfMeasure(),
58 GallonUnitOfMeasure(),
59 type: UnitOfMeasureConversion::Direct)
60 .convert(quantity: Quantity(NullCommodityType(), GallonUnitOfMeasure(), 1000));
61
62 if (!close(calc,actual)) {
63 BOOST_FAIL("Wrong result for BBL to Gallon Conversion: \n"
64 << " actual: " << actual << "\n"
65 << " calculated: " << calc);
66 }
67
68 //BBL to Litre
69 actual =
70 UnitOfMeasureConversion(NullCommodityType(), BarrelUnitOfMeasure(),
71 LitreUnitOfMeasure(), 158.987)
72 .convert(quantity: Quantity(NullCommodityType(), LitreUnitOfMeasure(), 1000));
73 calc =
74 UOMManager.lookup(commodityType: NullCommodityType(),BarrelUnitOfMeasure(),
75 LitreUnitOfMeasure(),
76 type: UnitOfMeasureConversion::Direct)
77 .convert(quantity: Quantity(NullCommodityType(), LitreUnitOfMeasure(), 1000));
78
79 if (!close(calc,actual)) {
80 BOOST_FAIL("Wrong result for BBL to Litre Conversion: \n"
81 << " actual: " << actual << "\n"
82 << " calculated: " << calc);
83 }
84
85 //BBL to KL
86 actual =
87 UnitOfMeasureConversion(NullCommodityType(), KilolitreUnitOfMeasure(),
88 BarrelUnitOfMeasure(), 6.28981)
89 .convert(quantity: Quantity(NullCommodityType(),KilolitreUnitOfMeasure(),1000));
90 calc =
91 UOMManager.lookup(commodityType: NullCommodityType(),BarrelUnitOfMeasure(),
92 KilolitreUnitOfMeasure(),
93 type: UnitOfMeasureConversion::Direct)
94 .convert(quantity: Quantity(NullCommodityType(),KilolitreUnitOfMeasure(),1000));
95
96 if (!close(calc,actual)) {
97 BOOST_FAIL("Wrong result for BBL to KiloLitre Conversion: \n"
98 << " actual: " << actual << "\n"
99 << " calculated: " << calc);
100 }
101
102 //MB to Gallon
103 actual =
104 UnitOfMeasureConversion(NullCommodityType(), GallonUnitOfMeasure(),
105 MBUnitOfMeasure(), 42000)
106 .convert(quantity: Quantity(NullCommodityType(),MBUnitOfMeasure(),1000));
107 calc =
108 UOMManager.lookup(commodityType: NullCommodityType(),GallonUnitOfMeasure(),
109 MBUnitOfMeasure(), type: UnitOfMeasureConversion::Direct)
110 .convert(quantity: Quantity(NullCommodityType(),MBUnitOfMeasure(),1000));
111
112 if (!close(calc,actual)) {
113 BOOST_FAIL("Wrong result for MB to Gallon Conversion: \n"
114 << " actual: " << actual << "\n"
115 << " calculated: " << calc);
116 }
117
118 //Gallon to Litre
119 actual =
120 UnitOfMeasureConversion(NullCommodityType(), LitreUnitOfMeasure(),
121 GallonUnitOfMeasure(), 3.78541)
122 .convert(quantity: Quantity(NullCommodityType(),LitreUnitOfMeasure(),1000));
123 calc =
124 UOMManager.lookup(commodityType: NullCommodityType(),GallonUnitOfMeasure(),
125 LitreUnitOfMeasure(),
126 type: UnitOfMeasureConversion::Direct)
127 .convert(quantity: Quantity(NullCommodityType(),LitreUnitOfMeasure(),1000));
128
129 if (!close(calc,actual)) {
130 BOOST_FAIL("Wrong result for Gallon to Litre Conversion: \n"
131 << " actual: " << actual << "\n"
132 << " calculated: " << calc);
133 }
134}
135
136test_suite* CommodityUnitOfMeasureTest::suite() {
137 auto* suite = BOOST_TEST_SUITE("Commodity Unit Of Measure tests");
138 suite->add(QUANTLIB_TEST_CASE(&CommodityUnitOfMeasureTest::testDirect));
139 return suite;
140}
141
142

source code of quantlib/test-suite/commodityunitofmeasure.cpp