{-# LANGUAGE NoImplicitPrelude #-}

module Aftovolio.Tests where

import GHC.Base
import GHC.Enum (toEnum)
import GHC.Int (Int8)
import GHC.List (elem)
import GHC.Num ((*), (+), (-))
import GHC.Real (quot, rem)

sel :: Int -> [[Int8]]
sel :: Int -> [[Int8]]
sel Int
x
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
179 = []
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
4 = [[Int8
1], [Int8
2, Int8
1], [Int8
3, Int8
2], [Int8
4, Int8
3, Int8
2], [Int8
5, Int8
4, Int8
3], [Int8
6, Int8
5, Int8
4, Int8
3, Int8
2]] -- all cases are present: 2, 3, 4, 5, 6, 7. Therefore, the slowest ones.
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
2 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
5 = [[Int8
1], [Int8
2], [Int8
3], [Int8
4, Int8
3], [Int8
5, Int8
4], [Int8
6, Int8
5, Int8
4]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
7 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
8 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
9 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0]]
    ------------------------------------------------------------------
    | Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
20 Bool -> Bool -> Bool
&& Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
26 Bool -> Bool -> Bool
&& Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
21 = [[Int8
1]] -- at least 7 is omitted, but probably 6, or even 5, or even 4, or even 3. 2 is however present.
    | Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
27 Bool -> Bool -> Bool
&& Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
29 = [[Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
30 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
34 = [[Int8
1], [Int8
2, Int8
1]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
32 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
35 = [[Int8
1], [Int8
2]]
    | Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
37 Bool -> Bool -> Bool
&& Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
39 = [[Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
40 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
44 = [[Int8
1], [Int8
2, Int8
1], [Int8
3, Int8
2]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
42 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
45 = [[Int8
1], [Int8
2], [Int8
3]]
    | Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
47 Bool -> Bool -> Bool
&& Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
49 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
50 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
54 = [[Int8
1], [Int8
2, Int8
1], [Int8
3, Int8
2], [Int8
4, Int8
3, Int8
2]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
52 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
55 = [[Int8
1], [Int8
2], [Int8
3], [Int8
4, Int8
3]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
57 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
58 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
59 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
60 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
64 = [[Int8
1], [Int8
2, Int8
1], [Int8
3, Int8
2], [Int8
4, Int8
3, Int8
2], [Int8
5, Int8
4, Int8
3]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
62 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
65 = [[Int8
1], [Int8
2], [Int8
3], [Int8
4, Int8
3], [Int8
5, Int8
4]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
67 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
68 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
69 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0]]
    ------------------------------------------------------
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
70 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
74 = [[Int8
2, Int8
1], [Int8
3, Int8
2], [Int8
4, Int8
3, Int8
2], [Int8
5, Int8
4, Int8
3], [Int8
6, Int8
5, Int8
4, Int8
3, Int8
2]] -- at least 2 is omitted, but probably 3 and even 4. 5, 6 and 7 are present.
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
72 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
75 = [[Int8
2], [Int8
3], [Int8
4, Int8
3], [Int8
5, Int8
4], [Int8
6, Int8
5, Int8
4]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
77 = [[Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
78 = [[Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
79 = [[Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
80 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
84 = [[Int8
3, Int8
2], [Int8
4, Int8
3, Int8
2], [Int8
5, Int8
4, Int8
3], [Int8
6, Int8
5, Int8
4, Int8
3, Int8
2]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
82 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
85 = [[Int8
3], [Int8
4, Int8
3], [Int8
5, Int8
4], [Int8
6, Int8
5, Int8
4]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
87 = [[Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
88 = [[Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
89 = [[Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
90 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
94 = [[Int8
4, Int8
3, Int8
2], [Int8
5, Int8
4, Int8
3], [Int8
6, Int8
5, Int8
4, Int8
3, Int8
2]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
92 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
95 = [[Int8
4, Int8
3], [Int8
5, Int8
4], [Int8
6, Int8
5, Int8
4]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
97 = [[Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
98 = [[Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
99 = [[Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0]]
    ------------------------------------------------------------------------
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
100 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
104 = [[Int8
1], [Int8
2, Int8
1], [Int8
4, Int8
3, Int8
2], [Int8
6, Int8
5, Int8
4, Int8
3, Int8
2]] -- 4 and 6 are omitted, just present the ones from: 2, 3, 5, 7.
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
102 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
105 = [[Int8
1], [Int8
2], [Int8
4, Int8
3], [Int8
6, Int8
5, Int8
4]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
107 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
108 = [[Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
109 = [[Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0]]
    ------------------------------------------------------------------
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
150 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
154 = [[Int8
1], [Int8
2, Int8
1], [Int8
4, Int8
3, Int8
2]] -- 4, 6, 7 are omitted but 2, 3, 5 are present.
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
152 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
155 = [[Int8
1], [Int8
2], [Int8
4, Int8
3]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
157 = [[Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
158 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
159 = [[Int8
0], [Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0]]
    ------------------------------------------------------
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
170 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
174 = [[Int8
2, Int8
1], [Int8
4, Int8
3, Int8
2], [Int8
6, Int8
5, Int8
4, Int8
3, Int8
2]] -- just 3, 5 and 7 are present
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
172 Bool -> Bool -> Bool
|| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
175 = [[Int8
2], [Int8
4, Int8
3], [Int8
6, Int8
5, Int8
4]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
177 = [[Int8
1, Int8
0], [Int8
1, Int8
0], [Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
178 = [[Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0]]
    | Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
179 = [[Int8
1, Int8
0], [Int8
2, Int8
1, Int8
0], [Int8
3, Int8
2, Int8
1, Int8
0]]
    -----------------------------------------------------------------------
    | Bool
otherwise = [[Int8
1], [Int8
1], [Int8
2, Int8
1], [Int8
3, Int8
2, Int8
1], [Int8
3, Int8
2], [Int8
4, Int8
3, Int8
2]]

--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------

sel2 :: Int -> [Int8]
sel2 :: Int -> [Int8]
sel2 Int
y
    | Int
y Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 Bool -> Bool -> Bool
|| Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
179 = []
    | (Int -> Int -> Int
forall a. Integral a => a -> a -> a
rem Int
y Int
10 Int -> [Int] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [Int
1, Int
3, Int
6]) Bool -> Bool -> Bool
|| Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
0 Bool -> Bool -> Bool
&& Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
9 = [Int8
2 .. Int8
7]
    | Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
20 Bool -> Bool -> Bool
&& Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
69 = [Int8
2 .. Int -> Int8
forall a. Enum a => Int -> a
toEnum (Int
y Int -> Int -> Int
forall a. Integral a => a -> a -> a
`quot` Int
10)]
    | Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
70 Bool -> Bool -> Bool
&& Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
99 = [Int -> Int8
forall a. Enum a => Int -> a
toEnum (Int
y Int -> Int -> Int
forall a. Integral a => a -> a -> a
`quot` Int
10) Int8 -> Int8 -> Int8
forall a. Num a => a -> a -> a
- Int8
4 .. Int8
7]
    | Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
100 Bool -> Bool -> Bool
&& Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
109 = [Int8
2, Int8
3, Int8
5, Int8
7]
    | Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
150 Bool -> Bool -> Bool
&& Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
159 = [Int8
2, Int8
3, Int8
5]
    | Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
170 Bool -> Bool -> Bool
&& Int
y Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
179 = [Int8
3, Int8
5, Int8
7]
    | Bool
otherwise = [Int8
2 .. Int8
7]

minMax11ByCList :: (Ord a) => (a -> a -> Ordering) -> [a] -> (a, a) -- Is rewritten from the 'Data.MinMax.Preconditions.minMax11ByC' from @subG@ package.
minMax11ByCList :: forall a. Ord a => (a -> a -> Ordering) -> [a] -> (a, a)
minMax11ByCList a -> a -> Ordering
g xs :: [a]
xs@(a
x : a
y : [a]
ys) = (a -> (a, a) -> (a, a)) -> (a, a) -> [a] -> (a, a)
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr a -> (a, a) -> (a, a)
f (if a
x a -> a -> Bool
forall a. Ord a => a -> a -> Bool
> a
y then (a
y, a
x) else (a
x, a
y)) [a]
ys
  where
    f :: a -> (a, a) -> (a, a)
f a
z (a
x, a
y)
        | a -> a -> Ordering
g a
z a
x Ordering -> Ordering -> Bool
forall a. Eq a => a -> a -> Bool
== Ordering
LT = (a
z, a
y)
        | a -> a -> Ordering
g a
z a
y Ordering -> Ordering -> Bool
forall a. Eq a => a -> a -> Bool
== Ordering
GT = (a
x, a
z)
        | Bool
otherwise = (a
x, a
y)
minMax11ByCList a -> a -> Ordering
_ [a]
_ = (a, a)
forall a. HasCallStack => a
undefined -- Is not intended to be used for lists with less than two elements.