]> gitweb.michael.orlitzky.com - hath.git/blob - src/Maskbits.hs
Update for QuickCheck 2.
[hath.git] / src / Maskbits.hs
1 module Maskbits
2 ( Maskbits(..),
3 decrement,
4 maskbits_from_string
5 ) where
6
7 import Test.QuickCheck
8
9 -- A type representing the number of bits in a CIDR netmask.
10 data Maskbits = None
11 | Zero
12 | One
13 | Two
14 | Three
15 | Four
16 | Five
17 | Six
18 | Seven
19 | Eight
20 | Nine
21 | Ten
22 | Eleven
23 | Twelve
24 | Thirteen
25 | Fourteen
26 | Fifteen
27 | Sixteen
28 | Seventeen
29 | Eighteen
30 | Nineteen
31 | Twenty
32 | TwentyOne
33 | TwentyTwo
34 | TwentyThree
35 | TwentyFour
36 | TwentyFive
37 | TwentySix
38 | TwentySeven
39 | TwentyEight
40 | TwentyNine
41 | Thirty
42 | ThirtyOne
43 | ThirtyTwo
44 deriving (Eq, Ord)
45
46
47 instance Show Maskbits where
48 show None = "None"
49 show Zero = "0"
50 show One = "1"
51 show Two = "2"
52 show Three = "3"
53 show Four = "4"
54 show Five = "5"
55 show Six = "6"
56 show Seven = "7"
57 show Eight = "8"
58 show Nine = "9"
59 show Ten = "10"
60 show Eleven = "11"
61 show Twelve = "12"
62 show Thirteen = "13"
63 show Fourteen = "14"
64 show Fifteen = "15"
65 show Sixteen = "16"
66 show Seventeen = "17"
67 show Eighteen = "18"
68 show Nineteen = "19"
69 show Twenty = "20"
70 show TwentyOne = "21"
71 show TwentyTwo = "22"
72 show TwentyThree = "23"
73 show TwentyFour = "24"
74 show TwentyFive = "25"
75 show TwentySix = "26"
76 show TwentySeven = "27"
77 show TwentyEight = "28"
78 show TwentyNine = "29"
79 show Thirty = "30"
80 show ThirtyOne = "31"
81 show ThirtyTwo = "32"
82
83
84 instance Arbitrary Maskbits where
85 arbitrary = elements [ Zero,
86 One,
87 Two,
88 Three,
89 Four,
90 Five,
91 Six,
92 Seven,
93 Eight,
94 Nine,
95 Ten,
96 Eleven,
97 Twelve,
98 Thirteen,
99 Fourteen,
100 Fifteen,
101 Sixteen,
102 Seventeen,
103 Eighteen,
104 Nineteen,
105 Twenty,
106 TwentyOne,
107 TwentyTwo,
108 TwentyThree,
109 TwentyFour,
110 TwentyFive,
111 TwentySix,
112 TwentySeven,
113 TwentyEight,
114 TwentyNine,
115 Thirty,
116 ThirtyOne,
117 ThirtyTwo ]
118
119
120
121 -- There are only 32 bits in an IPv4 address, so there
122 -- can't be more bits than that in the mask.
123 maskbits_from_int :: Int -> Maskbits
124 maskbits_from_int 0 = Zero
125 maskbits_from_int 1 = One
126 maskbits_from_int 2 = Two
127 maskbits_from_int 3 = Three
128 maskbits_from_int 4 = Four
129 maskbits_from_int 5 = Five
130 maskbits_from_int 6 = Six
131 maskbits_from_int 7 = Seven
132 maskbits_from_int 8 = Eight
133 maskbits_from_int 9 = Nine
134 maskbits_from_int 10 = Ten
135 maskbits_from_int 11 = Eleven
136 maskbits_from_int 12 = Twelve
137 maskbits_from_int 13 = Thirteen
138 maskbits_from_int 14 = Fourteen
139 maskbits_from_int 15 = Fifteen
140 maskbits_from_int 16 = Sixteen
141 maskbits_from_int 17 = Seventeen
142 maskbits_from_int 18 = Eighteen
143 maskbits_from_int 19 = Nineteen
144 maskbits_from_int 20 = Twenty
145 maskbits_from_int 21 = TwentyOne
146 maskbits_from_int 22 = TwentyTwo
147 maskbits_from_int 23 = TwentyThree
148 maskbits_from_int 24 = TwentyFour
149 maskbits_from_int 25 = TwentyFive
150 maskbits_from_int 26 = TwentySix
151 maskbits_from_int 27 = TwentySeven
152 maskbits_from_int 28 = TwentyEight
153 maskbits_from_int 29 = TwentyNine
154 maskbits_from_int 30 = Thirty
155 maskbits_from_int 31 = ThirtyOne
156 maskbits_from_int 32 = ThirtyTwo
157 maskbits_from_int _ = None
158
159
160 maskbits_from_string :: String -> Maskbits
161 maskbits_from_string s =
162 case (reads s :: [(Int, String)]) of
163 [] -> None
164 x:_ -> maskbits_from_int (fst x)
165
166
167
168 decrement :: Maskbits -> Maskbits
169 decrement None = None
170 decrement Zero = None
171 decrement One = Zero
172 decrement Two = One
173 decrement Three = Two
174 decrement Four = Three
175 decrement Five = Four
176 decrement Six = Five
177 decrement Seven = Six
178 decrement Eight = Seven
179 decrement Nine = Eight
180 decrement Ten = Nine
181 decrement Eleven = Ten
182 decrement Twelve = Eleven
183 decrement Thirteen = Twelve
184 decrement Fourteen = Thirteen
185 decrement Fifteen = Fourteen
186 decrement Sixteen = Fifteen
187 decrement Seventeen = Sixteen
188 decrement Eighteen = Seventeen
189 decrement Nineteen = Eighteen
190 decrement Twenty = Nineteen
191 decrement TwentyOne = Twenty
192 decrement TwentyTwo = TwentyOne
193 decrement TwentyThree = TwentyTwo
194 decrement TwentyFour = TwentyThree
195 decrement TwentyFive = TwentyFour
196 decrement TwentySix = TwentyFive
197 decrement TwentySeven = TwentySix
198 decrement TwentyEight = TwentySeven
199 decrement TwentyNine = TwentyEight
200 decrement Thirty = TwentyNine
201 decrement ThirtyOne = Thirty
202 decrement ThirtyTwo = ThirtyOne