Added a deque contract

This commit is contained in:
Anton Beloglazov 2012-08-30 16:33:22 +10:00
parent f51ecbc323
commit a5de671823
3 changed files with 118 additions and 0 deletions

View File

@ -14,11 +14,13 @@
from contracts import new_contract
import collections
import libvirt
import sqlalchemy
import neat.db
new_contract('deque', collections.deque)
new_contract('function', lambda x: hasattr(x, '__call__'))
new_contract('virConnect', libvirt.virConnect)
new_contract('virDomain', libvirt.virDomain)

View File

@ -85,3 +85,35 @@ def estimate_probability(data, window_size, state):
:rtype: float,>=0
"""
return float(data.count(state)) / window_size
@contract
def update_request_windows(request_windows, max_window_size, previous_state, current_state):
""" Update and return the updated request windows.
(defn update-request-windows [request-windows max-window-size previous-state current-state]
{:pre [(vector? request-windows)
(posnum? max-window-size)
(not-negnum? previous-state)
(not-negnum? current-state)]
:post [(coll? %)]}
(let [window (get request-windows previous-state)]
(assoc request-windows previous-state
(conj (take (dec max-window-size) window) current-state))))
:param request_windows: The previous request windows.
:type request_windows: list(int)
:param max_window_size: The maximum window size.
:type max_window_size: int
:param previous_state: The previous state.
:type previous_state: int
:param current_state: The current state.
:type current_state: int
:return: The updated request windows.
:rtype: list(int)
"""
window = request_windows[previous_state]
request_windows[previous_state]

View File

@ -15,6 +15,8 @@
from mocktest import *
from pyqcy import *
from collections import deque
import neat.local.overload.mhod.multisize_estimation as m
@ -60,3 +62,85 @@ class Multisize(TestCase):
m.estimate_probability([1, 1, 0, 0, 1, 1, 1, 1, 1, 1], 200, 0), 0.01)
self.assertEqual(
m.estimate_probability([1, 1, 0, 0, 1, 1, 1, 1, 1, 1], 200, 1), 0.04)
def test_update_request_windows(self):
windows = [[0, 0],
[1, 1]]
self.assertEqual(m.update_request_windows(windows, 4, 0, 0), [[0, 0, 0],
[1, 1]])
self.assertEqual(m.update_request_windows(windows, 4, 0, 1), [[0, 0, 1],
[1, 1]])
self.assertEqual(m.update_request_windows(windows, 4, 1, 0), [[0, 0],
[1, 1, 0]])
self.assertEqual(m.update_request_windows(windows, 4, 1, 1), [[0, 0],
[1, 1, 1]])
self.assertEqual(m.update_request_windows(windows, 2, 0, 0), [[0, 0],
[1, 1]])
self.assertEqual(m.update_request_windows(windows, 2, 0, 1), [[0, 1],
[1, 1]])
self.assertEqual(m.update_request_windows(windows, 2, 1, 0), [[0, 0],
[1, 0]])
self.assertEqual(m.update_request_windows(windows, 2, 1, 1), [[0, 0],
[1, 1]])
windows = [[0, 0],
[1, 1],
[2, 2]]
self.assertEqual(m.update_request_windows(windows, 4, 0, 0), [[0, 0, 0],
[1, 1],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 4, 0, 1), [[0, 0, 1],
[1, 1],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 4, 0, 2), [[0, 0, 2],
[1, 1],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 4, 1, 0), [[0, 0],
[1, 1, 0],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 4, 1, 1), [[0, 0],
[1, 1, 1],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 4, 1, 2), [[0, 0],
[1, 1, 2],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 4, 2, 0), [[0, 0],
[1, 1],
[2, 2, 0]])
self.assertEqual(m.update_request_windows(windows, 4, 2, 1), [[0, 0],
[1, 1],
[2, 2, 1]])
self.assertEqual(m.update_request_windows(windows, 4, 2, 2), [[0, 0],
[1, 1],
[2, 2, 2]])
self.assertEqual(m.update_request_windows(windows, 2, 0, 0), [[0, 0],
[1, 1],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 2, 0, 1), [[0, 1],
[1, 1],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 2, 0, 2), [[0, 2],
[1, 1],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 2, 1, 0), [[0, 0],
[1, 0],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 2, 1, 1), [[0, 0],
[1, 1],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 2, 1, 2), [[0, 0],
[1, 2],
[2, 2]])
self.assertEqual(m.update_request_windows(windows, 2, 2, 0), [[0, 0],
[1, 1],
[2, 0]])
self.assertEqual(m.update_request_windows(windows, 2, 2, 1), [[0, 0],
[1, 1],
[2, 1]])
self.assertEqual(m.update_request_windows(windows, 2, 2, 2), [[0, 0],
[1, 1],
[2, 2]])