Mercurial > hg > orthanc-stone
comparison UnitTestsSources/GenericToolboxTests.cpp @ 1748:b6a6ad64192a
FastParseVector : manually written code to parse strings like 3.1315\-1.2e12\2344.5\123 into boost::numeric::ublas::vector<double> + tests
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Mon, 22 Feb 2021 14:55:13 +0100 |
parents | 9ac2a65d4172 |
children | 63e893267c98 |
comparison
equal
deleted
inserted
replaced
1747:730604db88b8 | 1748:b6a6ad64192a |
---|---|
4285 EXPECT_EQ(0, red); | 4285 EXPECT_EQ(0, red); |
4286 EXPECT_EQ(0, green); | 4286 EXPECT_EQ(0, green); |
4287 EXPECT_EQ(0, blue); | 4287 EXPECT_EQ(0, blue); |
4288 } | 4288 } |
4289 | 4289 |
4290 | 4290 TEST(GenericToolbox, FastParseTest_StringToDoubleEx01) |
4291 | 4291 { |
4292 | 4292 using OrthancStone::GenericToolbox::StringToDoubleEx; |
4293 | 4293 |
4294 | 4294 const char* s = "0.0/.123/3/12.5//-43.1"; |
4295 | 4295 |
4296 int32_t size; | |
4297 double r; | |
4298 const char* p = s; | |
4299 | |
4300 size = StringToDoubleEx(r, p, '/'); | |
4301 // --> | |
4302 // r = 0 and size = 3 | |
4303 ASSERT_EQ(3, size); | |
4304 ASSERT_DOUBLE_EQ(0, r); | |
4305 | |
4306 p += (size + 1); | |
4307 size = StringToDoubleEx(r, p, '/'); | |
4308 ASSERT_EQ(4, size); | |
4309 ASSERT_DOUBLE_EQ(0.123, r); | |
4310 | |
4311 p += (size + 1); | |
4312 size = StringToDoubleEx(r, p, '/'); | |
4313 ASSERT_EQ(1, size); | |
4314 ASSERT_DOUBLE_EQ(3, r); | |
4315 | |
4316 p += (size + 1); | |
4317 size = StringToDoubleEx(r, p, '/'); | |
4318 ASSERT_EQ(4, size); | |
4319 ASSERT_DOUBLE_EQ(12.5, r); | |
4320 | |
4321 p += (size + 1); | |
4322 size = StringToDoubleEx(r, p, '/'); | |
4323 ASSERT_EQ(0, size); | |
4324 ASSERT_DOUBLE_EQ(0, r); | |
4325 | |
4326 p += (size + 1); | |
4327 size = StringToDoubleEx(r, p, '/'); | |
4328 ASSERT_EQ(5, size); | |
4329 ASSERT_DOUBLE_EQ(-43.1, r); | |
4330 | |
4331 p += size; | |
4332 ASSERT_EQ(0, *p); | |
4333 } | |
4334 | |
4335 TEST(GenericToolbox, FastParseTest_StringToDoubleEx02) | |
4336 { | |
4337 using OrthancStone::GenericToolbox::StringToDoubleEx; | |
4338 | |
4339 const char* s = " \t 0.0/.123/3 \t/12.5e-3//-43.1 \t "; | |
4340 | |
4341 int32_t size; | |
4342 double r; | |
4343 const char* p = s; | |
4344 | |
4345 while (*p == ' ' || *p == '\t') | |
4346 ++p; | |
4347 | |
4348 size = StringToDoubleEx(r, p, '/'); | |
4349 // --> | |
4350 // r = 0 and size = 3 | |
4351 ASSERT_EQ(3, size); | |
4352 ASSERT_DOUBLE_EQ(0, r); | |
4353 | |
4354 p += (size + 1); | |
4355 size = StringToDoubleEx(r, p, '/'); | |
4356 ASSERT_EQ(4, size); | |
4357 ASSERT_DOUBLE_EQ(0.123, r); | |
4358 | |
4359 p += (size + 1); | |
4360 size = StringToDoubleEx(r, p, '/'); | |
4361 ASSERT_EQ(4, size); | |
4362 ASSERT_DOUBLE_EQ(3, r); | |
4363 | |
4364 p += (size + 1); | |
4365 size = StringToDoubleEx(r, p, '/'); | |
4366 ASSERT_EQ(7, size); | |
4367 ASSERT_DOUBLE_EQ(12.5e-3, r); | |
4368 | |
4369 p += (size + 1); | |
4370 size = StringToDoubleEx(r, p, '/'); | |
4371 ASSERT_EQ(0, size); | |
4372 ASSERT_DOUBLE_EQ(0, r); | |
4373 | |
4374 p += (size + 1); | |
4375 size = StringToDoubleEx(r, p, '/'); | |
4376 ASSERT_EQ(14, size); | |
4377 ASSERT_DOUBLE_EQ(-43.1, r); | |
4378 | |
4379 p += size; | |
4380 ASSERT_EQ(0, *p); | |
4381 } | |
4382 | |
4383 TEST(GenericToolbox, FastParseTest_StringToDoubleEx03) | |
4384 { | |
4385 using OrthancStone::GenericToolbox::StringToDoubleEx; | |
4386 | |
4387 const char* s = " \t 0.0/.123/3/12.5e-3//-43.1e-2 \t "; | |
4388 | |
4389 int32_t size; | |
4390 double r; | |
4391 const char* p = s; | |
4392 | |
4393 while (*p == ' ' || *p == '\t') | |
4394 ++p; | |
4395 | |
4396 size = StringToDoubleEx(r, p, '/'); | |
4397 // --> | |
4398 // r = 0 and size = 3 | |
4399 ASSERT_EQ(3, size); | |
4400 ASSERT_DOUBLE_EQ(0, r); | |
4401 | |
4402 p += (size + 1); | |
4403 size = StringToDoubleEx(r, p, '/'); | |
4404 ASSERT_EQ(4, size); | |
4405 ASSERT_DOUBLE_EQ(0.123, r); | |
4406 | |
4407 p += (size + 1); | |
4408 size = StringToDoubleEx(r, p, '/'); | |
4409 ASSERT_EQ(1, size); | |
4410 ASSERT_DOUBLE_EQ(3, r); | |
4411 | |
4412 p += (size + 1); | |
4413 size = StringToDoubleEx(r, p, '/'); | |
4414 ASSERT_EQ(7, size); | |
4415 ASSERT_DOUBLE_EQ(12.5e-3, r); | |
4416 | |
4417 p += (size + 1); | |
4418 size = StringToDoubleEx(r, p, '/'); | |
4419 ASSERT_EQ(0, size); | |
4420 ASSERT_DOUBLE_EQ(0, r); | |
4421 | |
4422 p += (size + 1); | |
4423 size = StringToDoubleEx(r, p, '/'); | |
4424 ASSERT_EQ(17, size); | |
4425 ASSERT_DOUBLE_EQ(-43.1e-2, r); | |
4426 | |
4427 p += size; | |
4428 ASSERT_EQ(0, *p); | |
4429 } | |
4430 | |
4431 | |
4432 TEST(GenericToolbox, FastParseTest_GetCharCount) | |
4433 { | |
4434 using OrthancStone::GenericToolbox::GetCharCount; | |
4435 | |
4436 ASSERT_EQ(0u, GetCharCount("-1e-22", '\\')); | |
4437 ASSERT_EQ(0u, GetCharCount(" -1e-22", '\\')); | |
4438 ASSERT_EQ(0u, GetCharCount(" -1e-22 ", '\\')); | |
4439 ASSERT_EQ(0u, GetCharCount("-1e-22 ", '\\')); | |
4440 | |
4441 ASSERT_EQ(1u, GetCharCount("-1e-2\\2", '\\')); | |
4442 ASSERT_EQ(1u, GetCharCount(" -1e-2\\2", '\\')); | |
4443 ASSERT_EQ(1u, GetCharCount("-1e-2\\2 ", '\\')); | |
4444 ASSERT_EQ(1u, GetCharCount(" -1e-2\\2 ", '\\')); | |
4445 | |
4446 | |
4447 ASSERT_EQ(11u, GetCharCount(" -1e-2\\\\3\\12.473\\-2.34e4\\-284\\423.23\\\\0.234423\\.786 \\ 9093\\ ", '\\')); | |
4448 } | |
4449 | |
4450 | |
4451 TEST(GenericToolbox, FastParseTest_FastParseVector01) | |
4452 { | |
4453 using OrthancStone::GenericToolbox::FastParseVector; | |
4454 | |
4455 OrthancStone::Vector v; | |
4456 | |
4457 ASSERT_TRUE(FastParseVector(v, "1.2")); | |
4458 ASSERT_EQ(1u, v.size()); | |
4459 ASSERT_DOUBLE_EQ(1.2, v[0]); | |
4460 | |
4461 ASSERT_TRUE(FastParseVector(v, "-1.2e+2")); | |
4462 ASSERT_EQ(1u, v.size()); | |
4463 ASSERT_DOUBLE_EQ(-120.0, v[0]); | |
4464 | |
4465 ASSERT_TRUE(FastParseVector(v, "-1e-2\\2")); | |
4466 ASSERT_EQ(2u, v.size()); | |
4467 ASSERT_DOUBLE_EQ(-0.01, v[0]); | |
4468 ASSERT_DOUBLE_EQ(2.0, v[1]); | |
4469 | |
4470 ASSERT_TRUE(FastParseVector(v, "1.3671875\\1.3671875")); | |
4471 ASSERT_EQ(2u, v.size()); | |
4472 ASSERT_DOUBLE_EQ(1.3671875, v[0]); | |
4473 ASSERT_DOUBLE_EQ(1.3671875, v[1]); | |
4474 } | |
4475 | |
4476 TEST(GenericToolbox, FastParseTest_FastParseVector02) | |
4477 { | |
4478 using OrthancStone::GenericToolbox::FastParseVector; | |
4479 | |
4480 const char* vectorString = " -1e-2\\\\3\\12.473\\-2.34e4\\-284\\423.23\\\\0.234423\\.786 \\9093\\ "; | |
4481 | |
4482 OrthancStone::Vector v; | |
4483 | |
4484 ASSERT_TRUE(FastParseVector(v, vectorString)); | |
4485 ASSERT_EQ(12u, v.size()); | |
4486 ASSERT_DOUBLE_EQ(-1e-2 , v[ 0]); | |
4487 ASSERT_DOUBLE_EQ(0 , v[ 1]); | |
4488 ASSERT_DOUBLE_EQ(3 , v[ 2]); | |
4489 ASSERT_DOUBLE_EQ(12.473 , v[ 3]); | |
4490 ASSERT_DOUBLE_EQ(-2.34e4 , v[ 4]); | |
4491 ASSERT_DOUBLE_EQ(-284 , v[ 5]); | |
4492 ASSERT_DOUBLE_EQ(423.23 , v[ 6]); | |
4493 ASSERT_DOUBLE_EQ(0 , v[ 7]); | |
4494 ASSERT_DOUBLE_EQ(0.234423 , v[ 8]); | |
4495 ASSERT_DOUBLE_EQ(.786 , v[ 9]); | |
4496 ASSERT_DOUBLE_EQ(9093 , v[10]); | |
4497 ASSERT_DOUBLE_EQ(0 , v[11]); | |
4498 } |