169 std::vector<std::vector<wxString>> testData = {
170 { wxS(
"A1"), wxS(
"B1"), wxS(
"C1") },
171 { wxS(
"A2"), wxS(
"B2"), wxS(
"C2") },
172 { wxS(
"A3"), wxS(
"B3"), wxS(
"C3") }
179 std::vector<std::vector<wxString>> retrieved;
185 for(
size_t i = 0; i < testData.size() && i < retrieved.size(); ++i )
188 for(
size_t j = 0; j < testData[i].size() && j < retrieved[i].size(); ++j )
244 std::vector<std::vector<wxString>> dataWithCommas = {
245 { wxS(
"Value, with comma"), wxS(
"Normal") },
246 { wxS(
"Another, comma"), wxS(
"Also normal") }
253 std::vector<std::vector<wxString>> retrieved;
259 for(
size_t i = 0; i < dataWithCommas.size() && i < retrieved.size(); ++i )
262 for(
size_t j = 0; j < dataWithCommas[i].size() && j < retrieved[i].size(); ++j )
323 std::vector<std::vector<wxString>> irregularData = {
324 { wxS(
"A1"), wxS(
"B1"), wxS(
"C1"), wxS(
"D1") },
325 { wxS(
"A2"), wxS(
"B2") },
326 { wxS(
"A3"), wxS(
"B3"), wxS(
"C3") }
333 std::vector<std::vector<wxString>> retrieved;
340 for(
size_t i = 0; i < irregularData.size() && i < retrieved.size(); ++i )
342 for(
size_t j = 0; j < irregularData[i].size() && j < retrieved[i].size(); ++j )
496 std::string textData =
"Text for clipboard";
497 std::string kicadData =
"KiCad data for clipboard";
498 std::string svgData =
"<svg></svg>";
499 std::string pngData =
"\x89PNG\r\n";
501 std::vector<CLIPBOARD_MIME_DATA> mimeData;
504 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
505 kicadEntry.
m_data.AppendData( kicadData.data(), kicadData.size() );
506 mimeData.push_back( kicadEntry );
510 svgEntry.
m_data.AppendData( svgData.data(), svgData.size() );
511 mimeData.push_back( svgEntry );
515 pngEntry.
m_data.AppendData( pngData.data(), pngData.size() );
516 mimeData.push_back( pngEntry );
581 std::string sExprData =
582 "(kicad_sch (version 20231120) (generator \"eeschema\")\n"
583 " (symbol (lib_id \"Device:R\") (at 100.33 50.8 0)\n"
584 " (property \"Reference\" \"R1\" (at 101.6 49.53 0))\n"
585 " (property \"Value\" \"10kΩ\" (at 101.6 52.07 0))\n"
589 std::vector<CLIPBOARD_MIME_DATA> mimeData;
591 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
592 kicadEntry.
m_data.AppendData( sExprData.data(), sExprData.size() );
593 mimeData.push_back( kicadEntry );
644 std::string textData =
"Text with PNG data";
648 static const unsigned char minimalPng[] = {
649 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
650 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
651 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
652 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4,
653 0x89, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41,
654 0x54, 0x78, 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00,
655 0x05, 0x00, 0x01, 0x0D, 0x0A, 0x2D, 0xB4, 0x00,
656 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE,
660 std::vector<CLIPBOARD_MIME_DATA> mimeData;
664 pngEntry.
m_data.AppendData( minimalPng,
sizeof( minimalPng ) );
665 mimeData.push_back( pngEntry );
668 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
669 kicadEntry.
m_data.AppendData( textData.data(), textData.size() );
670 mimeData.push_back( kicadEntry );
697 int rW = 255, gW = 0, bW = 0;
698 int rB = 255, gB = 0, bB = 0;
703 int avgDiff = (diffR + diffG + diffB) / 3;
704 int alpha = 255 - avgDiff;
711 int recoveredR = std::min( 255, rB * 255 / alpha );
712 int recoveredG = std::min( 255, gB * 255 / alpha );
713 int recoveredB = std::min( 255, bB * 255 / alpha );
743 int rW = 177, gW = 202, bW = 227;
744 int rB = 50, gB = 75, bB = 100;
749 int avgDiff = (diffR + diffG + diffB) / 3;
750 int alpha = 255 - avgDiff;
752 BOOST_CHECK_CLOSE( (
double)alpha, 128.0, 1.0 );
757 int recoveredR = std::min( 255, rB * 255 / alpha );
758 int recoveredG = std::min( 255, gB * 255 / alpha );
759 int recoveredB = std::min( 255, bB * 255 / alpha );
760 BOOST_CHECK_CLOSE( (
double)recoveredR, 99.0, 2.0 );
761 BOOST_CHECK_CLOSE( (
double)recoveredG, 149.0, 2.0 );
762 BOOST_CHECK_CLOSE( (
double)recoveredB, 199.0, 2.0 );
771 int rW1 = 128, gW1 = 128, bW1 = 128;
772 int rB1 = 115, gB1 = 115, bB1 = 115;
774 int diff1 = (rW1 - rB1 + gW1 - gB1 + bW1 - bB1) / 3;
775 int alpha1 = 255 - diff1;
776 BOOST_CHECK( alpha1 > 200 );
779 int rW2 = 210, gW2 = 210, bW2 = 210;
780 int rB2 = 38, gB2 = 38, bB2 = 38;
782 int diff2 = (rW2 - rB2 + gW2 - gB2 + bW2 - bB2) / 3;
783 int alpha2 = 255 - diff2;
784 BOOST_CHECK( alpha2 < 100 );
785 BOOST_CHECK( alpha2 > 0 );
794 int bboxWidth = 1000;
795 int bboxHeight = 500;
798 double viewScale1 = 1.0;
799 int bitmapWidth1 = (int)(bboxWidth * viewScale1 + 0.5);
800 int bitmapHeight1 = (int)(bboxHeight * viewScale1 + 0.5);
805 double viewScale2 = 2.0;
806 int bitmapWidth2 = (int)(bboxWidth * viewScale2 + 0.5);
807 int bitmapHeight2 = (int)(bboxHeight * viewScale2 + 0.5);
812 double viewScale3 = 0.5;
813 int bitmapWidth3 = (int)(bboxWidth * viewScale3 + 0.5);
814 int bitmapHeight3 = (int)(bboxHeight * viewScale3 + 0.5);
822 const int maxBitmapSize = 4096;
825 int bboxWidth = 10000;
826 int bboxHeight = 5000;
827 double viewScale = 1.0;
829 int bitmapWidth = (int)(bboxWidth * viewScale + 0.5);
830 int bitmapHeight = (int)(bboxHeight * viewScale + 0.5);
833 if( bitmapWidth > maxBitmapSize || bitmapHeight > maxBitmapSize )
835 double scaleDown = (double)maxBitmapSize / std::max( bitmapWidth, bitmapHeight );
836 bitmapWidth = (int)(bitmapWidth * scaleDown + 0.5);
837 bitmapHeight = (int)(bitmapHeight * scaleDown + 0.5);
838 viewScale *= scaleDown;
841 BOOST_CHECK( bitmapWidth <= maxBitmapSize );
842 BOOST_CHECK( bitmapHeight <= maxBitmapSize );
844 BOOST_CHECK_CLOSE( (
double)bitmapWidth / bitmapHeight, 2.0, 0.1 );
853 const double ppi = 96.0;
858 double viewScale1 = 1.0;
859 double zoomFactor1 = viewScale1 * inch2Iu / ppi;
861 BOOST_CHECK_CLOSE( zoomFactor1, 104.166666, 0.01 );
864 double viewScale2 = 0.1;
865 double zoomFactor2 = viewScale2 * inch2Iu / ppi;
866 BOOST_CHECK_CLOSE( zoomFactor2, 10.416666, 0.01 );
869 BOOST_CHECK_CLOSE( zoomFactor1 / zoomFactor2, viewScale1 / viewScale2, 0.01 );
881 const double ppi = 96.0;
884 int bitmapWidth = 800;
885 int bitmapHeight = 600;
888 double pageSizeInX = (double) bitmapWidth / ppi;
889 double pageSizeInY = (double) bitmapHeight / ppi;
892 BOOST_CHECK_CLOSE( pageSizeInX, 800.0 / 96.0, 0.01 );
893 BOOST_CHECK_CLOSE( pageSizeInY, 600.0 / 96.0, 0.01 );
896 double reconstructedWidth = pageSizeInX * ppi;
897 double reconstructedHeight = pageSizeInY * ppi;
898 BOOST_CHECK_CLOSE( reconstructedWidth, (
double) bitmapWidth, 0.01 );
899 BOOST_CHECK_CLOSE( reconstructedHeight, (
double) bitmapHeight, 0.01 );
902 int bitmapWidth2 = 1920;
903 int bitmapHeight2 = 1080;
904 double pageSizeInX2 = (double) bitmapWidth2 / ppi;
905 double pageSizeInY2 = (double) bitmapHeight2 / ppi;
907 BOOST_CHECK_CLOSE( pageSizeInX2 * ppi, (
double) bitmapWidth2, 0.01 );
908 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")