AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
VehicleScalingUlduarTest.cpp File Reference

Tests for Ulduar vehicle gear scaling formula. More...

#include "gtest/gtest.h"
#include <algorithm>
#include <cmath>
#include <cstdint>

Go to the source code of this file.

Classes

class  UlduarVehicleScaleTest
 

Functions

 TEST_F (UlduarVehicleScaleTest, BaselineNoGear)
 
 TEST_F (UlduarVehicleScaleTest, MinimumScalingThreshold)
 
 TEST_F (UlduarVehicleScaleTest, NaxxramasEntryGear)
 
 TEST_F (UlduarVehicleScaleTest, NaxxramasBiSGear)
 
 TEST_F (UlduarVehicleScaleTest, Ulduar10Gear)
 
 TEST_F (UlduarVehicleScaleTest, Ulduar25Gear)
 
 TEST_F (UlduarVehicleScaleTest, UlduarBiSGear)
 
 TEST_F (UlduarVehicleScaleTest, ToCBiSGear)
 
 TEST_F (UlduarVehicleScaleTest, ICCBiSGear)
 
 TEST_F (UlduarVehicleScaleTest, RSBiSGear)
 
 TEST_F (UlduarVehicleScaleTest, AllEpicNoPenalty)
 
 TEST_F (UlduarVehicleScaleTest, OneRareItemPenalty)
 
 TEST_F (UlduarVehicleScaleTest, OneUncommonItemPenalty)
 
 TEST_F (UlduarVehicleScaleTest, MixedQualityPenalty)
 
 TEST_F (UlduarVehicleScaleTest, FloorAtLowItemLevel)
 
 TEST_F (UlduarVehicleScaleTest, FloorWithQualityPenalty)
 
 TEST_F (UlduarVehicleScaleTest, DemolisherHealthMatchesCsv)
 
 TEST_F (UlduarVehicleScaleTest, DemolisherDoTMatchesCsv)
 
 TEST_F (UlduarVehicleScaleTest, SiegeHealthMatchesCsv)
 
 TEST_F (UlduarVehicleScaleTest, ChopperHealthMatchesCsv)
 
 TEST_F (UlduarVehicleScaleTest, MonotonicWithSameQuality)
 
 TEST_F (UlduarVehicleScaleTest, MonotonicAmountWithSameQuality)
 

Detailed Description

Tests for Ulduar vehicle gear scaling formula.

Formula (from spell_gen_vehicle_scaling_aura in spell_generic.cpp): Vehicles: Salvaged Demolisher (33109), Salvaged Siege Engine, Salvaged Chopper

Definition in file VehicleScalingUlduarTest.cpp.

Function Documentation

◆ TEST_F() [1/22]

TEST_F ( UlduarVehicleScaleTest  ,
AllEpicNoPenalty   
)
150{
151 // 15 epic items at avg 200: totalAdjustedILvl = 15 * 200 = 3000
152 // (3000 - 2500) / 500 = 1.0 -> 0% baseline
153 float result = CalcUlduarVehicleScale(3000.0f);
154 EXPECT_FLOAT_EQ(result, 1.0f);
155 EXPECT_EQ(CalcUlduarVehicleScaleAmount(3000.0f), 0);
156}

◆ TEST_F() [2/22]

TEST_F ( UlduarVehicleScaleTest  ,
BaselineNoGear   
)
59{
60 // totalILvl = 2500 (e.g. 15 items at avg 166.67)
61 // Raw scaling 0, floored to 0.1 -> -90% (10% of base)
62 float result = CalcUlduarVehicleScale(2500.0f);
63 EXPECT_FLOAT_EQ(result, 0.1f);
64 EXPECT_EQ(CalcUlduarVehicleScaleAmount(2500.0f), -90);
65}

◆ TEST_F() [3/22]

TEST_F ( UlduarVehicleScaleTest  ,
ChopperHealthMatchesCsv   
)
230{
231 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(504000.0f, 2550.0f), 50400.0f);
232 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(504000.0f, 3195.0f), 700560.0f);
233 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(504000.0f, 3390.0f), 897120.0f);
234}

◆ TEST_F() [4/22]

TEST_F ( UlduarVehicleScaleTest  ,
DemolisherDoTMatchesCsv   
)
217{
218 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(120000.0f, 3195.0f), 166800.0f);
219 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(120000.0f, 3390.0f), 213600.0f);
220}

◆ TEST_F() [5/22]

TEST_F ( UlduarVehicleScaleTest  ,
DemolisherHealthMatchesCsv   
)
208{
209 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(630000.0f, 2550.0f), 63000.0f);
210 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(630000.0f, 3000.0f), 630000.0f);
211 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(630000.0f, 3195.0f), 875700.0f);
212 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(630000.0f, 3390.0f), 1121400.0f);
213 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(630000.0f, 3780.0f), 1612800.0f);
214}

◆ TEST_F() [6/22]

TEST_F ( UlduarVehicleScaleTest  ,
FloorAtLowItemLevel   
)
191{
192 // totalILvl < 2500 → result would be negative, floor to 0.1 -> -90%
193 float result = CalcUlduarVehicleScale(2400.0f);
194 EXPECT_FLOAT_EQ(result, 0.1f);
195 EXPECT_EQ(CalcUlduarVehicleScaleAmount(2400.0f), -90);
196}

◆ TEST_F() [7/22]

TEST_F ( UlduarVehicleScaleTest  ,
FloorWithQualityPenalty   
)
199{
200 // totalAdjustedILvl = 2400 (e.g. sum of quality-adjusted iLvl below 2500)
201 // (2400 - 2500) / 500 = -0.2 → floor to 0.1 -> -90%
202 float result = CalcUlduarVehicleScale(2400.0f);
203 EXPECT_FLOAT_EQ(result, 0.1f);
204 EXPECT_EQ(CalcUlduarVehicleScaleAmount(2400.0f), -90);
205}

◆ TEST_F() [8/22]

TEST_F ( UlduarVehicleScaleTest  ,
ICCBiSGear   
)
131{
132 // totalILvl = 4162 (avg 277.5 * 15 items, ICC BiS)
133 // (4162 - 2500) / 500 = 3.324 -> +232%
134 float result = CalcUlduarVehicleScale(4162.0f);
135 EXPECT_FLOAT_EQ(result, 3.324f);
136 EXPECT_EQ(CalcUlduarVehicleScaleAmount(4162.0f), 232);
137 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(630000.0f, 4162.0f), 2091600.0f);
138}

◆ TEST_F() [9/22]

TEST_F ( UlduarVehicleScaleTest  ,
MinimumScalingThreshold   
)
68{
69 // totalILvl = 2550 -> (2550-2500)/500 = 0.1, exactly at the floor
70 // -90% = 10% of base (CSV Demolisher HP 63000)
71 float result = CalcUlduarVehicleScale(2550.0f);
72 EXPECT_FLOAT_EQ(result, 0.1f);
73 EXPECT_EQ(CalcUlduarVehicleScaleAmount(2550.0f), -90);
74}

◆ TEST_F() [10/22]

TEST_F ( UlduarVehicleScaleTest  ,
MixedQualityPenalty   
)
177{
178 // 10 epic (200) + 3 rare (187) + 2 uncommon (174):
179 // totalAdjustedILvl = 10*200 + 3*187 + 2*174 = 2000 + 561 + 348 = 2909
180 // (2909 - 2500) / 500 = 409/500 = 0.818 -> round(-18.2) = -18%
181 float result = CalcUlduarVehicleScale(2909.0f);
182 EXPECT_FLOAT_EQ(result, 0.818f);
183 EXPECT_EQ(CalcUlduarVehicleScaleAmount(2909.0f), -18);
184}

◆ TEST_F() [11/22]

TEST_F ( UlduarVehicleScaleTest  ,
MonotonicAmountWithSameQuality   
)
248{
249 int32_t prev = CalcUlduarVehicleScaleAmount(2500.0f);
250 for (float totalILvl = 2510.0f; totalILvl <= 4000.0f; totalILvl += 10.0f)
251 {
252 int32_t curr = CalcUlduarVehicleScaleAmount(totalILvl);
253 EXPECT_GE(curr, prev) << "Amount dropped at totalILvl=" << totalILvl;
254 prev = curr;
255 }
256}

◆ TEST_F() [12/22]

TEST_F ( UlduarVehicleScaleTest  ,
MonotonicWithSameQuality   
)
237{
238 float prev = CalcUlduarVehicleScale(2500.0f);
239 for (float totalILvl = 2510.0f; totalILvl <= 4000.0f; totalILvl += 10.0f)
240 {
241 float curr = CalcUlduarVehicleScale(totalILvl);
242 EXPECT_GE(curr, prev) << "Scaling dropped at totalILvl=" << totalILvl;
243 prev = curr;
244 }
245}

◆ TEST_F() [13/22]

TEST_F ( UlduarVehicleScaleTest  ,
NaxxramasBiSGear   
)
86{
87 // totalILvl = 3000 (avg 200 * 15 items, Naxx BiS / Ulduar entry)
88 // (3000 - 2500) / 500 = 1.0 -> 0% (baseline, no change)
89 float result = CalcUlduarVehicleScale(3000.0f);
90 EXPECT_FLOAT_EQ(result, 1.0f);
91 EXPECT_EQ(CalcUlduarVehicleScaleAmount(3000.0f), 0);
92}

◆ TEST_F() [14/22]

TEST_F ( UlduarVehicleScaleTest  ,
NaxxramasEntryGear   
)
77{
78 // totalILvl = 2805 (avg 187 * 15 items, typical Naxx entry)
79 // (2805 - 2500) / 500 = 0.61 -> -39%
80 float result = CalcUlduarVehicleScale(2805.0f);
81 EXPECT_FLOAT_EQ(result, 0.61f);
82 EXPECT_EQ(CalcUlduarVehicleScaleAmount(2805.0f), -39);
83}

◆ TEST_F() [15/22]

TEST_F ( UlduarVehicleScaleTest  ,
OneRareItemPenalty   
)
159{
160 // 14 epic (200) + 1 rare (200 - 13 = 187): totalAdjustedILvl = 14*200 + 187 = 2987
161 // (2987 - 2500) / 500 = 487/500 = 0.974 -> round(-2.6) = -3%
162 float result = CalcUlduarVehicleScale(2987.0f);
163 EXPECT_FLOAT_EQ(result, 0.974f);
164 EXPECT_EQ(CalcUlduarVehicleScaleAmount(2987.0f), -3);
165}

◆ TEST_F() [16/22]

TEST_F ( UlduarVehicleScaleTest  ,
OneUncommonItemPenalty   
)
168{
169 // 14 epic (200) + 1 uncommon (200 - 26 = 174): totalAdjustedILvl = 14*200 + 174 = 2974
170 // (2974 - 2500) / 500 = 474/500 = 0.948 -> round(-5.2) = -5%
171 float result = CalcUlduarVehicleScale(2974.0f);
172 EXPECT_FLOAT_EQ(result, 0.948f);
173 EXPECT_EQ(CalcUlduarVehicleScaleAmount(2974.0f), -5);
174}

◆ TEST_F() [17/22]

TEST_F ( UlduarVehicleScaleTest  ,
RSBiSGear   
)
141{
142 // totalILvl = 4204 (avg 280.3 * 15 items, RS BiS)
143 // (4204 - 2500) / 500 = 3.408 -> round(240.8) = +241%
144 float result = CalcUlduarVehicleScale(4204.0f);
145 EXPECT_FLOAT_EQ(result, 3.408f);
146 EXPECT_EQ(CalcUlduarVehicleScaleAmount(4204.0f), 241);
147}

◆ TEST_F() [18/22]

TEST_F ( UlduarVehicleScaleTest  ,
SiegeHealthMatchesCsv   
)
223{
224 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(1134000.0f, 2550.0f), 113400.0f);
225 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(1134000.0f, 3195.0f), 1576260.0f);
226 EXPECT_FLOAT_EQ(CalcScaledVehicleValue(1134000.0f, 3390.0f), 2018520.0f);
227}

◆ TEST_F() [19/22]

TEST_F ( UlduarVehicleScaleTest  ,
ToCBiSGear   
)
122{
123 // totalILvl = 3884 (avg 258.9 * 15 items, ToGC BiS)
124 // (3884 - 2500) / 500 = 2.768 -> round(176.8) = +177%
125 float result = CalcUlduarVehicleScale(3884.0f);
126 EXPECT_FLOAT_EQ(result, 2.768f);
127 EXPECT_EQ(CalcUlduarVehicleScaleAmount(3884.0f), 177);
128}

◆ TEST_F() [20/22]

TEST_F ( UlduarVehicleScaleTest  ,
Ulduar10Gear   
)
95{
96 // totalILvl = 3195 (avg 213 * 15 items, Ulduar 10)
97 // (3195 - 2500) / 500 = 1.39 -> +39%
98 float result = CalcUlduarVehicleScale(3195.0f);
99 EXPECT_FLOAT_EQ(result, 1.39f);
100 EXPECT_EQ(CalcUlduarVehicleScaleAmount(3195.0f), 39);
101}

◆ TEST_F() [21/22]

TEST_F ( UlduarVehicleScaleTest  ,
Ulduar25Gear   
)
104{
105 // totalILvl = 3390 (avg 226 * 15 items, Ulduar 25)
106 // (3390 - 2500) / 500 = 1.78 -> +78%
107 float result = CalcUlduarVehicleScale(3390.0f);
108 EXPECT_FLOAT_EQ(result, 1.78f);
109 EXPECT_EQ(CalcUlduarVehicleScaleAmount(3390.0f), 78);
110}

◆ TEST_F() [22/22]

TEST_F ( UlduarVehicleScaleTest  ,
UlduarBiSGear   
)
113{
114 // totalILvl = 3780 (avg 252 * 15 items, Ulduar BiS)
115 // (3780 - 2500) / 500 = 2.56 -> +156%
116 float result = CalcUlduarVehicleScale(3780.0f);
117 EXPECT_FLOAT_EQ(result, 2.56f);
118 EXPECT_EQ(CalcUlduarVehicleScaleAmount(3780.0f), 156);
119}