MCPcopy Create free account
hub / github.com/catboost/catboost / Y_UNIT_TEST

Function Y_UNIT_TEST

library/cpp/expression/ut/expression_ut.cpp:20–152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

18
19Y_UNIT_TEST_SUITE(TCalcExpressionTest) {
20 Y_UNIT_TEST(TestCalcExpression) {
21 THashMap<TString, double> m;
22 m["mv"] = 32768;
23 m["big"] = 68719476736;
24 m["small"] = 1;
25 m["neg"] = -1000.;
26
27 UNIT_ASSERT_EQUAL(CalcExpression("1 == 1", m), 1);
28 UNIT_ASSERT_EQUAL(CalcExpression("1 == 0", m), 0);
29 UNIT_ASSERT_EQUAL(CalcExpression("1 > 0", m), 1);
30 UNIT_ASSERT_EQUAL(CalcExpression("(2 - 1) > 0", m), 1);
31 UNIT_ASSERT_EQUAL(CalcExpression("(2 - 1) > 1", m), 0);
32 UNIT_ASSERT_EQUAL(CalcExpression("2 - 2 - 2", m), -2);
33 UNIT_ASSERT_EQUAL(CalcExpression("!2", m), 0);
34 UNIT_ASSERT_VALUES_EQUAL(CalcExpression("0*neg", m), 0);
35 UNIT_ASSERT_VALUES_EQUAL(CalcExpression("1 * -1000", m), -1000);
36 UNIT_ASSERT_VALUES_EQUAL(CalcExpression("1 * +1000", m), 1000);
37 UNIT_ASSERT_VALUES_EQUAL(CalcExpression("small * +1000", m), 1000);
38 UNIT_ASSERT_VALUES_EQUAL(CalcExpression("small * -1000", m), -1000);
39 UNIT_ASSERT_VALUES_EQUAL(CalcExpression("small * -small", m), -1);
40 UNIT_ASSERT_VALUES_EQUAL(CalcExpression("(small + small) * -small", m), -2);
41 UNIT_ASSERT_EQUAL(CalcExpression("!small", m), 0);
42 UNIT_ASSERT_VALUES_EQUAL(CalcExpression("0*-1000", m), 0);
43 UNIT_ASSERT_VALUES_EQUAL(CalcExpression("1||0&&0", m), 0);
44
45 UNIT_ASSERT_EQUAL(CalcExpression("-2 + 2", m), 0);
46 UNIT_ASSERT_EQUAL(CalcExpression("mv&32768==32768", m), 1);
47
48 UNIT_ASSERT_EQUAL(CalcExpression("big&34359738368==big&68719476736", m), 0); //big & (1<<35) != big & 1 << 36
49 UNIT_ASSERT_EQUAL(CalcExpression("small&34359738369==1", m), 1);
50
51 UNIT_ASSERT_EQUAL(CalcExpression("(mv&32768==32768)||(mv&32768==32768)||(2 - 2 - 2)||(2 - 2 - 2)&&(mv&32768==32768)", m), 1);
52
53 m["a"] = 0.1;
54 m["size"] = 18;
55 UNIT_ASSERT_EQUAL(CalcExpression("(a*11) > 1", m), 1);
56 UNIT_ASSERT_EQUAL(CalcExpression("(9*a) > 1 && size > 20", m), 0);
57 UNIT_ASSERT_EQUAL(CalcExpression("2+2*2", m), 6);
58 UNIT_ASSERT_EQUAL(CalcExpression("2+2^3", m), 10);
59 UNIT_ASSERT_EQUAL(CalcExpression("2 - 20*2", m), -38);
60 UNIT_ASSERT_EQUAL(CalcExpression("1 #MIN# 2", m), 1);
61 UNIT_ASSERT_EQUAL(CalcExpression("2 #MIN# 1", m), 1);
62 UNIT_ASSERT_EQUAL(CalcExpression("1 #MAX# 2", m), 2);
63 UNIT_ASSERT_EQUAL(CalcExpression("2 #MAX# 1", m), 2);
64 UNIT_ASSERT_EQUAL(CalcExpression("2 #MAX# 1 #MIN# 3", m), 2);
65 UNIT_ASSERT_EQUAL(CalcExpression("2+2*2 #MAX# 2+2^3", m), 10);
66 UNIT_ASSERT_EQUAL(CalcExpression("2+2*2 #MIN# 2+2^3", m), 6);
67 UNIT_ASSERT_EQUAL(CalcExpression("1 < 0 #MAX# a + 100", m), 100.1);
68 UNIT_ASSERT_EQUAL(CalcExpression("(2*a^(-3)-2000)^2<=10^(-5)", m), 1); // comparison adds EPS to lhs
69 UNIT_ASSERT_EQUAL(CalcExpression("2*a^(-3)==2000", m), 1);
70 UNIT_ASSERT_EQUAL(IsNan(CalcExpression("0^0", m)), 1);
71 UNIT_ASSERT_EQUAL(IsNan(CalcExpression("0.0^0", m)), 1);
72 UNIT_ASSERT_EQUAL(CalcExpression("0.00001^0", m), 1);
73 UNIT_ASSERT_EQUAL(CalcExpression("0.0^0.00001", m), 0);
74
75 // Sum with boolean
76 UNIT_ASSERT_EQUAL(CalcExpression("2+(2==2)", m), 3);
77 UNIT_ASSERT_EQUAL(CalcExpression("2+(2==0)", m), 2);

Callers

nothing calls this directly

Calls 15

GetTokensWithPrefixMethod · 0.80
GetTokensWithSuffixMethod · 0.80
SetRegexMatcherMethod · 0.80
CalcExpressionFunction · 0.50
IsNanFunction · 0.50
maxFunction · 0.50
expFunction · 0.50
logFunction · 0.50
CalcExpressionStrFunction · 0.50
powFunction · 0.50
ToStringFunction · 0.50

Tested by

no test coverage detected