public void Concurrent()
        {
            ThreadModelAttribute tma = BasicCheck(ThreadModel.Concurrent, false);

            Assert.IsTrue(tma.Equals(tma), "Equals");

            ThreadModelAttribute tmae = BasicCheck(ThreadModel.Concurrent | ThreadModel.AllowEveryCaller, true);

            Assert.IsFalse(tmae.Equals((ThreadModelAttribute)null), "!Equals");
            Assert.IsFalse(tma == tmae, "==");
        }
        public void Serializable()
        {
            ThreadModelAttribute tma = BasicCheck(ThreadModel.Serializable, false);

            Assert.IsTrue(tma.Equals((object)tma), "Equals");

            ThreadModelAttribute tmae = BasicCheck(ThreadModel.Serializable | ThreadModel.AllowEveryCaller, true);

            Assert.IsFalse(tmae.Equals((ThreadModelAttribute)null), "!Equals");
            Assert.IsTrue(tma != null, "!= null");
            Assert.IsTrue(null != tmae, "null !=");
        }
        public void SingleThread()
        {
            ThreadModelAttribute tma = BasicCheck(ThreadModel.SingleThread, false);

            Assert.IsTrue(tma.Equals((object)tma), "Equals");
            Assert.IsFalse(tma == new ThreadModelAttribute(ThreadModel.MainThread), "==");

            ThreadModelAttribute tmae = BasicCheck(ThreadModel.SingleThread | ThreadModel.AllowEveryCaller, true);

            Assert.IsFalse(tmae.Equals((object)null), "!Equals");
            Assert.IsFalse(tma == tmae, "==");
        }
		private ThreadModelAttribute BasicCheck (ThreadModel model, bool every)
		{
			string name = model.ToString ();
			ThreadModelAttribute tma = new ThreadModelAttribute (model);
			Assert.AreEqual (model & ~ThreadModel.AllowEveryCaller, tma.Model, name);
			Assert.AreEqual (every, tma.AllowsEveryCaller, name + ".AllowsEveryCaller");
			Assert.AreEqual (every, tma.ToString ().Contains ("AllowEveryCaller"), "ToString()");

			int code = tma.GetHashCode ();
			tma.AllowsEveryCaller = !tma.AllowsEveryCaller;
			Assert.AreNotEqual (code, tma.GetHashCode (), name + "!HashCode");
			tma.AllowsEveryCaller = !tma.AllowsEveryCaller;
			return tma;
		}
        private ThreadModelAttribute BasicCheck(ThreadModel model, bool every)
        {
            string name = model.ToString();
            ThreadModelAttribute tma = new ThreadModelAttribute(model);

            Assert.AreEqual(model & ~ThreadModel.AllowEveryCaller, tma.Model, name);
            Assert.AreEqual(every, tma.AllowsEveryCaller, name + ".AllowsEveryCaller");
            Assert.AreEqual(every, tma.ToString().Contains("AllowEveryCaller"), "ToString()");

            int code = tma.GetHashCode();

            tma.AllowsEveryCaller = !tma.AllowsEveryCaller;
            Assert.AreNotEqual(code, tma.GetHashCode(), name + "!HashCode");
            tma.AllowsEveryCaller = !tma.AllowsEveryCaller;
            return(tma);
        }