]> git.lizzy.rs Git - minetest.git/blobdiff - src/test.cpp
Fix sign-compare compiler warnings in mg_ore.cpp
[minetest.git] / src / test.cpp
index 40943035d1287404acf382463fee4416ed0f6377..402bae95cb33277813d3d1e5e75134f281db0a75 100644 (file)
@@ -22,7 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "debug.h"
 #include "map.h"
 #include "player.h"
-#include "main.h"
 #include "socket.h"
 #include "network/connection.h"
 #include "serialization.h"
@@ -43,6 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "util/serialize.h"
 #include "noise.h" // PseudoRandom used for random data for compression
 #include "network/networkprotocol.h" // LATEST_PROTOCOL_VERSION
+#include "profiler.h"
 #include <algorithm>
 
 /*
@@ -147,15 +147,45 @@ struct TestBase
 
 struct TestUtilities: public TestBase
 {
+       inline float ref_WrapDegrees180(float f)
+       {
+               // This is a slower alternative to the wrapDegrees_180() function;
+               // used as a reference for testing
+               float value = fmodf(f + 180, 360);
+               if (value < 0)
+                       value += 360;
+               return value - 180;
+       }
+
+       inline float ref_WrapDegrees_0_360(float f)
+       {
+               // This is a slower alternative to the wrapDegrees_0_360() function;
+               // used as a reference for testing
+               float value = fmodf(f, 360);
+               if (value < 0)
+                       value += 360;
+               return value < 0 ? value + 360 : value;
+       }
+
+
        void Run()
        {
-               /*infostream<<"wrapDegrees(100.0) = "<<wrapDegrees(100.0)<<std::endl;
-               infostream<<"wrapDegrees(720.5) = "<<wrapDegrees(720.5)<<std::endl;
-               infostream<<"wrapDegrees(-0.5) = "<<wrapDegrees(-0.5)<<std::endl;*/
-               UASSERT(fabs(wrapDegrees(100.0) - 100.0) < 0.001);
-               UASSERT(fabs(wrapDegrees(720.5) - 0.5) < 0.001);
-               UASSERT(fabs(wrapDegrees(-0.5) - (-0.5)) < 0.001);
-               UASSERT(fabs(wrapDegrees(-365.5) - (-5.5)) < 0.001);
+               UASSERT(fabs(modulo360f(100.0) - 100.0) < 0.001);
+               UASSERT(fabs(modulo360f(720.5) - 0.5) < 0.001);
+               UASSERT(fabs(modulo360f(-0.5) - (-0.5)) < 0.001);
+               UASSERT(fabs(modulo360f(-365.5) - (-5.5)) < 0.001);
+
+               for (float f = -720; f <= -360; f += 0.25) {
+                       UASSERT(fabs(modulo360f(f) - modulo360f(f + 360)) < 0.001);
+               }
+
+               for (float f = -1440; f <= 1440; f += 0.25) {
+                       UASSERT(fabs(modulo360f(f) - fmodf(f, 360)) < 0.001);
+                       UASSERT(fabs(wrapDegrees_180(f) - ref_WrapDegrees180(f)) < 0.001);
+                       UASSERT(fabs(wrapDegrees_0_360(f) - ref_WrapDegrees_0_360(f)) < 0.001);
+                       UASSERT(wrapDegrees_0_360(fabs(wrapDegrees_180(f) - wrapDegrees_0_360(f))) < 0.001);
+               }
+
                UASSERT(lowercase("Foo bAR") == "foo bar");
                UASSERT(trim("\n \t\r  Foo bAR  \r\n\t\t  ") == "Foo bAR");
                UASSERT(trim("\n \t\r    \r\n\t\t  ") == "");
@@ -1908,13 +1938,12 @@ struct TestConnection: public TestBase
 
                try
                {
-                       u16 peer_id;
-                       SharedBuffer<u8> data;
-                       infostream<<"** running client.Receive()"<<std::endl;
-                       u32 size = client.Receive(peer_id, data);
-                       infostream<<"** Client received: peer_id="<<peer_id
-                                       <<", size="<<size
-                                       <<std::endl;
+                       NetworkPacket pkt;
+                       infostream << "** running client.Receive()" << std::endl;
+                       client.Receive(&pkt);
+                       infostream << "** Client received: peer_id=" << pkt.getPeerId()
+                                       << ", size=" << pkt.getSize()
+                                       << std::endl;
                }
                catch(con::NoIncomingDataException &e)
                {
@@ -1930,13 +1959,12 @@ struct TestConnection: public TestBase
 
                try
                {
-                       u16 peer_id;
-                       SharedBuffer<u8> data;
-                       infostream<<"** running server.Receive()"<<std::endl;
-                       u32 size = server.Receive(peer_id, data);
-                       infostream<<"** Server received: peer_id="<<peer_id
-                                       <<", size="<<size
-                                       <<std::endl;
+                       NetworkPacket pkt;
+                       infostream << "** running server.Receive()" << std::endl;
+                       server.Receive(&pkt);
+                       infostream<<"** Server received: peer_id=" << pkt.getPeerId()
+                                       << ", size=" << pkt.getSize()
+                                       << std::endl;
                }
                catch(con::NoIncomingDataException &e)
                {
@@ -1957,13 +1985,12 @@ struct TestConnection: public TestBase
                {
                        try
                        {
-                               u16 peer_id;
-                               SharedBuffer<u8> data;
-                               infostream<<"** running client.Receive()"<<std::endl;
-                               u32 size = client.Receive(peer_id, data);
-                               infostream<<"** Client received: peer_id="<<peer_id
-                                               <<", size="<<size
-                                               <<std::endl;
+                               NetworkPacket pkt;
+                               infostream << "** running client.Receive()" << std::endl;
+                               client.Receive(&pkt);
+                               infostream << "** Client received: peer_id=" << pkt.getPeerId()
+                                               << ", size=" << pkt.getSize()
+                                               << std::endl;
                        }
                        catch(con::NoIncomingDataException &e)
                        {
@@ -1975,13 +2002,12 @@ struct TestConnection: public TestBase
 
                try
                {
-                       u16 peer_id;
-                       SharedBuffer<u8> data;
-                       infostream<<"** running server.Receive()"<<std::endl;
-                       u32 size = server.Receive(peer_id, data);
-                       infostream<<"** Server received: peer_id="<<peer_id
-                                       <<", size="<<size
-                                       <<std::endl;
+                       NetworkPacket pkt;
+                       infostream << "** running server.Receive()" << std::endl;
+                       server.Receive(&pkt);
+                       infostream << "** Server received: peer_id=" << pkt.getPeerId()
+                                       << ", size=" << pkt.getSize()
+                                       << std::endl;
                }
                catch(con::NoIncomingDataException &e)
                {
@@ -1991,24 +2017,26 @@ struct TestConnection: public TestBase
                        Simple send-receive test
                */
                {
-                       NetworkPacket* pkt = new NetworkPacket((u8*) "Hello World !", 14, 0);
+                       NetworkPacket pkt;
+                       pkt.putRawPacket((u8*) "Hello World !", 14, 0);
 
-                       SharedBuffer<u8> sentdata = pkt->oldForgePacket();
+                       Buffer<u8> sentdata = pkt.oldForgePacket();
 
                        infostream<<"** running client.Send()"<<std::endl;
-                       client.Send(PEER_ID_SERVER, 0, pkt, true);
+                       client.Send(PEER_ID_SERVER, 0, &pkt, true);
 
                        sleep_ms(50);
 
-                       u16 peer_id;
-                       SharedBuffer<u8> recvdata;
+                       NetworkPacket recvpacket;
                        infostream << "** running server.Receive()" << std::endl;
-                       u32 size = server.Receive(peer_id, recvdata);
-                       infostream << "** Server received: peer_id=" << peer_id
-                                       << ", size=" << size
-                                       << ", data=" << (const char*)pkt->getU8Ptr(0)
+                       server.Receive(&recvpacket);
+                       infostream << "** Server received: peer_id=" << pkt.getPeerId()
+                                       << ", size=" << pkt.getSize()
+                                       << ", data=" << (const char*)pkt.getU8Ptr(0)
                                        << std::endl;
 
+                       Buffer<u8> recvdata = pkt.oldForgePacket();
+
                        UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0);
                }
 
@@ -2018,41 +2046,45 @@ struct TestConnection: public TestBase
                */
                {
                        const int datasize = 30000;
-                       NetworkPacket* pkt = new NetworkPacket(0, datasize);
-                       for(u16 i=0; i<datasize; i++){
-                               *pkt << (u8) i/4;
+                       NetworkPacket pkt(0, datasize);
+                       for (u16 i=0; i<datasize; i++) {
+                               pkt << (u8) i/4;
                        }
 
                        infostream<<"Sending data (size="<<datasize<<"):";
-                       for(int i=0; i<datasize && i<20; i++){
+                       for(int i=0; i<datasize && i<20; i++) {
                                if(i%2==0) infostream<<" ";
                                char buf[10];
-                               snprintf(buf, 10, "%.2X", ((int)((const char*)pkt->getU8Ptr(0))[i])&0xff);
+                               snprintf(buf, 10, "%.2X", ((int)((const char*)pkt.getU8Ptr(0))[i])&0xff);
                                infostream<<buf;
                        }
-                       if(datasize>20)
-                               infostream<<"...";
-                       infostream<<std::endl;
+                       if(datasize > 20)
+                               infostream << "...";
+                       infostream << std::endl;
 
-                       SharedBuffer<u8> sentdata = pkt->oldForgePacket();
+                       Buffer<u8> sentdata = pkt.oldForgePacket();
 
-                       server.Send(peer_id_client, 0, pkt, true);
+                       server.Send(peer_id_client, 0, &pkt, true);
 
                        //sleep_ms(3000);
 
-                       SharedBuffer<u8> recvdata;
-                       infostream<<"** running client.Receive()"<<std::endl;
+                       Buffer<u8> recvdata;
+                       infostream << "** running client.Receive()" << std::endl;
                        u16 peer_id = 132;
                        u16 size = 0;
                        bool received = false;
                        u32 timems0 = porting::getTimeMs();
-                       for(;;){
+                       for(;;) {
                                if(porting::getTimeMs() - timems0 > 5000 || received)
                                        break;
-                               try{
-                                       size = client.Receive(peer_id, recvdata);
+                               try {
+                                       NetworkPacket pkt;
+                                       client.Receive(&pkt);
+                                       size = pkt.getSize();
+                                       peer_id = pkt.getPeerId();
+                                       recvdata = pkt.oldForgePacket();
                                        received = true;
-                               }catch(con::NoIncomingDataException &e){
+                               } catch(con::NoIncomingDataException &e) {
                                }
                                sleep_ms(10);
                        }
@@ -2081,8 +2113,40 @@ struct TestConnection: public TestBase
                UASSERT(hand_client.last_id == 1);
                UASSERT(hand_server.count == 1);
                UASSERT(hand_server.last_id == 2);
+       }
+};
+
+struct TestProfiler : public TestBase
+{
+       void Run()
+       {
+               Profiler p;
+
+               p.avg("Test1", 1.f);
+               UASSERT(p.getValue("Test1") == 1.f);
+
+               p.avg("Test1", 2.f);
+               UASSERT(p.getValue("Test1") == 1.5f);
+
+               p.avg("Test1", 3.f);
+               UASSERT(p.getValue("Test1") == 2.f);
+
+               p.avg("Test1", 486.f);
+               UASSERT(p.getValue("Test1") == 123.f);
+
+               p.avg("Test1", 8);
+               UASSERT(p.getValue("Test1") == 100.f);
+
+               p.avg("Test1", 700);
+               UASSERT(p.getValue("Test1") == 200.f);
+
+               p.avg("Test1", 10000);
+               UASSERT(p.getValue("Test1") == 1600.f);
+
+               p.avg("Test2", 123.56);
+               p.avg("Test2", 123.58);
 
-               //assert(0);
+               UASSERT(p.getValue("Test2") == 123.57f);
        }
 };
 
@@ -2123,6 +2187,7 @@ void run_tests()
        TEST(TestCompress);
        TEST(TestSerialization);
        TEST(TestNodedefSerialization);
+       TEST(TestProfiler);
        TESTPARAMS(TestMapNode, ndef);
        TESTPARAMS(TestVoxelManipulator, ndef);
        TESTPARAMS(TestVoxelAlgorithms, ndef);