public void BasicTest()
        {
            const string TestString = "test string";

            str str1 = new str(TestString);

            // test constructor:
            Assert.AreEqual(str1.ToString(), TestString);

            // test directly assign string value
            str str2 = TestString;

            Assert.AreEqual(str2.ToString(), TestString);
            Assert.IsFalse(ReferenceEquals(str1, str2));

            // test Equals
            Assert.IsTrue(str1.Equals(str2));
            Assert.IsTrue(str1.Equals((object)str2));

            // test ==
            Assert.IsTrue(str1 == str2);

            // test !=
            Assert.IsTrue(str1 != new str(TestString + " "));

            // test +
            Assert.IsTrue(str1 + str1 == new str(TestString + TestString));

            // test indexer
            Assert.AreEqual('e', str1[1]);
            str1[1] = 'E';
            Assert.AreEqual(str1, "tEst string");
            str1[1] = 'e';

            // compare with built-in string
            Assert.IsTrue(str1.Equals(TestString));
        }