/* KLayout Layout Viewer Copyright (C) 2006-2017 Matthias Koefferlein This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "imgObject.h" #include "utHead.h" TEST(1) { img::Object image (12, 8, db::DCplxTrans (), false); EXPECT_EQ (image.is_color (), false); EXPECT_EQ (image.is_byte_data (), false); EXPECT_EQ (image.float_data ()[0], 0.0); EXPECT_EQ (image.float_data ()[1], 0.0); EXPECT_EQ (image.float_data ()[12*8-1], 0.0); EXPECT_EQ (image.data_length(), size_t (12 * 8)); EXPECT_EQ (db::DCplxTrans (image.matrix ()).to_string (), "r0 *1 0,0"); img::Object copy1 (image); EXPECT_EQ (copy1.equals (&image), true); image.set_matrix (db::Matrix3d (db::DCplxTrans (2.5, 90, false, db::DVector (1, -2)))); EXPECT_EQ (db::DCplxTrans (image.matrix ()).to_string (), "r90 *2.5 1,-2"); EXPECT_EQ (copy1.equals (&image), false); copy1 = image; EXPECT_EQ (copy1.equals (&image), true); EXPECT_EQ (copy1.float_data () == image.float_data (), true); std::vector d; for (unsigned int i = 0; i < image.data_length (); ++i) { d.push_back (image.float_data ()[i]); } copy1.set_data (12, 8, d); EXPECT_EQ (copy1.equals (&image), true); EXPECT_EQ (copy1.float_data () == image.float_data (), false); EXPECT_EQ (copy1.width (), size_t (12)); EXPECT_EQ (copy1.height (), size_t (8)); d[0] = 12.5; d[5] = -12.5; copy1.set_data (12, 8, d); EXPECT_EQ (copy1.float_data () == image.float_data (), false); EXPECT_EQ (copy1.float_data ()[0], 12.5); EXPECT_EQ (copy1.float_data ()[1], 0.0); EXPECT_EQ (copy1.float_data ()[5], -12.5); EXPECT_EQ (copy1.float_data ()[6], 0.0); EXPECT_EQ (image.float_data ()[0], 0.0); EXPECT_EQ (image.float_data ()[1], 0.0); EXPECT_EQ (image.float_data ()[5], 0.0); EXPECT_EQ (image.float_data ()[6], 0.0); EXPECT_EQ (copy1.equals (&image), false); image.set_matrix (db::Matrix3d (db::DCplxTrans (2.5, 90, false, db::DVector (1, -2))) * db::Matrix3d::mag (2.5, 1.0)); EXPECT_EQ (image.matrix ().mag_x (), 2.5 * 2.5); image.set_matrix (db::Matrix3d (db::DCplxTrans (2.5, 90, false, db::DVector (1, -2))) * db::Matrix3d::mag (2.5, 1.25)); EXPECT_EQ (image.matrix ().mag_y (), 1.25 * 2.5); image.set_min_value (0.5); EXPECT_EQ (image.min_value (), 0.5); image.set_max_value (25.0); EXPECT_EQ (image.max_value (), 25); copy1 = image; EXPECT_EQ (copy1.equals (&image), true); img::DataMapping dm (image.data_mapping ()); dm.brightness = 0.5; dm.contrast = 0.25; dm.gamma = 1.5; dm.red_gain = 1.25; dm.green_gain = 0.75; dm.blue_gain = 2.5; QColor c (128, 255, 64); dm.false_color_nodes.insert (dm.false_color_nodes.begin () + 1, std::make_pair (0.5, c)); image.set_data_mapping (dm); EXPECT_EQ (copy1.equals (&image), false); copy1 = image; EXPECT_EQ (copy1.equals (&image), true); EXPECT_EQ (copy1.data_mapping ().brightness, 0.5); EXPECT_EQ (copy1.data_mapping ().red_gain, 1.25); EXPECT_EQ (copy1.data_mapping ().false_color_nodes.size (), size_t (3)); img::Object copy2; copy2.from_string (image.to_string ().c_str ()); EXPECT_EQ (copy2.data_mapping ().brightness, 0.5); EXPECT_EQ (tl::to_string (copy2.data_mapping ().red_gain), "1.25"); EXPECT_EQ (copy2.data_mapping ().false_color_nodes.size (), size_t (3)); EXPECT_EQ (copy2.equals (&image), true); EXPECT_EQ (image.to_string (), copy2.to_string ()); EXPECT_EQ (image.mask (1, 2), true); image.set_mask (1, 2, false); EXPECT_EQ (image.mask (1, 2), false); image.set_mask (1, 2, true); EXPECT_EQ (image.mask (1, 2), true); image.set_mask (1, 2, false); copy2.from_string (image.to_string ().c_str ()); EXPECT_EQ (image.mask (1, 2), false); EXPECT_EQ (copy2.mask (1, 2), false); EXPECT_EQ (image.to_string (), copy2.to_string ()); image.set_mask (1, 2, true); image.from_string (copy2.to_string ().c_str ()); EXPECT_EQ (image.mask (1, 2), false); } TEST(2) { for (unsigned int channel = 0; channel < 3; ++channel) { img::Object image (12, 8, db::DCplxTrans (), true); EXPECT_EQ (image.is_color (), true); EXPECT_EQ (image.float_data (channel)[0], 0.0); EXPECT_EQ (image.float_data (channel)[1], 0.0); EXPECT_EQ (image.float_data (channel)[12*8-1], 0.0); EXPECT_EQ (image.data_length(), size_t (12 * 8)); EXPECT_EQ (db::DCplxTrans (image.matrix ()).to_string (), "r0 *1 0,0"); img::Object copy1 (image); EXPECT_EQ (copy1.equals (&image), true); image.set_matrix (db::Matrix3d (db::DCplxTrans (2.5, 90, false, db::DVector (1, -2)))); EXPECT_EQ (db::DCplxTrans (image.matrix ()).to_string (), "r90 *2.5 1,-2"); EXPECT_EQ (copy1.equals (&image), false); copy1 = image; EXPECT_EQ (copy1.equals (&image), true); EXPECT_EQ (copy1.float_data (channel) == image.float_data (channel), true); std::vector d[3]; for (unsigned int j = 0; j < 3; ++j) { for (unsigned int i = 0; i < image.data_length (); ++i) { d[j].push_back (image.float_data (j)[i]); } } copy1.set_data (12, 8, d[0], d[1], d[2]); EXPECT_EQ (copy1.equals (&image), true); EXPECT_EQ (copy1.float_data (channel) == image.float_data (channel), false); EXPECT_EQ (copy1.width (), size_t (12)); EXPECT_EQ (copy1.height (), size_t (8)); d[channel][0] = 12.5; d[channel][5] = -12.5; copy1.set_data (12, 8, d[0], d[1], d[2]); EXPECT_EQ (copy1.float_data (channel) == image.float_data (channel), false); EXPECT_EQ (copy1.float_data (channel)[0], 12.5); EXPECT_EQ (copy1.float_data (channel)[1], 0.0); EXPECT_EQ (copy1.float_data (channel)[5], -12.5); EXPECT_EQ (copy1.float_data (channel)[6], 0.0); EXPECT_EQ (image.float_data (channel)[0], 0.0); EXPECT_EQ (image.float_data (channel)[1], 0.0); EXPECT_EQ (image.float_data (channel)[5], 0.0); EXPECT_EQ (image.float_data (channel)[6], 0.0); EXPECT_EQ (copy1.equals (&image), false); image.set_matrix (db::Matrix3d (db::DCplxTrans (2.5, 90, false, db::DVector (1, -2))) * db::Matrix3d::mag (2.5, 1.0)); EXPECT_EQ (image.matrix ().mag_x (), 2.5 * 2.5); image.set_matrix (db::Matrix3d (db::DCplxTrans (2.5, 90, false, db::DVector (1, -2))) * db::Matrix3d::mag (2.5, 1.25)); EXPECT_EQ (image.matrix ().mag_y (), 1.25 * 2.5); image.set_min_value (0.5); EXPECT_EQ (image.min_value (), 0.5); image.set_max_value (25.0); EXPECT_EQ (image.max_value (), 25); copy1 = image; EXPECT_EQ (copy1.equals (&image), true); img::DataMapping dm (image.data_mapping ()); dm.brightness = 0.5; dm.contrast = 0.25; dm.gamma = 1.5; dm.red_gain = 1.25; dm.green_gain = 0.75; dm.blue_gain = 2.5; QColor c (128, 255, 64); dm.false_color_nodes.insert (dm.false_color_nodes.begin () + 1, std::make_pair (0.5, c)); image.set_data_mapping (dm); EXPECT_EQ (copy1.equals (&image), false); copy1 = image; EXPECT_EQ (copy1.equals (&image), true); EXPECT_EQ (copy1.data_mapping ().brightness, 0.5); EXPECT_EQ (copy1.data_mapping ().red_gain, 1.25); EXPECT_EQ (copy1.data_mapping ().false_color_nodes.size (), size_t (3)); img::Object copy2; copy2.from_string (image.to_string ().c_str ()); EXPECT_EQ (copy2.data_mapping ().brightness, 0.5); EXPECT_EQ (tl::to_string (copy2.data_mapping ().red_gain), "1.25"); EXPECT_EQ (copy2.data_mapping ().false_color_nodes.size (), size_t (3)); EXPECT_EQ (copy2.equals (&image), true); EXPECT_EQ (image.to_string (), copy2.to_string ()); EXPECT_EQ (image.mask (1, 2), true); image.set_mask (1, 2, false); EXPECT_EQ (image.mask (1, 2), false); image.set_mask (1, 2, true); EXPECT_EQ (image.mask (1, 2), true); image.set_mask (1, 2, false); copy2.from_string (image.to_string ().c_str ()); EXPECT_EQ (image.mask (1, 2), false); EXPECT_EQ (copy2.mask (1, 2), false); EXPECT_EQ (image.to_string (), copy2.to_string ()); image.set_mask (1, 2, true); image.from_string (copy2.to_string ().c_str ()); EXPECT_EQ (image.mask (1, 2), false); } } TEST(3) { unsigned char d[] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 11, 11, 11, 21, 22, 23, 24, 25, 26, 27, 28, 29, 21, 21, 21, 31, 32, 33, 34, 35, 36, 37, 38, 39, 31, 31, 31, 41, 42, 43, 44, 45, 46, 47, 48, 49, 41, 41, 41, 51, 52, 53, 54, 55, 56, 57, 58, 59, 51, 51, 51, 61, 62, 63, 64, 65, 66, 67, 68, 69, 61, 61, 61, 71, 72, 73, 74, 75, 76, 77, 78, 79, 71, 71, 71, 81, 82, 83, 84, 85, 86, 87, 88, 89, 81, 81, 81, }; unsigned char *data = new unsigned char [12*8]; memcpy (data, d, 12*8); img::Object image (12, 8, db::DCplxTrans (), data); EXPECT_EQ (image.is_color (), false); EXPECT_EQ (image.is_byte_data (), true); EXPECT_EQ ((int)image.byte_data ()[0], 11); EXPECT_EQ ((int)image.byte_data ()[1], 12); EXPECT_EQ ((int)image.byte_data ()[12*8-1], 81); EXPECT_EQ (image.data_length (), size_t (12 * 8)); img::Object copy1 (image); EXPECT_EQ (copy1.equals (&image), true); image.set_matrix (db::Matrix3d (db::DCplxTrans (2.5, 90, false, db::DVector (1, -2)))); EXPECT_EQ (db::DCplxTrans (image.matrix ()).to_string (), "r90 *2.5 1,-2"); EXPECT_EQ (copy1.equals (&image), false); copy1 = image; EXPECT_EQ (copy1.equals (&image), true); EXPECT_EQ (copy1.is_byte_data (), true); EXPECT_EQ (copy1.byte_data () == image.byte_data (), true); unsigned char *data2 = new unsigned char[8*12]; unsigned char *d2 = data2; for (unsigned int i = 0; i < image.data_length (); ++i) { *d2++ = image.byte_data ()[i]; } copy1.set_data (12, 8, data2); EXPECT_EQ (copy1.is_byte_data (), true); EXPECT_EQ (copy1.equals (&image), true); EXPECT_EQ (copy1.byte_data () == image.byte_data (), false); EXPECT_EQ (copy1.width (), size_t (12)); EXPECT_EQ (copy1.height (), size_t (8)); EXPECT_EQ (image.mask (1, 2), true); image.set_mask (1, 2, false); EXPECT_EQ (image.mask (1, 2), false); image.set_mask (1, 2, true); EXPECT_EQ (image.mask (1, 2), true); image.set_mask (1, 2, false); copy1.from_string (image.to_string ().c_str ()); EXPECT_EQ (image.mask (1, 2), false); EXPECT_EQ (copy1.mask (1, 2), false); EXPECT_EQ (image.to_string (), copy1.to_string ()); image.set_mask (1, 2, true); image.from_string (copy1.to_string ().c_str ()); EXPECT_EQ (image.mask (1, 2), false); }