16 #include "tensorflow_serving/resources/resource_util.h"
20 #include <gmock/gmock.h>
21 #include <gtest/gtest.h>
22 #include "tensorflow/core/lib/core/status_test_util.h"
23 #include "tensorflow/core/platform/types.h"
24 #include "tensorflow_serving/test_util/test_util.h"
26 using ::tensorflow::serving::test_util::CreateProto;
27 using ::tensorflow::serving::test_util::EqualsProto;
29 namespace tensorflow {
33 class ResourceUtilTest :
public ::testing::Test {
35 ResourceUtilTest() : util_({{{
"main", 1}, {
"gpu", 2}}}) {}
41 TEST_F(ResourceUtilTest, VerifyValidity) {
43 TF_EXPECT_OK(util_.VerifyValidity(CreateProto<ResourceAllocation>(
"")));
46 TF_EXPECT_OK(util_.VerifyValidity(
47 CreateProto<ResourceAllocation>(
"resource_quantities { "
50 " kind: 'processing' "
54 TF_EXPECT_OK(util_.VerifyValidity(
55 CreateProto<ResourceAllocation>(
"resource_quantities { "
58 " kind: 'processing' "
62 "resource_quantities { "
71 TF_EXPECT_OK(util_.VerifyValidity(
72 CreateProto<ResourceAllocation>(
"resource_quantities { "
75 " device_instance { value: 0 } "
80 TF_EXPECT_OK(util_.VerifyValidity(
81 CreateProto<ResourceAllocation>(
"resource_quantities { "
84 " device_instance { value: 1 } "
92 .VerifyValidity(CreateProto<ResourceAllocation>(
93 "resource_quantities { "
95 " device: 'nonexistent_device' "
96 " kind: 'processing' "
102 .VerifyValidity(CreateProto<ResourceAllocation>(
103 "resource_quantities { "
106 " kind: 'processing' "
110 "resource_quantities { "
112 " device: 'nonexistent_device' "
121 .VerifyValidity(CreateProto<ResourceAllocation>(
122 "resource_quantities { "
125 " device_instance { value: 2 } "
135 CreateProto<ResourceAllocation>(
"resource_quantities { "
142 "resource_quantities { "
151 .VerifyValidity(CreateProto<ResourceAllocation>(
152 "resource_quantities { "
155 " device_instance { value: 0 } "
160 "resource_quantities { "
163 " device_instance { value: 0 } "
171 TEST_F(ResourceUtilTest, VerifyResourceValidity) {
173 TF_EXPECT_OK(util_.VerifyResourceValidity(
174 CreateProto<Resource>(
"device: 'main' "
175 "kind: 'processing' ")));
178 TF_EXPECT_OK(util_.VerifyResourceValidity(
179 CreateProto<Resource>(
"device: 'gpu' "
180 "device_instance { value: 0 } "
182 TF_EXPECT_OK(util_.VerifyResourceValidity(
183 CreateProto<Resource>(
"device: 'gpu' "
184 "device_instance { value: 1 } "
189 .VerifyResourceValidity(
190 CreateProto<Resource>(
"device: 'nonexistent_device' "
191 "kind: 'processing' "))
196 .VerifyResourceValidity(
197 CreateProto<Resource>(
"device: 'gpu' "
198 "device_instance { value: 2 } "
203 TEST_F(ResourceUtilTest, Normalize) {
204 EXPECT_THAT(util_.Normalize(CreateProto<ResourceAllocation>(
"")),
207 util_.Normalize(CreateProto<ResourceAllocation>(
"resource_quantities { "
210 " kind: 'processing' "
214 "resource_quantities { "
221 EqualsProto(
"resource_quantities { "
224 " kind: 'processing' "
229 util_.Normalize(CreateProto<ResourceAllocation>(
"resource_quantities { "
236 EqualsProto(
"resource_quantities { "
239 " device_instance { value: 0 } "
245 EXPECT_THAT(util_.Normalize(CreateProto<ResourceAllocation>(
246 "resource_quantities { "
249 " device_instance { value: 0 } "
254 EqualsProto(
"resource_quantities { "
257 " device_instance { value: 0 } "
264 TEST_F(ResourceUtilTest, IsNormalized) {
265 EXPECT_TRUE(util_.IsNormalized(CreateProto<ResourceAllocation>(
"")));
266 EXPECT_TRUE(util_.IsNormalized(
267 CreateProto<ResourceAllocation>(
"resource_quantities { "
270 " kind: 'processing' "
274 EXPECT_TRUE(util_.IsNormalized(
275 CreateProto<ResourceAllocation>(
"resource_quantities { "
278 " device_instance { value: 0 } "
279 " kind: 'processing' "
283 EXPECT_TRUE(util_.IsNormalized(
284 CreateProto<ResourceAllocation>(
"resource_quantities { "
287 " device_instance { value: 0 } "
288 " kind: 'processing' "
293 EXPECT_FALSE(util_.IsNormalized(
294 CreateProto<ResourceAllocation>(
"resource_quantities { "
297 " device_instance { value: 0 } "
298 " kind: 'processing' "
302 "resource_quantities { "
305 " device_instance { value: 0 } "
306 " kind: 'processing' "
310 EXPECT_FALSE(util_.IsNormalized(
311 CreateProto<ResourceAllocation>(
"resource_quantities { "
314 " kind: 'processing' "
320 TEST_F(ResourceUtilTest, IsBound) {
321 EXPECT_TRUE(util_.IsBound(CreateProto<ResourceAllocation>(
"")));
322 EXPECT_TRUE(util_.IsBound(
323 CreateProto<ResourceAllocation>(
"resource_quantities { "
326 " device_instance { value: 0 } "
327 " kind: 'processing' "
331 EXPECT_TRUE(util_.IsBound(
332 CreateProto<ResourceAllocation>(
"resource_quantities { "
335 " device_instance { value: 0 } "
340 "resource_quantities { "
343 " device_instance { value: 1 } "
344 " kind: 'processing' "
350 util_.IsBound(CreateProto<ResourceAllocation>(
"resource_quantities { "
353 " kind: 'processing' "
357 EXPECT_FALSE(util_.IsBound(
358 CreateProto<ResourceAllocation>(
"resource_quantities { "
361 " device_instance { value: 0 } "
366 "resource_quantities { "
369 " kind: 'processing' "
375 TEST_F(ResourceUtilTest, CreateBoundResource) {
376 EXPECT_THAT(util_.CreateBoundResource(
"gpu",
"ram", 2),
377 EqualsProto(
"device: 'gpu' "
378 "device_instance { value: 2 } "
381 util_.CreateBoundResource(
"gpu",
"ram" ),
382 EqualsProto(
"device: 'gpu' "
383 "device_instance { value: 0 } "
387 TEST_F(ResourceUtilTest, GetQuantity) {
388 const auto allocation = CreateProto<ResourceAllocation>(
389 "resource_quantities { "
392 " device_instance { value: 0 } "
397 "resource_quantities { "
400 " device_instance { value: 1 } "
401 " kind: 'processing' "
405 EXPECT_EQ(32, util_.GetQuantity(CreateProto<Resource>(
"device: 'main' "
408 EXPECT_EQ(32, util_.GetQuantity(
409 CreateProto<Resource>(
"device: 'main' "
410 "device_instance { value: 0 } "
413 EXPECT_EQ(100, util_.GetQuantity(
414 CreateProto<Resource>(
"device: 'gpu' "
415 "device_instance { value: 1 } "
416 "kind: 'processing' "),
419 0, util_.GetQuantity(CreateProto<Resource>(
"device: 'gpu' "
420 "device_instance { value: 1 } "
425 TEST_F(ResourceUtilTest, SetQuantity) {
426 const auto initial_allocation = CreateProto<ResourceAllocation>(
427 "resource_quantities { "
434 "resource_quantities { "
437 " device_instance { value: 1 } "
438 " kind: 'processing' "
444 ResourceAllocation allocation = initial_allocation;
445 util_.SetQuantity(CreateProto<Resource>(
"device: 'main' "
446 "device_instance { value: 0 } "
449 EXPECT_THAT(allocation, EqualsProto(
"resource_quantities { "
456 "resource_quantities { "
459 " device_instance { value: 1 } "
460 " kind: 'processing' "
467 ResourceAllocation allocation = initial_allocation;
468 util_.SetQuantity(CreateProto<Resource>(
"device: 'main' "
471 EXPECT_THAT(allocation, EqualsProto(
"resource_quantities { "
478 "resource_quantities { "
481 " device_instance { value: 1 } "
482 " kind: 'processing' "
489 ResourceAllocation allocation = initial_allocation;
490 util_.SetQuantity(CreateProto<Resource>(
"device: 'gpu' "
491 "device_instance { value: 1 } "
492 "kind: 'processing' "),
494 EXPECT_THAT(allocation, EqualsProto(
"resource_quantities { "
501 "resource_quantities { "
504 " device_instance { value: 1 } "
505 " kind: 'processing' "
512 ResourceAllocation allocation = initial_allocation;
513 util_.SetQuantity(CreateProto<Resource>(
"device: 'gpu' "
514 "device_instance { value: 1 } "
517 EXPECT_THAT(allocation, EqualsProto(
"resource_quantities { "
524 "resource_quantities { "
527 " device_instance { value: 1 } "
528 " kind: 'processing' "
532 "resource_quantities { "
535 " device_instance { value: 1 } "
543 TEST_F(ResourceUtilTest, AddEmpty) {
544 auto base = CreateProto<ResourceAllocation>(
"");
545 const auto to_add = CreateProto<ResourceAllocation>(
"");
546 util_.Add(to_add, &base);
547 EXPECT_THAT(base, EqualsProto(
""));
550 TEST_F(ResourceUtilTest, AddBasic) {
551 auto base = CreateProto<ResourceAllocation>(
552 "resource_quantities { "
555 " device_instance { value: 0 } "
556 " kind: 'processing' "
560 "resource_quantities { "
563 " device_instance { value: 0 } "
568 const auto to_add = CreateProto<ResourceAllocation>(
569 "resource_quantities { "
572 " device_instance { value: 0 } "
573 " kind: 'processing' "
577 "resource_quantities { "
584 util_.Add(to_add, &base);
585 EXPECT_THAT(base, EqualsProto(
"resource_quantities { "
588 " device_instance { value: 0 } "
589 " kind: 'processing' "
593 "resource_quantities { "
596 " device_instance { value: 0 } "
601 "resource_quantities { "
610 TEST_F(ResourceUtilTest, AddBoundAndUnbound) {
611 auto base = CreateProto<ResourceAllocation>(
612 "resource_quantities { "
619 "resource_quantities { "
622 " device_instance { value: 0 } "
627 const auto to_add = CreateProto<ResourceAllocation>(
628 "resource_quantities { "
635 "resource_quantities { "
638 " device_instance { value: 0 } "
643 "resource_quantities { "
646 " device_instance { value: 1 } "
651 util_.Add(to_add, &base);
652 EXPECT_THAT(base, EqualsProto(
"resource_quantities { "
659 "resource_quantities { "
662 " device_instance { value: 0 } "
667 "resource_quantities { "
670 " device_instance { value: 1 } "
677 TEST_F(ResourceUtilTest, SubtractEmpty) {
678 auto base = CreateProto<ResourceAllocation>(
"");
679 const auto to_subtract = CreateProto<ResourceAllocation>(
"");
680 EXPECT_TRUE(util_.Subtract(to_subtract, &base));
681 EXPECT_THAT(base, EqualsProto(
""));
684 TEST_F(ResourceUtilTest, SubtractBasic) {
685 auto base = CreateProto<ResourceAllocation>(
686 "resource_quantities { "
689 " device_instance { value: 0 } "
690 " kind: 'processing' "
694 "resource_quantities { "
697 " device_instance { value: 0 } "
702 "resource_quantities { "
709 const auto to_subtract = CreateProto<ResourceAllocation>(
710 "resource_quantities { "
713 " device_instance { value: 0 } "
714 " kind: 'processing' "
718 "resource_quantities { "
721 " device_instance { value: 0 } "
726 EXPECT_TRUE(util_.Subtract(to_subtract, &base));
727 EXPECT_THAT(base, EqualsProto(
"resource_quantities { "
730 " device_instance { value: 0 } "
731 " kind: 'processing' "
735 "resource_quantities { "
738 " device_instance { value: 0 } "
743 "resource_quantities { "
752 TEST_F(ResourceUtilTest, SubtractNegativeResult) {
753 const auto original_base = CreateProto<ResourceAllocation>(
754 "resource_quantities { "
757 " device_instance { value: 0 } "
758 " kind: 'processing' "
762 "resource_quantities { "
765 " device_instance { value: 0 } "
770 "resource_quantities { "
777 ResourceAllocation base = original_base;
778 const auto to_subtract = CreateProto<ResourceAllocation>(
779 "resource_quantities { "
782 " device_instance { value: 0 } "
783 " kind: 'processing' "
787 "resource_quantities { "
790 " device_instance { value: 0 } "
795 EXPECT_FALSE(util_.Subtract(to_subtract, &base));
797 EXPECT_THAT(base, EqualsProto(original_base));
800 TEST_F(ResourceUtilTest, SubtractNormalizeOutput) {
801 auto base = CreateProto<ResourceAllocation>(
802 "resource_quantities { "
805 " device_instance { value: 0 } "
806 " kind: 'processing' "
810 const auto to_subtract = CreateProto<ResourceAllocation>(
811 "resource_quantities { "
814 " device_instance { value: 0 } "
815 " kind: 'processing' "
819 EXPECT_TRUE(util_.Subtract(to_subtract, &base));
820 EXPECT_THAT(base, EqualsProto(
""));
823 TEST_F(ResourceUtilTest, SubtractBoundAndUnbound) {
824 auto base = CreateProto<ResourceAllocation>(
825 "resource_quantities { "
832 "resource_quantities { "
835 " device_instance { value: 0 } "
840 "resource_quantities { "
843 " device_instance { value: 1 } "
848 const auto to_subtract = CreateProto<ResourceAllocation>(
849 "resource_quantities { "
856 "resource_quantities { "
859 " device_instance { value: 0 } "
864 EXPECT_TRUE(util_.Subtract(to_subtract, &base));
865 EXPECT_THAT(base, EqualsProto(
"resource_quantities { "
872 "resource_quantities { "
875 " device_instance { value: 0 } "
880 "resource_quantities { "
883 " device_instance { value: 1 } "
890 TEST_F(ResourceUtilTest, MultiplyEmpty) {
891 auto base = CreateProto<ResourceAllocation>(
"");
892 util_.Multiply(2, &base);
893 EXPECT_THAT(base, EqualsProto(
""));
896 TEST_F(ResourceUtilTest, MultiplyBasic) {
897 auto base = CreateProto<ResourceAllocation>(
898 "resource_quantities { "
901 " device_instance { value: 0 } "
902 " kind: 'processing' "
906 "resource_quantities { "
909 " device_instance { value: 0 } "
914 "resource_quantities { "
921 util_.Multiply(2, &base);
922 EXPECT_THAT(base, EqualsProto(
"resource_quantities { "
925 " device_instance { value: 0 } "
926 " kind: 'processing' "
930 "resource_quantities { "
933 " device_instance { value: 0 } "
938 "resource_quantities { "
947 TEST_F(ResourceUtilTest, Equal) {
948 const std::vector<ResourceAllocation> values = {
949 CreateProto<ResourceAllocation>(
""),
950 CreateProto<ResourceAllocation>(
"resource_quantities { "
953 " device_instance { value: 1 } "
954 " kind: 'processing' "
958 CreateProto<ResourceAllocation>(
"resource_quantities { "
961 " device_instance { value: 0 } "
962 " kind: 'processing' "
966 CreateProto<ResourceAllocation>(
"resource_quantities { "
969 " device_instance { value: 1 } "
970 " kind: 'processing' "
974 CreateProto<ResourceAllocation>(
"resource_quantities { "
977 " device_instance { value: 0 } "
982 CreateProto<ResourceAllocation>(
"resource_quantities { "
985 " device_instance { value: 1 } "
986 " kind: 'processing' "
990 "resource_quantities { "
993 " device_instance { value: 0 } "
999 for (
int i = 0; i < values.size(); ++i) {
1000 for (
int j = 0; j < values.size(); ++j) {
1001 EXPECT_EQ(i == j, util_.Equal(values[i], values[j])) << i <<
" vs. " << j;
1002 EXPECT_EQ(j == i, util_.Equal(values[j], values[i])) << j <<
" vs. " << i;
1007 TEST_F(ResourceUtilTest, EqualOrderInsensitive) {
1008 const auto a = CreateProto<ResourceAllocation>(
1009 "resource_quantities { "
1012 " device_instance { value: 0 } "
1017 "resource_quantities { "
1020 " device_instance { value: 1 } "
1021 " kind: 'processing' "
1025 const auto b = CreateProto<ResourceAllocation>(
1026 "resource_quantities { "
1029 " device_instance { value: 1 } "
1030 " kind: 'processing' "
1034 "resource_quantities { "
1037 " device_instance { value: 0 } "
1042 EXPECT_TRUE(util_.Equal(a, b));
1043 EXPECT_TRUE(util_.Equal(b, a));
1046 TEST_F(ResourceUtilTest, ResourcesEqual) {
1047 EXPECT_TRUE(util_.ResourcesEqual(CreateProto<Resource>(
"device: 'gpu' "
1049 CreateProto<Resource>(
"device: 'gpu' "
1052 util_.ResourcesEqual(CreateProto<Resource>(
"device: 'gpu' "
1053 "device_instance { value: 1 } "
1055 CreateProto<Resource>(
"device: 'gpu' "
1056 "device_instance { value: 1 } "
1059 util_.ResourcesEqual(CreateProto<Resource>(
"device: 'main' "
1061 CreateProto<Resource>(
"device: 'main' "
1062 "device_instance { value: 0 } "
1064 EXPECT_FALSE(util_.ResourcesEqual(CreateProto<Resource>(
"device: 'gpu' "
1066 CreateProto<Resource>(
"device: 'main' "
1069 util_.ResourcesEqual(CreateProto<Resource>(
"device: 'gpu' "
1071 CreateProto<Resource>(
"device: 'gpu' "
1072 "kind: 'processing' ")));
1074 util_.ResourcesEqual(CreateProto<Resource>(
"device: 'gpu' "
1075 "device_instance { value: 0 } "
1077 CreateProto<Resource>(
"device: 'gpu' "
1078 "device_instance { value: 1 } "
1081 util_.ResourcesEqual(CreateProto<Resource>(
"device: 'gpu' "
1083 CreateProto<Resource>(
"device: 'gpu' "
1084 "device_instance { value: 1 } "
1088 TEST_F(ResourceUtilTest, LessThanOrEqualEmpty) {
1089 const auto a = CreateProto<ResourceAllocation>(
"");
1090 EXPECT_TRUE(util_.LessThanOrEqual(a, a));
1093 TEST_F(ResourceUtilTest, LessThanOrEqualOneEntry) {
1094 const auto a = CreateProto<ResourceAllocation>(
1095 "resource_quantities { "
1098 " device_instance { value: 1 } "
1099 " kind: 'processing' "
1103 const auto b = CreateProto<ResourceAllocation>(
1104 "resource_quantities { "
1107 " device_instance { value: 1 } "
1108 " kind: 'processing' "
1112 EXPECT_TRUE(util_.LessThanOrEqual(a, a));
1113 EXPECT_TRUE(util_.LessThanOrEqual(a, b));
1114 EXPECT_FALSE(util_.LessThanOrEqual(b, a));
1117 TEST_F(ResourceUtilTest, LessThanOrEqualTwoEntries) {
1118 const auto a = CreateProto<ResourceAllocation>(
1119 "resource_quantities { "
1122 " device_instance { value: 0 } "
1123 " kind: 'processing' "
1127 "resource_quantities { "
1130 " device_instance { value: 1 } "
1135 const auto b = CreateProto<ResourceAllocation>(
1136 "resource_quantities { "
1139 " device_instance { value: 0 } "
1140 " kind: 'processing' "
1144 "resource_quantities { "
1147 " device_instance { value: 1 } "
1152 EXPECT_TRUE(util_.LessThanOrEqual(a, a));
1153 EXPECT_TRUE(util_.LessThanOrEqual(b, a));
1154 EXPECT_FALSE(util_.LessThanOrEqual(a, b));
1157 TEST_F(ResourceUtilTest, LessThanOrEqualImplicitZero) {
1158 const auto a = CreateProto<ResourceAllocation>(
1159 "resource_quantities { "
1162 " device_instance { value: 0 } "
1163 " kind: 'processing' "
1167 "resource_quantities { "
1170 " device_instance { value: 1 } "
1175 const auto b = CreateProto<ResourceAllocation>(
1176 "resource_quantities { "
1179 " device_instance { value: 0 } "
1180 " kind: 'processing' "
1184 EXPECT_TRUE(util_.LessThanOrEqual(b, a));
1185 EXPECT_FALSE(util_.LessThanOrEqual(a, b));
1190 TEST_F(ResourceUtilTest, LessThanOrEqualUnbound) {
1191 const auto base = CreateProto<ResourceAllocation>(
1192 "resource_quantities { "
1195 " device_instance { value: 0 } "
1196 " kind: 'processing' "
1200 "resource_quantities { "
1203 " device_instance { value: 0 } "
1204 " kind: 'processing' "
1208 "resource_quantities { "
1211 " device_instance { value: 1 } "
1212 " kind: 'processing' "
1216 "resource_quantities { "
1219 " device_instance { value: 0 } "
1224 "resource_quantities { "
1227 " device_instance { value: 1 } "
1233 EXPECT_TRUE(util_.LessThanOrEqual(CreateProto<ResourceAllocation>(
""), base));
1234 EXPECT_TRUE(util_.LessThanOrEqual(
1235 CreateProto<ResourceAllocation>(
"resource_quantities { "
1238 " device_instance { value: 0 } "
1239 " kind: 'processing' "
1243 "resource_quantities { "
1251 EXPECT_TRUE(util_.LessThanOrEqual(
1252 CreateProto<ResourceAllocation>(
"resource_quantities { "
1260 EXPECT_FALSE(util_.LessThanOrEqual(
1261 CreateProto<ResourceAllocation>(
"resource_quantities { "
1269 EXPECT_TRUE(util_.LessThanOrEqual(
1270 CreateProto<ResourceAllocation>(
"resource_quantities { "
1273 " device_instance { value: 0 } "
1274 " kind: 'processing' "
1278 "resource_quantities { "
1286 EXPECT_TRUE(util_.LessThanOrEqual(
1287 CreateProto<ResourceAllocation>(
"resource_quantities { "
1290 " kind: 'processing' "
1294 "resource_quantities { "
1302 EXPECT_TRUE(util_.LessThanOrEqual(
1303 CreateProto<ResourceAllocation>(
"resource_quantities { "
1306 " device_instance { value: 0 } "
1307 " kind: 'processing' "
1311 "resource_quantities { "
1314 " device_instance { value: 1 } "
1315 " kind: 'processing' "
1319 "resource_quantities { "
1322 " kind: 'processing' "
1327 EXPECT_FALSE(util_.LessThanOrEqual(
1328 CreateProto<ResourceAllocation>(
"resource_quantities { "
1331 " kind: 'processing' "
1335 "resource_quantities { "
1343 EXPECT_FALSE(util_.LessThanOrEqual(
1344 CreateProto<ResourceAllocation>(
"resource_quantities { "
1347 " kind: 'processing' "
1351 "resource_quantities { "
1359 EXPECT_FALSE(util_.LessThanOrEqual(
1360 CreateProto<ResourceAllocation>(
"resource_quantities { "
1363 " device_instance { value: 0 } "
1364 " kind: 'processing' "
1368 "resource_quantities { "
1371 " device_instance { value: 1 } "
1372 " kind: 'processing' "
1376 "resource_quantities { "
1379 " kind: 'processing' "
1386 TEST_F(ResourceUtilTest, Overbind) {
1387 EXPECT_THAT(util_.Overbind(CreateProto<ResourceAllocation>(
"")),
1389 EXPECT_THAT(util_.Overbind(CreateProto<ResourceAllocation>(
1390 "resource_quantities { "
1393 " device_instance { value: 0 } "
1394 " kind: 'processing' "
1398 "resource_quantities { "
1401 " device_instance { value: 0 } "
1406 EqualsProto(
"resource_quantities { "
1409 " device_instance { value: 0 } "
1410 " kind: 'processing' "
1414 "resource_quantities { "
1417 " device_instance { value: 0 } "
1422 EXPECT_THAT(util_.Overbind(CreateProto<ResourceAllocation>(
1423 "resource_quantities { "
1430 "resource_quantities { "
1433 " device_instance { value: 1 } "
1434 " kind: 'processing' "
1438 EqualsProto(
"resource_quantities { "
1441 " device_instance { value: 0 } "
1446 "resource_quantities { "
1449 " device_instance { value: 1 } "
1454 "resource_quantities { "
1457 " device_instance { value: 1 } "
1458 " kind: 'processing' "
1462 EXPECT_THAT(util_.Overbind(CreateProto<ResourceAllocation>(
1463 "resource_quantities { "
1470 "resource_quantities { "
1473 " device_instance { value: 1 } "
1478 EqualsProto(
"resource_quantities { "
1481 " device_instance { value: 0 } "
1486 "resource_quantities { "
1489 " device_instance { value: 1 } "
1496 TEST_F(ResourceUtilTest, MaxEmpty) {
1497 const auto lhs = CreateProto<ResourceAllocation>(
"");
1498 const auto rhs = CreateProto<ResourceAllocation>(
"");
1499 EXPECT_THAT(util_.Max(lhs, rhs), EqualsProto(
""));
1502 TEST_F(ResourceUtilTest, MaxBound) {
1503 const auto lhs = CreateProto<ResourceAllocation>(
1504 "resource_quantities { "
1507 " device_instance { value: 0 } "
1508 " kind: 'processing' "
1512 "resource_quantities { "
1515 " device_instance { value: 0 } "
1520 const auto rhs = CreateProto<ResourceAllocation>(
1521 "resource_quantities { "
1524 " device_instance { value: 0 } "
1525 " kind: 'processing' "
1529 "resource_quantities { "
1532 " device_instance { value: 0 } "
1537 EXPECT_THAT(util_.Max(lhs, rhs),
1538 EqualsProto(
"resource_quantities { "
1541 " device_instance { value: 0 } "
1542 " kind: 'processing' "
1546 "resource_quantities { "
1549 " device_instance { value: 0 } "
1554 "resource_quantities { "
1557 " device_instance { value: 0 } "
1564 TEST_F(ResourceUtilTest, MaxBoundAndUnbound) {
1565 const auto lhs = CreateProto<ResourceAllocation>(
1566 "resource_quantities { "
1569 " device_instance { value: 0 } "
1570 " kind: 'processing' "
1574 "resource_quantities { "
1581 const auto rhs = CreateProto<ResourceAllocation>(
1582 "resource_quantities { "
1585 " device_instance { value: 0 } "
1586 " kind: 'processing' "
1590 "resource_quantities { "
1593 " device_instance { value: 0 } "
1598 EXPECT_THAT(util_.Max(lhs, rhs),
1599 EqualsProto(
"resource_quantities { "
1602 " device_instance { value: 0 } "
1603 " kind: 'processing' "
1607 "resource_quantities { "
1610 " device_instance { value: 0 } "
1615 "resource_quantities { "
1624 TEST_F(ResourceUtilTest, MaxUnbound) {
1625 const auto lhs = CreateProto<ResourceAllocation>(
1626 "resource_quantities { "
1629 " kind: 'processing' "
1633 "resource_quantities { "
1640 const auto rhs = CreateProto<ResourceAllocation>(
1641 "resource_quantities { "
1644 " kind: 'processing' "
1648 "resource_quantities { "
1655 EXPECT_THAT(util_.Max(lhs, rhs),
1656 EqualsProto(
"resource_quantities { "
1659 " device_instance { value: 0 } "
1660 " kind: 'processing' "
1664 "resource_quantities { "
1667 " device_instance { value: 0 } "
1674 TEST_F(ResourceUtilTest, MinEmpty) {
1675 const auto lhs = CreateProto<ResourceAllocation>(
"");
1676 const auto rhs = CreateProto<ResourceAllocation>(
"");
1677 EXPECT_THAT(util_.Min(lhs, rhs), EqualsProto(
""));
1680 TEST_F(ResourceUtilTest, MinBound) {
1681 const auto lhs = CreateProto<ResourceAllocation>(
1682 "resource_quantities { "
1685 " device_instance { value: 0 } "
1686 " kind: 'processing' "
1690 "resource_quantities { "
1693 " device_instance { value: 0 } "
1698 const auto rhs = CreateProto<ResourceAllocation>(
1699 "resource_quantities { "
1702 " device_instance { value: 0 } "
1703 " kind: 'processing' "
1707 "resource_quantities { "
1710 " device_instance { value: 0 } "
1715 EXPECT_THAT(util_.Min(lhs, rhs),
1716 EqualsProto(
"resource_quantities { "
1719 " device_instance { value: 0 } "
1720 " kind: 'processing' "
1726 TEST_F(ResourceUtilTest, MinBoundAndUnbound) {
1727 const auto lhs = CreateProto<ResourceAllocation>(
1728 "resource_quantities { "
1731 " device_instance { value: 0 } "
1732 " kind: 'processing' "
1736 "resource_quantities { "
1743 const auto rhs = CreateProto<ResourceAllocation>(
1744 "resource_quantities { "
1747 " device_instance { value: 0 } "
1748 " kind: 'processing' "
1752 "resource_quantities { "
1755 " device_instance { value: 0 } "
1760 EXPECT_THAT(util_.Min(lhs, rhs),
1761 EqualsProto(
"resource_quantities { "
1764 " device_instance { value: 0 } "
1765 " kind: 'processing' "
1771 TEST_F(ResourceUtilTest, MinUnbound) {
1772 const auto lhs = CreateProto<ResourceAllocation>(
1773 "resource_quantities { "
1776 " kind: 'processing' "
1780 "resource_quantities { "
1787 const auto rhs = CreateProto<ResourceAllocation>(
1788 "resource_quantities { "
1791 " kind: 'processing' "
1795 "resource_quantities { "
1802 EXPECT_THAT(util_.Min(lhs, rhs),
1803 EqualsProto(
"resource_quantities { "
1806 " device_instance { value: 0 } "
1807 " kind: 'processing' "
1811 "resource_quantities { "
1814 " device_instance { value: 0 } "
1821 TEST_F(ResourceUtilTest, OverrideDeviceValidity) {
1822 const auto base_resource = CreateProto<ResourceAllocation>(
1823 "resource_quantities { "
1826 " kind: 'processing' "
1830 "resource_quantities { "
1837 const auto valid_override_resource = CreateProto<ResourceAllocation>(
1838 "resource_quantities { "
1841 " kind: 'processing' "
1845 "resource_quantities { "
1852 const auto invalid_override_resource = CreateProto<ResourceAllocation>(
1853 "resource_quantities { "
1856 " kind: 'processing' "
1860 "resource_quantities { "
1867 TF_EXPECT_OK(util_.VerifyOverrideDeviceValidity(base_resource,
1868 valid_override_resource));
1870 .VerifyOverrideDeviceValidity(base_resource,
1871 invalid_override_resource)