163 std::vector<std::vector<wxString>> testData = {
164 { wxS(
"A1"), wxS(
"B1"), wxS(
"C1") },
165 { wxS(
"A2"), wxS(
"B2"), wxS(
"C2") },
166 { wxS(
"A3"), wxS(
"B3"), wxS(
"C3") }
173 std::vector<std::vector<wxString>> retrieved;
179 for(
size_t i = 0; i < testData.size() && i < retrieved.size(); ++i )
182 for(
size_t j = 0; j < testData[i].size() && j < retrieved[i].size(); ++j )
238 std::vector<std::vector<wxString>> dataWithCommas = {
239 { wxS(
"Value, with comma"), wxS(
"Normal") },
240 { wxS(
"Another, comma"), wxS(
"Also normal") }
247 std::vector<std::vector<wxString>> retrieved;
253 for(
size_t i = 0; i < dataWithCommas.size() && i < retrieved.size(); ++i )
256 for(
size_t j = 0; j < dataWithCommas[i].size() && j < retrieved[i].size(); ++j )
322 std::vector<std::vector<wxString>> irregularData = {
323 { wxS(
"A1"), wxS(
"B1"), wxS(
"C1"), wxS(
"D1") },
324 { wxS(
"A2"), wxS(
"B2") },
325 { wxS(
"A3"), wxS(
"B3"), wxS(
"C3") }
332 std::vector<std::vector<wxString>> retrieved;
339 for(
size_t i = 0; i < irregularData.size() && i < retrieved.size(); ++i )
341 for(
size_t j = 0; j < irregularData[i].size() && j < retrieved[i].size(); ++j )
495 std::string textData =
"Text for clipboard";
496 std::string kicadData =
"KiCad data for clipboard";
497 std::string svgData =
"<svg></svg>";
498 std::string pngData =
"\x89PNG\r\n";
500 std::vector<CLIPBOARD_MIME_DATA> mimeData;
503 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
504 kicadEntry.
m_data.AppendData( kicadData.data(), kicadData.size() );
505 mimeData.push_back( kicadEntry );
509 svgEntry.
m_data.AppendData( svgData.data(), svgData.size() );
510 mimeData.push_back( svgEntry );
514 pngEntry.
m_data.AppendData( pngData.data(), pngData.size() );
515 mimeData.push_back( pngEntry );
580 std::string sExprData =
581 "(kicad_sch (version 20231120) (generator \"eeschema\")\n"
582 " (symbol (lib_id \"Device:R\") (at 100.33 50.8 0)\n"
583 " (property \"Reference\" \"R1\" (at 101.6 49.53 0))\n"
584 " (property \"Value\" \"10kΩ\" (at 101.6 52.07 0))\n"
588 std::vector<CLIPBOARD_MIME_DATA> mimeData;
590 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
591 kicadEntry.
m_data.AppendData( sExprData.data(), sExprData.size() );
592 mimeData.push_back( kicadEntry );
643 std::string textData =
"Text with PNG data";
647 static const unsigned char minimalPng[] = {
648 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
649 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
650 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
651 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4,
652 0x89, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41,
653 0x54, 0x78, 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00,
654 0x05, 0x00, 0x01, 0x0D, 0x0A, 0x2D, 0xB4, 0x00,
655 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE,
659 std::vector<CLIPBOARD_MIME_DATA> mimeData;
663 pngEntry.
m_data.AppendData( minimalPng,
sizeof( minimalPng ) );
664 mimeData.push_back( pngEntry );
667 kicadEntry.
m_mimeType = wxS(
"application/kicad" );
668 kicadEntry.
m_data.AppendData( textData.data(), textData.size() );
669 mimeData.push_back( kicadEntry );
696 int rW = 255, gW = 0, bW = 0;
697 int rB = 255, gB = 0, bB = 0;
702 int avgDiff = (diffR + diffG + diffB) / 3;
703 int alpha = 255 - avgDiff;
710 int recoveredR = std::min( 255, rB * 255 / alpha );
711 int recoveredG = std::min( 255, gB * 255 / alpha );
712 int recoveredB = std::min( 255, bB * 255 / alpha );
742 int rW = 177, gW = 202, bW = 227;
743 int rB = 50, gB = 75, bB = 100;
748 int avgDiff = (diffR + diffG + diffB) / 3;
749 int alpha = 255 - avgDiff;
751 BOOST_CHECK_CLOSE( (
double)alpha, 128.0, 1.0 );
756 int recoveredR = std::min( 255, rB * 255 / alpha );
757 int recoveredG = std::min( 255, gB * 255 / alpha );
758 int recoveredB = std::min( 255, bB * 255 / alpha );
759 BOOST_CHECK_CLOSE( (
double)recoveredR, 99.0, 2.0 );
760 BOOST_CHECK_CLOSE( (
double)recoveredG, 149.0, 2.0 );
761 BOOST_CHECK_CLOSE( (
double)recoveredB, 199.0, 2.0 );
770 int rW1 = 128, gW1 = 128, bW1 = 128;
771 int rB1 = 115, gB1 = 115, bB1 = 115;
773 int diff1 = (rW1 - rB1 + gW1 - gB1 + bW1 - bB1) / 3;
774 int alpha1 = 255 - diff1;
775 BOOST_CHECK( alpha1 > 200 );
778 int rW2 = 210, gW2 = 210, bW2 = 210;
779 int rB2 = 38, gB2 = 38, bB2 = 38;
781 int diff2 = (rW2 - rB2 + gW2 - gB2 + bW2 - bB2) / 3;
782 int alpha2 = 255 - diff2;
783 BOOST_CHECK( alpha2 < 100 );
784 BOOST_CHECK( alpha2 > 0 );
793 int bboxWidth = 1000;
794 int bboxHeight = 500;
797 double viewScale1 = 1.0;
798 int bitmapWidth1 = (int)(bboxWidth * viewScale1 + 0.5);
799 int bitmapHeight1 = (int)(bboxHeight * viewScale1 + 0.5);
804 double viewScale2 = 2.0;
805 int bitmapWidth2 = (int)(bboxWidth * viewScale2 + 0.5);
806 int bitmapHeight2 = (int)(bboxHeight * viewScale2 + 0.5);
811 double viewScale3 = 0.5;
812 int bitmapWidth3 = (int)(bboxWidth * viewScale3 + 0.5);
813 int bitmapHeight3 = (int)(bboxHeight * viewScale3 + 0.5);
821 const int maxBitmapSize = 4096;
824 int bboxWidth = 10000;
825 int bboxHeight = 5000;
826 double viewScale = 1.0;
828 int bitmapWidth = (int)(bboxWidth * viewScale + 0.5);
829 int bitmapHeight = (int)(bboxHeight * viewScale + 0.5);
832 if( bitmapWidth > maxBitmapSize || bitmapHeight > maxBitmapSize )
834 double scaleDown = (double)maxBitmapSize / std::max( bitmapWidth, bitmapHeight );
835 bitmapWidth = (int)(bitmapWidth * scaleDown + 0.5);
836 bitmapHeight = (int)(bitmapHeight * scaleDown + 0.5);
837 viewScale *= scaleDown;
840 BOOST_CHECK( bitmapWidth <= maxBitmapSize );
841 BOOST_CHECK( bitmapHeight <= maxBitmapSize );
843 BOOST_CHECK_CLOSE( (
double)bitmapWidth / bitmapHeight, 2.0, 0.1 );
852 const double ppi = 96.0;
857 double viewScale1 = 1.0;
858 double zoomFactor1 = viewScale1 * inch2Iu / ppi;
860 BOOST_CHECK_CLOSE( zoomFactor1, 104.166666, 0.01 );
863 double viewScale2 = 0.1;
864 double zoomFactor2 = viewScale2 * inch2Iu / ppi;
865 BOOST_CHECK_CLOSE( zoomFactor2, 10.416666, 0.01 );
868 BOOST_CHECK_CLOSE( zoomFactor1 / zoomFactor2, viewScale1 / viewScale2, 0.01 );
880 const double ppi = 96.0;
883 int bitmapWidth = 800;
884 int bitmapHeight = 600;
887 double pageSizeInX = (double) bitmapWidth / ppi;
888 double pageSizeInY = (double) bitmapHeight / ppi;
891 BOOST_CHECK_CLOSE( pageSizeInX, 800.0 / 96.0, 0.01 );
892 BOOST_CHECK_CLOSE( pageSizeInY, 600.0 / 96.0, 0.01 );
895 double reconstructedWidth = pageSizeInX * ppi;
896 double reconstructedHeight = pageSizeInY * ppi;
897 BOOST_CHECK_CLOSE( reconstructedWidth, (
double) bitmapWidth, 0.01 );
898 BOOST_CHECK_CLOSE( reconstructedHeight, (
double) bitmapHeight, 0.01 );
901 int bitmapWidth2 = 1920;
902 int bitmapHeight2 = 1080;
903 double pageSizeInX2 = (double) bitmapWidth2 / ppi;
904 double pageSizeInY2 = (double) bitmapHeight2 / ppi;
906 BOOST_CHECK_CLOSE( pageSizeInX2 * ppi, (
double) bitmapWidth2, 0.01 );
907 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")