176 std::vector<std::vector<wxString>> testData = {
177 { wxS(
"A1"), wxS(
"B1"), wxS(
"C1") },
178 { wxS(
"A2"), wxS(
"B2"), wxS(
"C2") },
179 { wxS(
"A3"), wxS(
"B3"), wxS(
"C3") }
186 std::vector<std::vector<wxString>> retrieved;
192 for(
size_t i = 0; i < testData.size() && i < retrieved.size(); ++i )
195 for(
size_t j = 0; j < testData[i].size() && j < retrieved[i].size(); ++j )
251 std::vector<std::vector<wxString>> dataWithCommas = {
252 { wxS(
"Value, with comma"), wxS(
"Normal") },
253 { wxS(
"Another, comma"), wxS(
"Also normal") }
260 std::vector<std::vector<wxString>> retrieved;
266 for(
size_t i = 0; i < dataWithCommas.size() && i < retrieved.size(); ++i )
269 for(
size_t j = 0; j < dataWithCommas[i].size() && j < retrieved[i].size(); ++j )
335 std::vector<std::vector<wxString>> irregularData = {
336 { wxS(
"A1"), wxS(
"B1"), wxS(
"C1"), wxS(
"D1") },
337 { wxS(
"A2"), wxS(
"B2") },
338 { wxS(
"A3"), wxS(
"B3"), wxS(
"C3") }
345 std::vector<std::vector<wxString>> retrieved;
352 for(
size_t i = 0; i < irregularData.size() && i < retrieved.size(); ++i )
354 for(
size_t j = 0; j < irregularData[i].size() && j < retrieved[i].size(); ++j )
508 std::string textData =
"Text for clipboard";
509 std::string kicadData =
"KiCad data for clipboard";
510 std::string svgData =
"<svg></svg>";
511 std::string pngData =
"\x89PNG\r\n";
513 std::vector<CLIPBOARD_MIME_DATA> mimeData;
516 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
517 kicadEntry.
m_data.AppendData( kicadData.data(), kicadData.size() );
518 mimeData.push_back( kicadEntry );
522 svgEntry.
m_data.AppendData( svgData.data(), svgData.size() );
523 mimeData.push_back( svgEntry );
527 pngEntry.
m_data.AppendData( pngData.data(), pngData.size() );
528 mimeData.push_back( pngEntry );
593 std::string sExprData =
594 "(kicad_sch (version 20231120) (generator \"eeschema\")\n"
595 " (symbol (lib_id \"Device:R\") (at 100.33 50.8 0)\n"
596 " (property \"Reference\" \"R1\" (at 101.6 49.53 0))\n"
597 " (property \"Value\" \"10kΩ\" (at 101.6 52.07 0))\n"
601 std::vector<CLIPBOARD_MIME_DATA> mimeData;
603 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
604 kicadEntry.
m_data.AppendData( sExprData.data(), sExprData.size() );
605 mimeData.push_back( kicadEntry );
656 std::string textData =
"Text with PNG data";
660 static const unsigned char minimalPng[] = {
661 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
662 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
663 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
664 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4,
665 0x89, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41,
666 0x54, 0x78, 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00,
667 0x05, 0x00, 0x01, 0x0D, 0x0A, 0x2D, 0xB4, 0x00,
668 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE,
672 std::vector<CLIPBOARD_MIME_DATA> mimeData;
676 pngEntry.
m_data.AppendData( minimalPng,
sizeof( minimalPng ) );
677 mimeData.push_back( pngEntry );
680 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
681 kicadEntry.
m_data.AppendData( textData.data(), textData.size() );
682 mimeData.push_back( kicadEntry );
709 int rW = 255, gW = 0, bW = 0;
710 int rB = 255, gB = 0, bB = 0;
715 int avgDiff = (diffR + diffG + diffB) / 3;
716 int alpha = 255 - avgDiff;
723 int recoveredR = std::min( 255, rB * 255 / alpha );
724 int recoveredG = std::min( 255, gB * 255 / alpha );
725 int recoveredB = std::min( 255, bB * 255 / alpha );
755 int rW = 177, gW = 202, bW = 227;
756 int rB = 50, gB = 75, bB = 100;
761 int avgDiff = (diffR + diffG + diffB) / 3;
762 int alpha = 255 - avgDiff;
764 BOOST_CHECK_CLOSE( (
double)alpha, 128.0, 1.0 );
769 int recoveredR = std::min( 255, rB * 255 / alpha );
770 int recoveredG = std::min( 255, gB * 255 / alpha );
771 int recoveredB = std::min( 255, bB * 255 / alpha );
772 BOOST_CHECK_CLOSE( (
double)recoveredR, 99.0, 2.0 );
773 BOOST_CHECK_CLOSE( (
double)recoveredG, 149.0, 2.0 );
774 BOOST_CHECK_CLOSE( (
double)recoveredB, 199.0, 2.0 );
783 int rW1 = 128, gW1 = 128, bW1 = 128;
784 int rB1 = 115, gB1 = 115, bB1 = 115;
786 int diff1 = (rW1 - rB1 + gW1 - gB1 + bW1 - bB1) / 3;
787 int alpha1 = 255 - diff1;
788 BOOST_CHECK( alpha1 > 200 );
791 int rW2 = 210, gW2 = 210, bW2 = 210;
792 int rB2 = 38, gB2 = 38, bB2 = 38;
794 int diff2 = (rW2 - rB2 + gW2 - gB2 + bW2 - bB2) / 3;
795 int alpha2 = 255 - diff2;
796 BOOST_CHECK( alpha2 < 100 );
797 BOOST_CHECK( alpha2 > 0 );
806 int bboxWidth = 1000;
807 int bboxHeight = 500;
810 double viewScale1 = 1.0;
811 int bitmapWidth1 = (int)(bboxWidth * viewScale1 + 0.5);
812 int bitmapHeight1 = (int)(bboxHeight * viewScale1 + 0.5);
817 double viewScale2 = 2.0;
818 int bitmapWidth2 = (int)(bboxWidth * viewScale2 + 0.5);
819 int bitmapHeight2 = (int)(bboxHeight * viewScale2 + 0.5);
824 double viewScale3 = 0.5;
825 int bitmapWidth3 = (int)(bboxWidth * viewScale3 + 0.5);
826 int bitmapHeight3 = (int)(bboxHeight * viewScale3 + 0.5);
834 const int maxBitmapSize = 4096;
837 int bboxWidth = 10000;
838 int bboxHeight = 5000;
839 double viewScale = 1.0;
841 int bitmapWidth = (int)(bboxWidth * viewScale + 0.5);
842 int bitmapHeight = (int)(bboxHeight * viewScale + 0.5);
845 if( bitmapWidth > maxBitmapSize || bitmapHeight > maxBitmapSize )
847 double scaleDown = (double)maxBitmapSize / std::max( bitmapWidth, bitmapHeight );
848 bitmapWidth = (int)(bitmapWidth * scaleDown + 0.5);
849 bitmapHeight = (int)(bitmapHeight * scaleDown + 0.5);
850 viewScale *= scaleDown;
853 BOOST_CHECK( bitmapWidth <= maxBitmapSize );
854 BOOST_CHECK( bitmapHeight <= maxBitmapSize );
856 BOOST_CHECK_CLOSE( (
double)bitmapWidth / bitmapHeight, 2.0, 0.1 );
865 const double ppi = 96.0;
870 double viewScale1 = 1.0;
871 double zoomFactor1 = viewScale1 * inch2Iu / ppi;
873 BOOST_CHECK_CLOSE( zoomFactor1, 104.166666, 0.01 );
876 double viewScale2 = 0.1;
877 double zoomFactor2 = viewScale2 * inch2Iu / ppi;
878 BOOST_CHECK_CLOSE( zoomFactor2, 10.416666, 0.01 );
881 BOOST_CHECK_CLOSE( zoomFactor1 / zoomFactor2, viewScale1 / viewScale2, 0.01 );
893 const double ppi = 96.0;
896 int bitmapWidth = 800;
897 int bitmapHeight = 600;
900 double pageSizeInX = (double) bitmapWidth / ppi;
901 double pageSizeInY = (double) bitmapHeight / ppi;
904 BOOST_CHECK_CLOSE( pageSizeInX, 800.0 / 96.0, 0.01 );
905 BOOST_CHECK_CLOSE( pageSizeInY, 600.0 / 96.0, 0.01 );
908 double reconstructedWidth = pageSizeInX * ppi;
909 double reconstructedHeight = pageSizeInY * ppi;
910 BOOST_CHECK_CLOSE( reconstructedWidth, (
double) bitmapWidth, 0.01 );
911 BOOST_CHECK_CLOSE( reconstructedHeight, (
double) bitmapHeight, 0.01 );
914 int bitmapWidth2 = 1920;
915 int bitmapHeight2 = 1080;
916 double pageSizeInX2 = (double) bitmapWidth2 / ppi;
917 double pageSizeInY2 = (double) bitmapHeight2 / ppi;
919 BOOST_CHECK_CLOSE( pageSizeInX2 * ppi, (
double) bitmapWidth2, 0.01 );
920 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")