165 std::vector<std::vector<wxString>> testData = {
166 { wxS(
"A1"), wxS(
"B1"), wxS(
"C1") },
167 { wxS(
"A2"), wxS(
"B2"), wxS(
"C2") },
168 { wxS(
"A3"), wxS(
"B3"), wxS(
"C3") }
175 std::vector<std::vector<wxString>> retrieved;
181 for(
size_t i = 0; i < testData.size() && i < retrieved.size(); ++i )
184 for(
size_t j = 0; j < testData[i].size() && j < retrieved[i].size(); ++j )
240 std::vector<std::vector<wxString>> dataWithCommas = {
241 { wxS(
"Value, with comma"), wxS(
"Normal") },
242 { wxS(
"Another, comma"), wxS(
"Also normal") }
249 std::vector<std::vector<wxString>> retrieved;
255 for(
size_t i = 0; i < dataWithCommas.size() && i < retrieved.size(); ++i )
258 for(
size_t j = 0; j < dataWithCommas[i].size() && j < retrieved[i].size(); ++j )
319 std::vector<std::vector<wxString>> irregularData = {
320 { wxS(
"A1"), wxS(
"B1"), wxS(
"C1"), wxS(
"D1") },
321 { wxS(
"A2"), wxS(
"B2") },
322 { wxS(
"A3"), wxS(
"B3"), wxS(
"C3") }
329 std::vector<std::vector<wxString>> retrieved;
336 for(
size_t i = 0; i < irregularData.size() && i < retrieved.size(); ++i )
338 for(
size_t j = 0; j < irregularData[i].size() && j < retrieved[i].size(); ++j )
492 std::string textData =
"Text for clipboard";
493 std::string kicadData =
"KiCad data for clipboard";
494 std::string svgData =
"<svg></svg>";
495 std::string pngData =
"\x89PNG\r\n";
497 std::vector<CLIPBOARD_MIME_DATA> mimeData;
500 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
501 kicadEntry.
m_data.AppendData( kicadData.data(), kicadData.size() );
502 mimeData.push_back( kicadEntry );
506 svgEntry.
m_data.AppendData( svgData.data(), svgData.size() );
507 mimeData.push_back( svgEntry );
511 pngEntry.
m_data.AppendData( pngData.data(), pngData.size() );
512 mimeData.push_back( pngEntry );
577 std::string sExprData =
578 "(kicad_sch (version 20231120) (generator \"eeschema\")\n"
579 " (symbol (lib_id \"Device:R\") (at 100.33 50.8 0)\n"
580 " (property \"Reference\" \"R1\" (at 101.6 49.53 0))\n"
581 " (property \"Value\" \"10kΩ\" (at 101.6 52.07 0))\n"
585 std::vector<CLIPBOARD_MIME_DATA> mimeData;
587 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
588 kicadEntry.
m_data.AppendData( sExprData.data(), sExprData.size() );
589 mimeData.push_back( kicadEntry );
640 std::string textData =
"Text with PNG data";
644 static const unsigned char minimalPng[] = {
645 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
646 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
647 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
648 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4,
649 0x89, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41,
650 0x54, 0x78, 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00,
651 0x05, 0x00, 0x01, 0x0D, 0x0A, 0x2D, 0xB4, 0x00,
652 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE,
656 std::vector<CLIPBOARD_MIME_DATA> mimeData;
660 pngEntry.
m_data.AppendData( minimalPng,
sizeof( minimalPng ) );
661 mimeData.push_back( pngEntry );
664 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
665 kicadEntry.
m_data.AppendData( textData.data(), textData.size() );
666 mimeData.push_back( kicadEntry );
693 int rW = 255, gW = 0, bW = 0;
694 int rB = 255, gB = 0, bB = 0;
699 int avgDiff = (diffR + diffG + diffB) / 3;
700 int alpha = 255 - avgDiff;
707 int recoveredR = std::min( 255, rB * 255 / alpha );
708 int recoveredG = std::min( 255, gB * 255 / alpha );
709 int recoveredB = std::min( 255, bB * 255 / alpha );
739 int rW = 177, gW = 202, bW = 227;
740 int rB = 50, gB = 75, bB = 100;
745 int avgDiff = (diffR + diffG + diffB) / 3;
746 int alpha = 255 - avgDiff;
748 BOOST_CHECK_CLOSE( (
double)alpha, 128.0, 1.0 );
753 int recoveredR = std::min( 255, rB * 255 / alpha );
754 int recoveredG = std::min( 255, gB * 255 / alpha );
755 int recoveredB = std::min( 255, bB * 255 / alpha );
756 BOOST_CHECK_CLOSE( (
double)recoveredR, 99.0, 2.0 );
757 BOOST_CHECK_CLOSE( (
double)recoveredG, 149.0, 2.0 );
758 BOOST_CHECK_CLOSE( (
double)recoveredB, 199.0, 2.0 );
767 int rW1 = 128, gW1 = 128, bW1 = 128;
768 int rB1 = 115, gB1 = 115, bB1 = 115;
770 int diff1 = (rW1 - rB1 + gW1 - gB1 + bW1 - bB1) / 3;
771 int alpha1 = 255 - diff1;
772 BOOST_CHECK( alpha1 > 200 );
775 int rW2 = 210, gW2 = 210, bW2 = 210;
776 int rB2 = 38, gB2 = 38, bB2 = 38;
778 int diff2 = (rW2 - rB2 + gW2 - gB2 + bW2 - bB2) / 3;
779 int alpha2 = 255 - diff2;
780 BOOST_CHECK( alpha2 < 100 );
781 BOOST_CHECK( alpha2 > 0 );
790 int bboxWidth = 1000;
791 int bboxHeight = 500;
794 double viewScale1 = 1.0;
795 int bitmapWidth1 = (int)(bboxWidth * viewScale1 + 0.5);
796 int bitmapHeight1 = (int)(bboxHeight * viewScale1 + 0.5);
801 double viewScale2 = 2.0;
802 int bitmapWidth2 = (int)(bboxWidth * viewScale2 + 0.5);
803 int bitmapHeight2 = (int)(bboxHeight * viewScale2 + 0.5);
808 double viewScale3 = 0.5;
809 int bitmapWidth3 = (int)(bboxWidth * viewScale3 + 0.5);
810 int bitmapHeight3 = (int)(bboxHeight * viewScale3 + 0.5);
818 const int maxBitmapSize = 4096;
821 int bboxWidth = 10000;
822 int bboxHeight = 5000;
823 double viewScale = 1.0;
825 int bitmapWidth = (int)(bboxWidth * viewScale + 0.5);
826 int bitmapHeight = (int)(bboxHeight * viewScale + 0.5);
829 if( bitmapWidth > maxBitmapSize || bitmapHeight > maxBitmapSize )
831 double scaleDown = (double)maxBitmapSize / std::max( bitmapWidth, bitmapHeight );
832 bitmapWidth = (int)(bitmapWidth * scaleDown + 0.5);
833 bitmapHeight = (int)(bitmapHeight * scaleDown + 0.5);
834 viewScale *= scaleDown;
837 BOOST_CHECK( bitmapWidth <= maxBitmapSize );
838 BOOST_CHECK( bitmapHeight <= maxBitmapSize );
840 BOOST_CHECK_CLOSE( (
double)bitmapWidth / bitmapHeight, 2.0, 0.1 );
849 const double ppi = 96.0;
854 double viewScale1 = 1.0;
855 double zoomFactor1 = viewScale1 * inch2Iu / ppi;
857 BOOST_CHECK_CLOSE( zoomFactor1, 104.166666, 0.01 );
860 double viewScale2 = 0.1;
861 double zoomFactor2 = viewScale2 * inch2Iu / ppi;
862 BOOST_CHECK_CLOSE( zoomFactor2, 10.416666, 0.01 );
865 BOOST_CHECK_CLOSE( zoomFactor1 / zoomFactor2, viewScale1 / viewScale2, 0.01 );
877 const double ppi = 96.0;
880 int bitmapWidth = 800;
881 int bitmapHeight = 600;
884 double pageSizeInX = (double) bitmapWidth / ppi;
885 double pageSizeInY = (double) bitmapHeight / ppi;
888 BOOST_CHECK_CLOSE( pageSizeInX, 800.0 / 96.0, 0.01 );
889 BOOST_CHECK_CLOSE( pageSizeInY, 600.0 / 96.0, 0.01 );
892 double reconstructedWidth = pageSizeInX * ppi;
893 double reconstructedHeight = pageSizeInY * ppi;
894 BOOST_CHECK_CLOSE( reconstructedWidth, (
double) bitmapWidth, 0.01 );
895 BOOST_CHECK_CLOSE( reconstructedHeight, (
double) bitmapHeight, 0.01 );
898 int bitmapWidth2 = 1920;
899 int bitmapHeight2 = 1080;
900 double pageSizeInX2 = (double) bitmapWidth2 / ppi;
901 double pageSizeInY2 = (double) bitmapHeight2 / ppi;
903 BOOST_CHECK_CLOSE( pageSizeInX2 * ppi, (
double) bitmapWidth2, 0.01 );
904 BOOST_CHECK_CLOSE( pageSizeInY2 * ppi, (
double) bitmapHeight2, 0.01 );
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")