Ejemplo n.º 1
0
        private static void DoTestRunningAverage(RunningAverage runningAverage)
        {
            Assert.AreEqual(0, runningAverage.Count);

            Assert.IsTrue(Double.IsNaN(runningAverage.Average));
            runningAverage.AddDatum(1.0);
            Assert.AreEqual(1, runningAverage.Count);
            Assert.AreEqual(1.0, runningAverage.Average);
            runningAverage.AddDatum(1.0);
            Assert.AreEqual(2, runningAverage.Count);
            Assert.AreEqual(1.0, runningAverage.Average);
            runningAverage.AddDatum(4.0);
            Assert.AreEqual(3, runningAverage.Count);
            Assert.AreEqual(2.0, runningAverage.Average);
            runningAverage.AddDatum(-4.0);
            Assert.AreEqual(4, runningAverage.Count);
            Assert.AreEqual(0.5, runningAverage.Average);

            runningAverage.RemoveDatum(-4.0);
            Assert.AreEqual(3, runningAverage.Count);
            Assert.AreEqual(2.0, runningAverage.Average);
            runningAverage.RemoveDatum(4.0);
            Assert.AreEqual(2, runningAverage.Count);
            Assert.AreEqual(1.0, runningAverage.Average);

            runningAverage.ChangeDatum(0.0);
            Assert.AreEqual(2, runningAverage.Count);
            Assert.AreEqual(1.0, runningAverage.Average);
            runningAverage.ChangeDatum(2.0);
            Assert.AreEqual(2, runningAverage.Count);
            Assert.AreEqual(2.0, runningAverage.Average);
        }
Ejemplo n.º 2
0
	    private static void DoTestRunningAverage(RunningAverage runningAverage) 
        {

		    Assert.AreEqual(0, runningAverage.Count);
            
		    Assert.IsTrue(Double.IsNaN(runningAverage.Average));
		    runningAverage.AddDatum(1.0);
		    Assert.AreEqual(1, runningAverage.Count);
		    Assert.AreEqual(1.0, runningAverage.Average);
		    runningAverage.AddDatum(1.0);
		    Assert.AreEqual(2, runningAverage.Count);
		    Assert.AreEqual(1.0, runningAverage.Average);
		    runningAverage.AddDatum(4.0);
		    Assert.AreEqual(3, runningAverage.Count);
		    Assert.AreEqual(2.0, runningAverage.Average);
		    runningAverage.AddDatum(-4.0);
		    Assert.AreEqual(4, runningAverage.Count);
		    Assert.AreEqual(0.5, runningAverage.Average);

		    runningAverage.RemoveDatum(-4.0);
		    Assert.AreEqual(3, runningAverage.Count);
		    Assert.AreEqual(2.0, runningAverage.Average);
		    runningAverage.RemoveDatum(4.0);
		    Assert.AreEqual(2, runningAverage.Count);
		    Assert.AreEqual(1.0, runningAverage.Average);

		    runningAverage.ChangeDatum(0.0);
		    Assert.AreEqual(2, runningAverage.Count);
		    Assert.AreEqual(1.0, runningAverage.Average);
		    runningAverage.ChangeDatum(2.0);
		    Assert.AreEqual(2, runningAverage.Count);
		    Assert.AreEqual(2.0, runningAverage.Average);
	    }
Ejemplo n.º 3
0
 public void UpdateItemPref(Object itemID, double prefDelta, bool remove)
 {
     if (!remove && stdDevWeighted)
     {
         throw new NotSupportedException("Can't update only when stdDevWeighted is set");
     }
     buildAverageDiffsLock.AcquireReaderLock(Constants.INFINITE_TIMEOUT);
     try
     {
         foreach (KeyValuePair <Object, Dictionary <Object, RunningAverage> > entry in averageDiffs)
         {
             bool matchesItemID1 = itemID.Equals(entry.Key);
             foreach (KeyValuePair <Object, RunningAverage> entry2 in entry.Value)
             {
                 RunningAverage average = entry2.Value;
                 if (matchesItemID1)
                 {
                     if (remove)
                     {
                         average.RemoveDatum(prefDelta);
                     }
                     else
                     {
                         average.ChangeDatum(-prefDelta);
                     }
                 }
                 else if (itemID.Equals(entry2.Key))
                 {
                     if (remove)
                     {
                         average.RemoveDatum(-prefDelta);
                     }
                     else
                     {
                         average.ChangeDatum(prefDelta);
                     }
                 }
             }
         }
         RunningAverage itemAverage;
         if (averageItemPref.TryGetValue(itemID, out itemAverage) && itemAverage != null)
         {
             itemAverage.ChangeDatum(prefDelta);
         }
     }
     finally
     {
         buildAverageDiffsLock.ReleaseReaderLock();
     }
 }
Ejemplo n.º 4
0
        public override void SetPreference(Object userID, Object itemID, double value)
        {
            double prefDelta;

            try
            {
                User       theUser = this.DataModel.GetUser(userID);
                Preference oldPref = theUser.GetPreferenceFor(itemID);
                prefDelta = oldPref == null ? value : value - oldPref.Value;
            }
            catch
            {
                prefDelta = value;
            }
            base.SetPreference(userID, itemID, value);

            buildAveragesLock.AcquireWriterLock(Constants.INFINITE_TIMEOUT);
            try
            {
                RunningAverage average = null;
                if (!itemAverages.TryGetValue(itemID, out average))
                {
                    RunningAverage newAverage = new FullRunningAverage();
                    newAverage.AddDatum(prefDelta);
                    itemAverages.Add(itemID, newAverage);
                }
                else
                {
                    average.ChangeDatum(prefDelta);
                }
            }
            finally
            {
                buildAveragesLock.ReleaseWriterLock();
            }
        }