105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol/*
205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol * Copyright (C) 2016 The Android Open Source Project
305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol *
405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol * Licensed under the Apache License, Version 2.0 (the "License");
505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol * you may not use this file except in compliance with the License.
605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol * You may obtain a copy of the License at
705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol *
805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol *      http://www.apache.org/licenses/LICENSE-2.0
905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol *
1005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol * Unless required by applicable law or agreed to in writing, software
1105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol * distributed under the License is distributed on an "AS IS" BASIS,
1205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol * See the License for the specific language governing permissions and
1405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol * limitations under the License.
1505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol */
1605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
1705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol#include <algorithm>
1805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
1905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol#include "gtest/gtest.h"
2005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
2105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol#include "chre/core/request_multiplexer.h"
2205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
2305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignolusing chre::RequestMultiplexer;
2405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
2505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignolclass DummyRequest {
2605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol public:
2705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  DummyRequest() : DummyRequest(0) {}
2805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
2905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  DummyRequest(int priority) : mPriority(priority) {}
3005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
3105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  bool isEquivalentTo(const DummyRequest& request) const {
3205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    return (mPriority == request.mPriority);
3305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
3405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
352d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  bool mergeWith(const DummyRequest& request) {
362d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    bool newMaximal = false;
372d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    if (request.mPriority > mPriority) {
382d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol      mPriority = request.mPriority;
392d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol      newMaximal = true;
402d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    }
412d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol
422d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    return newMaximal;
4305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
4405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
4505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  int getPriority() const {
4605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    return mPriority;
4705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
4805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
4905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol private:
5005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  int mPriority;
5105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol};
5205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
5305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew RossignolTEST(RequestMultiplexer, DefaultRequestDoesNotCauseNewMaximal) {
5405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
5505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  DummyRequest request;
561de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
5705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  bool maximalRequestChanged;
581de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  ASSERT_TRUE(multiplexer.addRequest(request, &index, &maximalRequestChanged));
5905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_FALSE(maximalRequestChanged);
6005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 0);
6105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol}
6205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
6305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew RossignolTEST(RequestMultiplexer, FirstHighPriorityRequestCausesNewMaximal) {
6405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
6505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  DummyRequest request(10);
661de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
6705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  bool maximalRequestChanged;
681de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  ASSERT_TRUE(multiplexer.addRequest(request, &index, &maximalRequestChanged));
6905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_TRUE(maximalRequestChanged);
7005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
7105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol}
7205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
7305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew RossignolTEST(RequestMultiplexer, NewLowerPriorityRequestDoesNotCauseNewMaximal) {
7405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
751de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
7605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
7705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
7805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(10);
7905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
801de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
811de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
8205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
8305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
8405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
8505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
8605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
8705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(5);
8805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
891de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
901de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
9105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_FALSE(maximalRequestChanged);
9205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
9305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
9405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol}
9505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
9605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew RossignolTEST(RequestMultiplexer, AddOneRemoveMaximal) {
9705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
9805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  DummyRequest request(10);
991de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
10005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  bool maximalRequestChanged;
1011de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  ASSERT_TRUE(multiplexer.addRequest(request, &index, &maximalRequestChanged));
10205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_TRUE(maximalRequestChanged);
1031de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 10);
10405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
10505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
10605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  DummyRequest defaultRequest;
10705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  multiplexer.removeRequest(0, &maximalRequestChanged);
10805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_TRUE(maximalRequestChanged);
10905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_TRUE(multiplexer.getCurrentMaximalRequest()
11005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol      .isEquivalentTo(defaultRequest));
11105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_TRUE(multiplexer.getRequests().empty());
11205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol}
11305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
11405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew RossignolTEST(RequestMultiplexer, AddManyRemoveMaximal) {
11505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
1161de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
11705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
11805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
11905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(10);
12005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
1211de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
1221de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
12305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
1241de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 10);
12505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
12605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
12705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
12805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
12905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(5);
13005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
1311de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
1321de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
13305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_FALSE(maximalRequestChanged);
1341de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 5);
13505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
13605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
13705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
13805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
13905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(10);
14005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
1411de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
1421de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
14305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_FALSE(maximalRequestChanged);
1441de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 10);
14505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
14605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
14705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
14805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  bool maximalRequestChanged;
14905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  multiplexer.removeRequest(0, &maximalRequestChanged);
15005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_FALSE(maximalRequestChanged);
15105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
15205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[0].getPriority(), 5);
15305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[1].getPriority(), 10);
15405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol}
15505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
15605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew RossignolTEST(RequestMultiplexer, AddManyRemoveBeforeMaximalThenRemoveMaximal) {
15705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
1581de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
15905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
16005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
16105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(1);
16205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
1631de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
1641de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
16505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
1661de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 1);
16705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 1);
16805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
16905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
17005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
17105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(5);
17205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
1731de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
1741de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
17505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
1761de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 5);
17705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 5);
17805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
17905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
18005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
18105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(10);
18205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
1831de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
1841de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
18505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
1861de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 10);
18705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
18805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
18905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
19005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  bool maximalRequestChanged;
19105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  multiplexer.removeRequest(0, &maximalRequestChanged);
19205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_FALSE(maximalRequestChanged);
19305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
19405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[0].getPriority(), 5);
19505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[1].getPriority(), 10);
19605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
19705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  multiplexer.removeRequest(1, &maximalRequestChanged);
19805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_TRUE(maximalRequestChanged);
19905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 5);
20005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[0].getPriority(), 5);
20105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol}
20205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
20305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew RossignolTEST(RequestMultiplexer, AddManyRemoveAfterMaximalThenRemoveMaximal) {
20405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
2051de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
20605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
20705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
20805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(1);
20905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
2101de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
2111de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
21205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
2131de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 1);
21405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 1);
21505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
21605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
21705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
21805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(5);
21905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
2201de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
2211de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
22205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
2231de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 5);
22405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 5);
22505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
22605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
22705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
22805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(10);
22905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
2301de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
2311de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
23205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
2331de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 10);
23405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
23505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
23605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
23705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  {
23805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    DummyRequest request(5);
23905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    bool maximalRequestChanged;
2401de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
2411de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
24205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_FALSE(maximalRequestChanged);
2431de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 5);
24405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
24505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  }
24605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
24705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  bool maximalRequestChanged;
24805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  multiplexer.removeRequest(3, &maximalRequestChanged);
24905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_FALSE(maximalRequestChanged);
25005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
25105ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[0].getPriority(), 1);
25205ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[1].getPriority(), 5);
25305ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[2].getPriority(), 10);
25405ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol
25505ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  multiplexer.removeRequest(2, &maximalRequestChanged);
25605ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_TRUE(maximalRequestChanged);
25705ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 5);
25805ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[0].getPriority(), 1);
25905ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol  EXPECT_EQ(multiplexer.getRequests()[1].getPriority(), 5);
26005ae3086fc807d601355d1cdd5646c7c4aae4655Andrew Rossignol}
26136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
26236a2039ea80015d6f38f538204b131da41b41e4cAndrew RossignolTEST(RequestMultiplexer, AddManyUpdateWithLowerPriority) {
26336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
2641de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
26536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
26636a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
26736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(1);
26836a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
2691de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
2701de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
27136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
2721de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 1);
27336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 1);
27436a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
27536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
27636a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
27736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(5);
27836a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
2791de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
2801de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
28136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
2821de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 5);
28336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 5);
28436a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
28536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
28636a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
28736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(10);
28836a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
2891de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
2901de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
29136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
2921de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 10);
29336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
29436a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
29536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
29636a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
29736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(8);
29836a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
29936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    multiplexer.updateRequest(1, request, &maximalRequestChanged);
30036a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_FALSE(maximalRequestChanged);
30136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[1].getPriority(), 8);
30236a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
30336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
30436a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol}
30536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
30636a2039ea80015d6f38f538204b131da41b41e4cAndrew RossignolTEST(RequestMultiplexer, AddManyUpdateWithNewMaximalLowerPriority) {
30736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
3081de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
30936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
31036a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
31136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(1);
31236a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
3131de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
3141de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
31536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
3161de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 1);
31736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 1);
31836a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
31936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
32036a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
32136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(5);
32236a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
3231de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
3241de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
32536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
3261de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 5);
32736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 5);
32836a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
32936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
33036a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
33136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(10);
33236a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
3331de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
3341de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
33536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
3361de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 10);
33736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
33836a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
33936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
34036a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
34136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(8);
34236a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
34336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    multiplexer.updateRequest(2, request, &maximalRequestChanged);
34436a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
34536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[2].getPriority(), 8);
34636a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 8);
34736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
34836a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol}
34936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
35036a2039ea80015d6f38f538204b131da41b41e4cAndrew RossignolTEST(RequestMultiplexer, AddManyUpdateNewMaximal) {
35136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  RequestMultiplexer<DummyRequest> multiplexer;
3521de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol  size_t index;
35336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
35436a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
35536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(1);
35636a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
3571de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
3581de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
35936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
3601de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 1);
36136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 1);
36236a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
36336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
36436a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
36536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(5);
36636a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
3671de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
3681de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
36936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
3701de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 5);
37136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 5);
37236a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
37336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
37436a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
37536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(10);
37636a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
3771de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    ASSERT_TRUE(multiplexer.addRequest(request, &index,
3781de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol                                       &maximalRequestChanged));
37936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
3801de1c6c5fc1c743d3378d1cea36b8b151bd6aefbAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[index].getPriority(), 10);
38136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 10);
38236a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
38336a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol
38436a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  {
38536a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    DummyRequest request(20);
38636a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    bool maximalRequestChanged;
38736a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    multiplexer.updateRequest(1, request, &maximalRequestChanged);
38836a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_TRUE(maximalRequestChanged);
38936a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getRequests()[1].getPriority(), 20);
39036a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol    EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 20);
39136a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol  }
39236a2039ea80015d6f38f538204b131da41b41e4cAndrew Rossignol}
393cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung
394cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan ChungTEST(RequestMultiplexer, RemoveAllRequestsEmpty) {
395cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  RequestMultiplexer<DummyRequest> multiplexer;
396cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung
397cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  bool maximalRequestChanged;
398cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  multiplexer.removeAllRequests(&maximalRequestChanged);
399cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung
400cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  EXPECT_FALSE(maximalRequestChanged);
401cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 0);
402cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung}
403cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung
404cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan ChungTEST(RequestMultiplexer, RemoveAllRequestsNonEmpty) {
405cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  RequestMultiplexer<DummyRequest> multiplexer;
406cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  size_t index;
407cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung
408cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  {
409cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung    DummyRequest request(1);
410cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung    bool maximalRequestChanged;
411cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung    ASSERT_TRUE(multiplexer.addRequest(request, &index,
412cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung                                       &maximalRequestChanged));
413cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  }
414cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung
415cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  bool maximalRequestChanged;
416cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  multiplexer.removeAllRequests(&maximalRequestChanged);
417cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung
418cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  EXPECT_TRUE(maximalRequestChanged);
419cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  EXPECT_EQ(multiplexer.getCurrentMaximalRequest().getPriority(), 0);
420cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung}
421