1 /* Copyright (C) 2003 Scott Wheeler <wheeler@kde.org>
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 #include <cppunit/extensions/HelperMacros.h>
26 #include <tbytevector.h>
27 #include <tbytevectorlist.h>
30 using namespace TagLib;
32 class TestByteVector : public CppUnit::TestFixture
34 CPPUNIT_TEST_SUITE(TestByteVector);
35 CPPUNIT_TEST(testByteVector);
36 CPPUNIT_TEST(testFind1);
37 CPPUNIT_TEST(testFind2);
38 CPPUNIT_TEST(testRfind1);
39 CPPUNIT_TEST(testRfind2);
40 CPPUNIT_TEST_SUITE_END();
44 void testConversion(unsigned int i, unsigned char a, unsigned char b, unsigned char c, unsigned char d)
52 CPPUNIT_ASSERT(v.toUInt(false) == i);
58 CPPUNIT_ASSERT(v.toUInt() == i);
63 ByteVector v("foobar");
65 CPPUNIT_ASSERT(v.find("ob") == 2);
66 CPPUNIT_ASSERT(v.find('b') == 3);
70 CPPUNIT_ASSERT(n.toUInt(true) == 16777216);
71 CPPUNIT_ASSERT(n.toUInt(false) == 1);
72 CPPUNIT_ASSERT(ByteVector::fromUInt(16777216, true) == n);
73 CPPUNIT_ASSERT(ByteVector::fromUInt(1, false) == n);
75 CPPUNIT_ASSERT(ByteVector::fromUInt(0xa0).toUInt() == 0xa0);
77 testConversion(0x000000a0, 0x00, 0x00, 0x00, 0xa0);
78 testConversion(0xd50bf072, 0xd5, 0x0b, 0xf0, 0x72);
80 ByteVector intVector(2, 0);
81 intVector[0] = char(0xfc);
82 intVector[1] = char(0x00);
83 CPPUNIT_ASSERT(intVector.toShort() == -1024);
84 intVector[0] = char(0x04);
85 intVector[1] = char(0x00);
86 CPPUNIT_ASSERT(intVector.toShort() == 1024);
88 CPPUNIT_ASSERT(ByteVector::fromLongLong(1).toLongLong() == 1);
89 CPPUNIT_ASSERT(ByteVector::fromLongLong(0).toLongLong() == 0);
90 CPPUNIT_ASSERT(ByteVector::fromLongLong(0xffffffffffffffffLL).toLongLong() == -1);
91 CPPUNIT_ASSERT(ByteVector::fromLongLong(0xfffffffffffffffeLL).toLongLong() == -2);
92 CPPUNIT_ASSERT(ByteVector::fromLongLong(1024).toLongLong() == 1024);
96 CPPUNIT_ASSERT(a1 == "foobar");
100 CPPUNIT_ASSERT(a2 == "foob");
104 CPPUNIT_ASSERT(a3 == "b");
106 ByteVector s1("foo");
107 CPPUNIT_ASSERT(ByteVectorList::split(s1, " ").size() == 1);
110 CPPUNIT_ASSERT(ByteVectorList::split(s2, " ").size() == 1);
113 CPPUNIT_ASSERT(ByteVector().size() == 0);
114 CPPUNIT_ASSERT(ByteVector("asdf").clear().size() == 0);
115 CPPUNIT_ASSERT(ByteVector("asdf").clear() == ByteVector());
120 CPPUNIT_ASSERT_EQUAL(4, ByteVector("....SggO."). find("SggO"));
121 CPPUNIT_ASSERT_EQUAL(4, ByteVector("....SggO."). find("SggO", 0));
122 CPPUNIT_ASSERT_EQUAL(4, ByteVector("....SggO."). find("SggO", 1));
123 CPPUNIT_ASSERT_EQUAL(4, ByteVector("....SggO."). find("SggO", 2));
124 CPPUNIT_ASSERT_EQUAL(4, ByteVector("....SggO."). find("SggO", 3));
125 CPPUNIT_ASSERT_EQUAL(4, ByteVector("....SggO."). find("SggO", 4));
126 CPPUNIT_ASSERT_EQUAL(-1, ByteVector("....SggO."). find("SggO", 5));
127 CPPUNIT_ASSERT_EQUAL(-1, ByteVector("....SggO."). find("SggO", 6));
128 CPPUNIT_ASSERT_EQUAL(-1, ByteVector("....SggO."). find("SggO", 7));
129 CPPUNIT_ASSERT_EQUAL(-1, ByteVector("....SggO."). find("SggO", 8));
134 CPPUNIT_ASSERT_EQUAL(0, ByteVector("\x01", 1).find("\x01"));
135 CPPUNIT_ASSERT_EQUAL(0, ByteVector("\x01\x02", 2).find("\x01\x02"));
136 CPPUNIT_ASSERT_EQUAL(-1, ByteVector("\x01", 1).find("\x02"));
137 CPPUNIT_ASSERT_EQUAL(-1, ByteVector("\x01\x02", 2).find("\x01\x03"));
142 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS", 0));
143 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS", 1));
144 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS", 2));
145 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS", 3));
146 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS", 4));
147 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS", 5));
148 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS", 6));
149 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS", 7));
150 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS", 8));
151 CPPUNIT_ASSERT_EQUAL(1, ByteVector(".OggS....").rfind("OggS"));
156 ByteVector r0("**************");
157 ByteVector r1("OggS**********");
158 ByteVector r2("**********OggS");
159 ByteVector r3("OggS******OggS");
160 ByteVector r4("OggS*OggS*OggS");
162 CPPUNIT_ASSERT_EQUAL(-1, r0.find("OggS"));
163 CPPUNIT_ASSERT_EQUAL(-1, r0.rfind("OggS"));
164 CPPUNIT_ASSERT_EQUAL(0, r1.find("OggS"));
165 CPPUNIT_ASSERT_EQUAL(0, r1.rfind("OggS"));
166 CPPUNIT_ASSERT_EQUAL(10, r2.find("OggS"));
167 CPPUNIT_ASSERT_EQUAL(10, r2.rfind("OggS"));
168 CPPUNIT_ASSERT_EQUAL(0, r3.find("OggS"));
169 CPPUNIT_ASSERT_EQUAL(10, r3.rfind("OggS"));
170 CPPUNIT_ASSERT_EQUAL(10, r4.rfind("OggS"));
171 CPPUNIT_ASSERT_EQUAL(10, r4.rfind("OggS", 0));
172 CPPUNIT_ASSERT_EQUAL(5, r4.rfind("OggS", 7));
173 CPPUNIT_ASSERT_EQUAL(10, r4.rfind("OggS", 12));
178 CPPUNIT_TEST_SUITE_REGISTRATION(TestByteVector);