]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/test.cpp
Add minetest.get_mapgen_object to API
[dragonfireclient.git] / src / test.cpp
index f988b34f7bb15958ac3cae1e73556a6daf8aca49..b66f65dafc6841fa912932bd824e1a9baffa181a 100644 (file)
@@ -42,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 "clientserver.h" // LATEST_PROTOCOL_VERSION
+#include <algorithm>
 
 /*
        Asserts that the exception occurs
@@ -462,8 +463,8 @@ struct TestCompress: public TestBase
                                        <<os_decompressed.str().size()<<std::endl;
                        std::string str_decompressed = os_decompressed.str();
                        UTEST(str_decompressed.size() == data_in.size(), "Output size not"
-                                       " equal (output: %i, input: %i)",
-                                       str_decompressed.size(), data_in.size());
+                                       " equal (output: %u, input: %u)",
+                                       (unsigned int)str_decompressed.size(), (unsigned int)data_in.size());
                        for(u32 i=0; i<size && i<str_decompressed.size(); i++){
                                UTEST(str_decompressed[i] == data_in[i],
                                                "index out[%i]=%i differs from in[%i]=%i",
@@ -508,26 +509,26 @@ struct TestVoxelManipulator: public TestBase
                // An area that is 1 bigger in x+ and z-
                VoxelArea d(v3s16(-2,-2,-3), v3s16(3,2,2));
                
-               core::list<VoxelArea> aa;
+               std::list<VoxelArea> aa;
                d.diff(c, aa);
                
                // Correct results
-               core::array<VoxelArea> results;
+               std::vector<VoxelArea> results;
                results.push_back(VoxelArea(v3s16(-2,-2,-3),v3s16(3,2,-3)));
                results.push_back(VoxelArea(v3s16(3,-2,-2),v3s16(3,2,2)));
 
                UASSERT(aa.size() == results.size());
                
                infostream<<"Result of diff:"<<std::endl;
-               for(core::list<VoxelArea>::Iterator
-                               i = aa.begin(); i != aa.end(); i++)
+               for(std::list<VoxelArea>::const_iterator
+                               i = aa.begin(); i != aa.end(); ++i)
                {
                        i->print(infostream);
                        infostream<<std::endl;
                        
-                       s32 j = results.linear_search(*i);
-                       UASSERT(j != -1);
-                       results.erase(j, 1);
+                       std::vector<VoxelArea>::iterator j = std::find(results.begin(), results.end(), *i);
+                       UASSERT(j != results.end());
+                       results.erase(j);
                }
 
 
@@ -582,7 +583,7 @@ struct TestVoxelAlgorithms: public TestBase
                        }
                        VoxelArea a(v3s16(0,0,0), v3s16(2,2,2));
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, true, light_sources, ndef);
@@ -593,7 +594,7 @@ struct TestVoxelAlgorithms: public TestBase
                        }
                        v.setNodeNoRef(v3s16(0,0,0), MapNode(CONTENT_STONE));
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, true, light_sources, ndef);
@@ -602,7 +603,7 @@ struct TestVoxelAlgorithms: public TestBase
                                                == LIGHT_SUN);
                        }
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, false, light_sources, ndef);
@@ -612,7 +613,7 @@ struct TestVoxelAlgorithms: public TestBase
                        }
                        v.setNodeNoRef(v3s16(1,3,2), MapNode(CONTENT_STONE));
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, true, light_sources, ndef);
@@ -621,7 +622,7 @@ struct TestVoxelAlgorithms: public TestBase
                                                == 0);
                        }
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, false, light_sources, ndef);
@@ -635,14 +636,14 @@ struct TestVoxelAlgorithms: public TestBase
                                v.setNodeNoRef(v3s16(1,-1,2), n);
                        }
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, true, light_sources, ndef);
                                UASSERT(res.bottom_sunlight_valid == true);
                        }
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, false, light_sources, ndef);
@@ -654,14 +655,14 @@ struct TestVoxelAlgorithms: public TestBase
                                v.setNodeNoRef(v3s16(1,-1,2), n);
                        }
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, true, light_sources, ndef);
                                UASSERT(res.bottom_sunlight_valid == false);
                        }
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, false, light_sources, ndef);
@@ -669,7 +670,7 @@ struct TestVoxelAlgorithms: public TestBase
                        }
                        v.setNodeNoRef(v3s16(1,3,2), MapNode(CONTENT_IGNORE));
                        {
-                               core::map<v3s16, bool> light_sources;
+                               std::set<v3s16> light_sources;
                                voxalgo::setLight(v, a, 0, ndef);
                                voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
                                                v, a, true, light_sources, ndef);
@@ -697,16 +698,16 @@ struct TestVoxelAlgorithms: public TestBase
                                v.setNode(v3s16(1,1,2), n);
                        }
                        {
-                               core::map<v3s16, bool> light_sources;
-                               core::map<v3s16, u8> unlight_from;
+                               std::set<v3s16> light_sources;
+                               std::map<v3s16, u8> unlight_from;
                                voxalgo::clearLightAndCollectSources(v, a, LIGHTBANK_DAY,
                                                ndef, light_sources, unlight_from);
                                //v.print(dstream, ndef, VOXELPRINT_LIGHT_DAY);
                                UASSERT(v.getNode(v3s16(0,1,1)).getLight(LIGHTBANK_DAY, ndef)
                                                == 0);
-                               UASSERT(light_sources.find(v3s16(1,1,1)) != NULL);
+                               UASSERT(light_sources.find(v3s16(1,1,1)) != light_sources.end());
                                UASSERT(light_sources.size() == 1);
-                               UASSERT(unlight_from.find(v3s16(1,1,2)) != NULL);
+                               UASSERT(unlight_from.find(v3s16(1,1,2)) != unlight_from.end());
                                UASSERT(unlight_from.size() == 1);
                        }
                }
@@ -1292,26 +1293,56 @@ struct TestSocket: public TestBase
        void Run()
        {
                const int port = 30003;
-               UDPSocket socket;
-               socket.Bind(port);
 
-               const char sendbuffer[] = "hello world!";
-               socket.Send(Address(127,0,0,1,port), sendbuffer, sizeof(sendbuffer));
+               // IPv6 socket test
+               {
+                       UDPSocket socket6(true);
+                       socket6.Bind(port);
 
-               sleep_ms(50);
+                       const char sendbuffer[] = "hello world!";
+                       IPv6AddressBytes bytes;
+                       bytes.bytes[15] = 1;
+                       socket6.Send(Address(&bytes, port), sendbuffer, sizeof(sendbuffer));
+
+                       sleep_ms(50);
 
-               char rcvbuffer[256];
-               memset(rcvbuffer, 0, sizeof(rcvbuffer));
-               Address sender;
-               for(;;)
+                       char rcvbuffer[256];
+                       memset(rcvbuffer, 0, sizeof(rcvbuffer));
+                       Address sender;
+                       for(;;)
+                       {
+                               int bytes_read = socket6.Receive(sender, rcvbuffer, sizeof(rcvbuffer));
+                               if(bytes_read < 0)
+                                       break;
+                       }
+                       //FIXME: This fails on some systems
+                       UASSERT(strncmp(sendbuffer, rcvbuffer, sizeof(sendbuffer))==0);
+                       UASSERT(memcmp(sender.getAddress6().sin6_addr.s6_addr, Address(&bytes, 0).getAddress6().sin6_addr.s6_addr, 16) == 0);
+               }
+
+               // IPv4 socket test
                {
-                       int bytes_read = socket.Receive(sender, rcvbuffer, sizeof(rcvbuffer));
-                       if(bytes_read < 0)
-                               break;
+                       UDPSocket socket(false);
+                       socket.Bind(port);
+
+                       const char sendbuffer[] = "hello world!";
+                       socket.Send(Address(127,0,0,1,port), sendbuffer, sizeof(sendbuffer));
+
+                       sleep_ms(50);
+
+                       char rcvbuffer[256];
+                       memset(rcvbuffer, 0, sizeof(rcvbuffer));
+                       Address sender;
+                       for(;;)
+                       {
+                               int bytes_read = socket.Receive(sender, rcvbuffer, sizeof(rcvbuffer));
+                               if(bytes_read < 0)
+                                       break;
+                       }
+                       //FIXME: This fails on some systems
+                       UASSERT(strncmp(sendbuffer, rcvbuffer, sizeof(sendbuffer))==0);
+                       UASSERT(sender.getAddress().sin_addr.s_addr == Address(127,0,0,1, 0).getAddress().sin_addr.s_addr);
                }
-               //FIXME: This fails on some systems
-               UASSERT(strncmp(sendbuffer, rcvbuffer, sizeof(sendbuffer))==0);
-               UASSERT(sender.getAddress() == Address(127,0,0,1, 0).getAddress());
        }
 };
 
@@ -1411,12 +1442,12 @@ struct TestConnection: public TestBase
                Handler hand_client("client");
                
                infostream<<"** Creating server Connection"<<std::endl;
-               con::Connection server(proto_id, 512, 5.0, &hand_server);
+               con::Connection server(proto_id, 512, 5.0, false, &hand_server);
                server.Serve(30001);
                
                infostream<<"** Creating client Connection"<<std::endl;
-               con::Connection client(proto_id, 512, 5.0, &hand_client);
-
+               con::Connection client(proto_id, 512, 5.0, false, &hand_client);
+               
                UASSERT(hand_server.count == 0);
                UASSERT(hand_client.count == 0);
                
@@ -1451,7 +1482,7 @@ struct TestConnection: public TestBase
                // Server should not have added client yet
                UASSERT(hand_server.count == 0);
                
-               sleep_ms(50);
+               sleep_ms(100);
 
                try
                {
@@ -1771,6 +1802,10 @@ void run_tests()
                TEST(TestConnection);
                dout_con<<"=== END RUNNING UNIT TESTS FOR CONNECTION ==="<<std::endl;
        }
+
+       delete idef;
+       delete ndef;
+
        if(tests_failed == 0){
                infostream<<"run_tests(): "<<tests_failed<<" / "<<tests_run<<" tests failed."<<std::endl;
                infostream<<"run_tests() passed."<<std::endl;