Jack Hansdampf / mbed-mqtt-GSOE1

Dependents:   ESP8266MQTT

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TestTopicIdMap.cpp Source File

TestTopicIdMap.cpp

00001 /**************************************************************************************
00002  * Copyright (c) 2016, Tomoaki Yamaguchi
00003  *
00004  * All rights reserved. This program and the accompanying materials
00005  * are made available under the terms of the Eclipse Public License v1.0
00006  * and Eclipse Distribution License v1.0 which accompany this distribution.
00007  *
00008  * The Eclipse Public License is available at
00009  *    http://www.eclipse.org/legal/epl-v10.html
00010  * and the Eclipse Distribution License is available at
00011  *   http://www.eclipse.org/org/documents/edl-v10.php.
00012  *
00013  * Contributors:
00014  *    Tomoaki Yamaguchi - initial API and implementation 
00015  **************************************************************************************/
00016 #include <stdlib.h>
00017 #include <string.h>
00018 #include <cassert>
00019 #include "TestTopicIdMap.h"
00020 
00021 using namespace std;
00022 using namespace MQTTSNGW;
00023 
00024 TestTopicIdMap::TestTopicIdMap()
00025 {
00026     _map = new TopicIdMap();
00027 }
00028 
00029 TestTopicIdMap::~TestTopicIdMap()
00030 {
00031     delete _map;
00032 }
00033 
00034 
00035 bool TestTopicIdMap::testGetElement(uint16_t msgid, uint16_t id, MQTTSN_topicTypes type)
00036 {
00037     TopicIdMapElement* elm = _map->getElement((uint16_t)msgid );
00038     if ( elm )
00039     {
00040        //printf("msgid=%d id=%d type=%d\n", msgid, elm->getTopicId(), elm->getTopicType());
00041        return elm->getTopicId() == id && elm->getTopicType() == type;
00042     }
00043     //printf("msgid=%d\n", msgid);
00044     return false;
00045 }
00046 
00047 #define MAXID 30
00048 
00049 void TestTopicIdMap::test(void)
00050 {
00051     uint16_t id[MAXID];
00052 
00053     for ( int i = 0; i < MAXID; i++ )
00054     {
00055         id[i] = i + 1;
00056         _map->add(id[i], id[i], MQTTSN_TOPIC_TYPE_NORMAL);
00057     }
00058 
00059     for ( int i = 0; i < MAX_INFLIGHTMESSAGES * 2 + 1; i++ )
00060     {
00061         assert(testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_NORMAL));
00062     }
00063 
00064     for ( int i = MAX_INFLIGHTMESSAGES * 2 + 1; i < MAXID; i++ )
00065     {
00066         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_NORMAL));
00067     }
00068 
00069     for ( int i = 0; i < MAX_INFLIGHTMESSAGES * 2 + 1; i++ )
00070     {
00071         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_PREDEFINED));
00072     }
00073 
00074     for ( int i = 0; i < 5; i++ )
00075     {
00076         _map->erase(id[i]);
00077     }
00078     for ( int i = 0; i < 5; i++ )
00079     {
00080         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_NORMAL));
00081     }
00082 
00083     for ( int i = 5; i < MAX_INFLIGHTMESSAGES * 2 + 1; i++ )
00084     {
00085         assert(testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_NORMAL));
00086     }
00087 
00088     for ( int i = MAX_INFLIGHTMESSAGES * 2 + 1; i < MAXID; i++ )
00089     {
00090         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_NORMAL));
00091     }
00092 
00093     _map->clear();
00094 
00095     for ( int i = 0; i < MAXID; i++ )
00096     {
00097         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_NORMAL));
00098     }
00099 
00100     for ( int i = 0; i < MAXID; i++ )
00101     {
00102         _map->add(id[i], id[i], MQTTSN_TOPIC_TYPE_SHORT);
00103     }
00104 
00105     for ( int i = 0; i < MAX_INFLIGHTMESSAGES * 2 + 1; i++ )
00106     {
00107         assert(testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_SHORT));
00108     }
00109 
00110     for ( int i = MAX_INFLIGHTMESSAGES * 2 + 1; i < MAXID; i++ )
00111     {
00112         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_SHORT));
00113     }
00114 
00115     for ( int i = 0; i < MAX_INFLIGHTMESSAGES * 2 + 1; i++ )
00116     {
00117         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_NORMAL));
00118     }
00119 
00120     for ( int i = 0; i < 5; i++ )
00121     {
00122         _map->erase(id[i]);
00123     }
00124     for ( int i = 0; i < 5; i++ )
00125     {
00126         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_SHORT));
00127     }
00128 
00129     for ( int i = 5; i < MAX_INFLIGHTMESSAGES * 2 + 1; i++ )
00130     {
00131         assert(testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_SHORT));
00132     }
00133 
00134     for ( int i = MAX_INFLIGHTMESSAGES * 2 + 1; i < MAXID; i++ )
00135     {
00136         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_SHORT));
00137     }
00138 
00139     _map->clear();
00140 
00141     for ( int i = 0; i < MAXID; i++ )
00142     {
00143         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_SHORT));
00144     }
00145 
00146     for ( int i = 0; i < MAXID; i++ )
00147     {
00148         _map->add(id[i], id[i], MQTTSN_TOPIC_TYPE_PREDEFINED);
00149     }
00150 
00151     for ( int i = 0; i < MAX_INFLIGHTMESSAGES * 2 + 1; i++ )
00152     {
00153         assert(testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_PREDEFINED));
00154     }
00155 
00156     for ( int i = MAX_INFLIGHTMESSAGES * 2 + 1; i < MAXID; i++ )
00157     {
00158         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_PREDEFINED));
00159     }
00160 
00161     for ( int i = 0; i < MAX_INFLIGHTMESSAGES * 2 + 1; i++ )
00162     {
00163         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_SHORT));
00164     }
00165 
00166     for ( int i = 0; i < 5; i++ )
00167     {
00168         _map->erase(id[i]);
00169     }
00170     for ( int i = 0; i < 5; i++ )
00171     {
00172         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_PREDEFINED));
00173     }
00174 
00175     for ( int i = 5; i < MAX_INFLIGHTMESSAGES * 2 + 1; i++ )
00176     {
00177         assert(testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_PREDEFINED));
00178     }
00179 
00180     for ( int i = MAX_INFLIGHTMESSAGES * 2 + 1; i < MAXID; i++ )
00181     {
00182         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_PREDEFINED));
00183     }
00184 
00185     _map->clear();
00186 
00187     for ( int i = 0; i < MAXID; i++ )
00188     {
00189         assert(!testGetElement(id[i], id[i], MQTTSN_TOPIC_TYPE_PREDEFINED));
00190     }
00191     printf("[ OK ]\n");
00192 }
00193