Added a deque contract
This commit is contained in:
parent
f51ecbc323
commit
a5de671823
@ -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)
|
||||
|
@ -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]
|
||||
|
@ -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]])
|
||||
|
Loading…
x
Reference in New Issue
Block a user