{-# LANGUAGE NoImplicitPrelude #-}

module Phladiprelio.Tests where

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

sel :: Int -> [[Int8]]
sel :: Int -> [[Int8]]
sel Int
x 
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
1 Bool -> Bool -> Bool
|| Int
x forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
x forall a. Ord a => a -> a -> Bool
> Int
179 = []
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
0 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
2 Bool -> Bool -> Bool
|| Int
x 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 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 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 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 forall a. Ord a => a -> a -> Bool
>= Int
20 Bool -> Bool -> Bool
&& Int
x forall a. Ord a => a -> a -> Bool
<= Int
26 Bool -> Bool -> Bool
&& Int
x 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 forall a. Ord a => a -> a -> Bool
>= Int
27 Bool -> Bool -> Bool
&& Int
x forall a. Ord a => a -> a -> Bool
<= Int
29 = [[Int8
0]]
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
30 Bool -> Bool -> Bool
|| Int
x forall a. Eq a => a -> a -> Bool
== Int
34 = [[Int8
1],[Int8
2,Int8
1]]
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
32 Bool -> Bool -> Bool
|| Int
x forall a. Eq a => a -> a -> Bool
== Int
35 = [[Int8
1],[Int8
2]]
   | Int
x forall a. Ord a => a -> a -> Bool
>= Int
37 Bool -> Bool -> Bool
&& Int
x forall a. Ord a => a -> a -> Bool
<= Int
39 = [[Int8
0],[Int8
1,Int8
0]]
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
40 Bool -> Bool -> Bool
|| Int
x forall a. Eq a => a -> a -> Bool
== Int
44 = [[Int8
1],[Int8
2,Int8
1],[Int8
3,Int8
2]]
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
42 Bool -> Bool -> Bool
|| Int
x forall a. Eq a => a -> a -> Bool
== Int
45 = [[Int8
1],[Int8
2],[Int8
3]]
   | Int
x forall a. Ord a => a -> a -> Bool
>= Int
47 Bool -> Bool -> Bool
&& Int
x forall a. Ord a => a -> a -> Bool
<= Int
49 = [[Int8
0],[Int8
1,Int8
0],[Int8
1,Int8
0]]
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
50 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
52 Bool -> Bool -> Bool
|| Int
x forall a. Eq a => a -> a -> Bool
== Int
55 = [[Int8
1],[Int8
2],[Int8
3],[Int8
4,Int8
3]]
   | Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
58 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
60 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
62 Bool -> Bool -> Bool
|| Int
x 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 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 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 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 forall a. Eq a => a -> a -> Bool
== Int
70 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
72 Bool -> Bool -> Bool
|| Int
x 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 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 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 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 forall a. Eq a => a -> a -> Bool
== Int
80 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
82 Bool -> Bool -> Bool
|| Int
x 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 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 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 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 forall a. Eq a => a -> a -> Bool
== Int
90 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
92 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
97 = [[Int8
1,Int8
0],[Int8
1,Int8
0],[Int8
1,Int8
0]]
   | Int
x 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 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 forall a. Eq a => a -> a -> Bool
== Int
100 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
102 Bool -> Bool -> Bool
|| Int
x 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 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 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 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 forall a. Eq a => a -> a -> Bool
== Int
150 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
152 Bool -> Bool -> Bool
|| Int
x forall a. Eq a => a -> a -> Bool
== Int
155 = [[Int8
1],[Int8
2],[Int8
4,Int8
3]]
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
157 = [[Int8
0],[Int8
1,Int8
0],[Int8
1,Int8
0]]
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
158 Bool -> Bool -> Bool
|| Int
x forall a. Eq a => a -> a -> Bool
== Int
159 = [[Int8
0],[Int8
1,Int8
0],[Int8
2,Int8
1,Int8
0]]
------------------------------------------------------
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
170 Bool -> Bool -> Bool
|| Int
x 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 forall a. Eq a => a -> a -> Bool
== Int
172 Bool -> Bool -> Bool
|| Int
x forall a. Eq a => a -> a -> Bool
== Int
175 = [[Int8
2],[Int8
4,Int8
3],[Int8
6,Int8
5,Int8
4]]
   | Int
x forall a. Eq a => a -> a -> Bool
== Int
177 = [[Int8
1,Int8
0],[Int8
1,Int8
0],[Int8
1,Int8
0]]
   | Int
x 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 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 forall a. Eq a => a -> a -> Bool
== Int
1 Bool -> Bool -> Bool
|| Int
y forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
y forall a. Ord a => a -> a -> Bool
> Int
179 = []
   | (forall a. Integral a => a -> a -> a
rem Int
y Int
10 forall a. Eq a => a -> [a] -> Bool
`elem` [Int
1,Int
3,Int
6]) Bool -> Bool -> Bool
|| Int
y forall a. Ord a => a -> a -> Bool
>= Int
0 Bool -> Bool -> Bool
&& Int
y forall a. Ord a => a -> a -> Bool
<= Int
9 = [Int8
2..Int8
7]
   | Int
y forall a. Ord a => a -> a -> Bool
>= Int
20 Bool -> Bool -> Bool
&& Int
y forall a. Ord a => a -> a -> Bool
<= Int
69 = [Int8
2..forall a. Enum a => Int -> a
toEnum (Int
y forall a. Integral a => a -> a -> a
`quot` Int
10)]
   | Int
y forall a. Ord a => a -> a -> Bool
>= Int
70 Bool -> Bool -> Bool
&& Int
y forall a. Ord a => a -> a -> Bool
<= Int
99 = [forall a. Enum a => Int -> a
toEnum (Int
y forall a. Integral a => a -> a -> a
`quot` Int
10) forall a. Num a => a -> a -> a
- Int8
4..Int8
7]
   | Int
y forall a. Ord a => a -> a -> Bool
>= Int
100 Bool -> Bool -> Bool
&& Int
y forall a. Ord a => a -> a -> Bool
<= Int
109 = [Int8
2,Int8
3,Int8
5,Int8
7]
   | Int
y forall a. Ord a => a -> a -> Bool
>= Int
150 Bool -> Bool -> Bool
&& Int
y forall a. Ord a => a -> a -> Bool
<= Int
159 = [Int8
2,Int8
3,Int8
5]
   | Int
y forall a. Ord a => a -> a -> Bool
>= Int
170 Bool -> Bool -> Bool
&& Int
y 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) = forall a b. (a -> b -> b) -> b -> [a] -> b
foldr a -> (a, a) -> (a, a)
f (if a
x 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 forall a. Eq a => a -> a -> Bool
== Ordering
LT = (a
z,a
y)
             | a -> a -> Ordering
g a
z a
y forall a. Eq a => a -> a -> Bool
== Ordering
GT = (a
x,a
z)
             | Bool
otherwise = (a
x,a
y)
minMax11ByCList a -> a -> Ordering
_ [a]
_ = forall a. HasCallStack => a
undefined -- Is not intended to be used for lists with less than two elements.