#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
<<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",
// 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);
}
}
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);
}
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);
== 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);
}
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);
== 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);
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);
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);
}
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);
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);
}
}
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());
}
};
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);
// Server should not have added client yet
UASSERT(hand_server.count == 0);
- sleep_ms(50);
+ sleep_ms(100);
try
{
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;