• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

bsdrks / graaf / 9779823502

03 Jul 2024 02:32PM UTC coverage: 100.0%. Remained the same
9779823502

push

github

basdirks-purple
minor documentation improvements

6775 of 6775 relevant lines covered (100.0%)

320554.38 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/adjacency_matrix/digraph.rs
1
//! An adjacency matrix representation for unweighted digraphs
2
//!
3
//! An adjacency matrix is a symmetric binary matrix where a value of `1` at
4
//! row `s` and column `t` indicates an arc from vertex `s` to vertex `t`. The
5
//! matrix is stored as a bit array, and is suited for dense digraphs with a
6
//! small number of vertices.
7

8
use {
9
    crate::{
10
        gen::Empty,
11
        op::{
12
            AddArc,
13
            ArcWeight,
14
            Arcs,
15
            ArcsWeighted,
16
            Converse,
17
            HasArc,
18
            Indegree,
19
            IsSimple,
20
            Order,
21
            OutNeighbors,
22
            OutNeighborsWeighted,
23
            Outdegree,
24
            RemoveArc,
25
            Size,
26
            Vertices,
27
        },
28
    },
29
    std::collections::BTreeSet,
30
};
31

32
/// An adjacency matrix representation of an unweighted digraph
33
#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
34
pub struct Digraph {
35
    blocks: Vec<usize>,
36
    order: usize,
37
}
38

39
impl Digraph {
40
    const fn mask(i: usize) -> usize {
98,197,154✔
41
        1 << (i & 63)
98,197,154✔
42
    }
98,197,154✔
43

44
    const fn index(&self, s: usize, t: usize) -> usize {
98,197,154✔
45
        s * self.order + t
98,197,154✔
46
    }
98,197,154✔
47

48
    /// Toggles the arc from the source vertex to the target vertex.
49
    ///
50
    /// # Arguments
51
    ///
52
    /// * `s`: The source vertex.
53
    /// * `t`: The target vertex.
54
    ///
55
    /// # Panics
56
    ///
57
    /// Panics if `s` or `t` is out of bounds.
58
    ///
59
    /// # Examples
60
    ///
61
    /// ```
62
    /// use graaf::{
63
    ///     adjacency_matrix::Digraph,
64
    ///     gen::Empty,
65
    ///     op::HasArc,
66
    /// };
67
    ///
68
    /// let mut digraph = Digraph::empty(3);
69
    ///
70
    /// assert!(!digraph.has_arc(0, 1));
71
    ///
72
    /// digraph.toggle(0, 1);
73
    ///
74
    /// assert!(digraph.has_arc(0, 1));
75
    /// ```
76
    pub fn toggle(&mut self, s: usize, t: usize) {
4✔
77
        let v = self.order;
4✔
78

4✔
79
        assert!(s < v, "s = {s} is out of bounds.");
4✔
80
        assert!(t < v, "t = {t} is out of bounds.");
3✔
81

82
        let i = self.index(s, t);
2✔
83

2✔
84
        self.blocks[i >> 6] ^= Self::mask(i);
2✔
85
    }
2✔
86
}
87

88
impl AddArc for Digraph {
89
    /// # Panics
90
    ///
91
    /// Panics if `s` or `t` is out of bounds.
92
    fn add_arc(&mut self, s: usize, t: usize) {
20,784,648✔
93
        let v = self.order;
20,784,648✔
94

20,784,648✔
95
        assert!(s < v, "s = {s} is out of bounds.");
20,784,648✔
96
        assert!(t < v, "t = {t} is out of bounds.");
20,784,648✔
97

98
        let i = self.index(s, t);
20,784,648✔
99

20,784,648✔
100
        self.blocks[i >> 6] |= Self::mask(i);
20,784,648✔
101
    }
20,784,648✔
102
}
103

104
impl ArcWeight<usize> for Digraph {
105
    fn arc_weight(&self, s: usize, t: usize) -> Option<&usize> {
2,570,000✔
106
        self.has_arc(s, t).then_some(&1)
2,570,000✔
107
    }
2,570,000✔
108
}
109

110
impl ArcsWeighted<usize> for Digraph {
111
    fn arcs_weighted<'a>(&'a self) -> impl Iterator<Item = (usize, usize, &'a usize)>
6✔
112
    where
6✔
113
        usize: 'a,
6✔
114
    {
6✔
115
        self.arcs().map(|(s, t)| (s, t, &1))
51✔
116
    }
6✔
117
}
118

119
impl Converse for Digraph {
120
    fn converse(&self) -> Self {
6✔
121
        let v = self.order;
6✔
122
        let mut converse = Self::empty(v);
6✔
123

124
        for (s, t) in self.arcs() {
51✔
125
            converse.add_arc(t, s);
51✔
126
        }
51✔
127

128
        converse
6✔
129
    }
6✔
130
}
131

132
impl Empty for Digraph {
133
    /// # Panics
134
    ///
135
    /// Panics if `V` is zero.
136
    fn empty(v: usize) -> Self {
19,191✔
137
        assert!(v > 0, "a digraph must have at least one vertex");
19,191✔
138

139
        let n = (v * v + 63) / 64;
19,191✔
140

19,191✔
141
        Self {
19,191✔
142
            blocks: vec![0; n],
19,191✔
143
            order: v,
19,191✔
144
        }
19,191✔
145
    }
19,191✔
146
}
147

148
impl From<Vec<BTreeSet<usize>>> for Digraph {
149
    fn from(adjacency: Vec<BTreeSet<usize>>) -> Self {
132✔
150
        let v = adjacency.len();
132✔
151
        let mut digraph = Self::empty(v);
132✔
152

153
        for (s, neighbors) in adjacency.into_iter().enumerate() {
1,342✔
154
            for t in neighbors {
2,464✔
155
                digraph.add_arc(s, t);
1,122✔
156
            }
1,122✔
157
        }
158

159
        digraph
132✔
160
    }
132✔
161
}
162

163
impl HasArc for Digraph {
164
    fn has_arc(&self, s: usize, t: usize) -> bool {
74,868,438✔
165
        let v = self.order;
74,868,438✔
166

74,868,438✔
167
        if s >= v || t >= v {
74,868,438✔
168
            return false;
26,042✔
169
        }
74,842,396✔
170

74,842,396✔
171
        let i = self.index(s, t);
74,842,396✔
172

74,842,396✔
173
        self.blocks[i >> 6] & Self::mask(i) != 0
74,842,396✔
174
    }
74,868,438✔
175
}
176

177
impl Indegree for Digraph {
178
    /// # Panics
179
    ///
180
    /// Panics if `t >= V`.
181
    fn indegree(&self, t: usize) -> usize {
360,162✔
182
        assert!(t < self.order, "t = {t} is out of bounds.");
360,162✔
183

184
        self.vertices().filter(|&s| self.has_arc(s, t)).count()
25,667,440✔
185
    }
360,162✔
186
}
187

188
impl IsSimple for Digraph {
189
    fn is_simple(&self) -> bool {
1,037✔
190
        self.vertices().all(|s| !self.has_arc(s, s))
50,663✔
191
    }
1,037✔
192
}
193

194
impl Arcs for Digraph {
195
    fn arcs(&self) -> impl Iterator<Item = (usize, usize)> {
4,492✔
196
        self.vertices().flat_map(move |s| {
180,446✔
197
            self.vertices()
180,446✔
198
                .filter_map(move |t| self.has_arc(s, t).then_some((s, t)))
11,824,666✔
199
        })
180,446✔
200
    }
4,492✔
201
}
202

203
impl Order for Digraph {
204
    fn order(&self) -> usize {
2,596✔
205
        self.order
2,596✔
206
    }
2,596✔
207
}
208

209
impl OutNeighbors for Digraph {
210
    /// # Panics
211
    ///
212
    /// Panics if `s` is out of bounds.
213
    fn out_neighbors(&self, s: usize) -> impl Iterator<Item = usize> {
122✔
214
        assert!(s < self.order, "s = {s} is out of bounds.");
122✔
215

216
        self.vertices().filter(move |&t| self.has_arc(s, t))
1,418✔
217
    }
122✔
218
}
219

220
impl OutNeighborsWeighted<usize> for Digraph {
221
    /// # Panics
222
    ///
223
    /// Panics if `s` is out of bounds.
224
    fn out_neighbors_weighted<'a>(&'a self, s: usize) -> impl Iterator<Item = (usize, &'a usize)>
61✔
225
    where
61✔
226
        usize: 'a,
61✔
227
    {
61✔
228
        self.out_neighbors(s).map(move |t| (t, &1))
61✔
229
    }
61✔
230
}
231

232
impl Outdegree for Digraph {
233
    /// # Panics
234
    ///
235
    /// Panics if `s >= V`.
236
    fn outdegree(&self, s: usize) -> usize {
308,094✔
237
        assert!(s < self.order, "s = {s} is out of bounds.");
308,094✔
238

239
        self.vertices().filter(|&t| self.has_arc(s, t)).count()
22,113,957✔
240
    }
308,094✔
241
}
242

243
impl RemoveArc for Digraph {
244
    /// # Panics
245
    ///
246
    /// Panics if `s >= V` or `t >= V`.
247
    fn remove_arc(&mut self, s: usize, t: usize) -> bool {
2,570,108✔
248
        let v = self.order;
2,570,108✔
249

2,570,108✔
250
        assert!(s < v, "s = {s} is out of bounds.");
2,570,108✔
251
        assert!(t < v, "t = {t} is out of bounds.");
2,570,108✔
252

253
        let has_arc = self.has_arc(s, t);
2,570,108✔
254
        let i = self.index(s, t);
2,570,108✔
255

2,570,108✔
256
        self.blocks[i >> 6] &= !Self::mask(i);
2,570,108✔
257

2,570,108✔
258
        has_arc
2,570,108✔
259
    }
2,570,108✔
260
}
261

262
impl Size for Digraph {
263
    /// # Panics
264
    ///
265
    /// Panics when the number of arcs is greater than `usize::MAX`.
266
    fn size(&self) -> usize {
520✔
267
        self.blocks
520✔
268
            .iter()
520✔
269
            .map(|&block| block.count_ones() as usize)
27,483✔
270
            .sum()
520✔
271
    }
520✔
272
}
273

274
impl Vertices for Digraph {
275
    fn vertices(&self) -> impl Iterator<Item = usize> {
958,441✔
276
        0..self.order
958,441✔
277
    }
958,441✔
278
}
279

280
#[cfg(test)]
281
mod tests {
282
    use {
283
        super::*,
284
        crate::{
285
            adjacency_matrix::fixture::{
286
                bang_jensen_34,
287
                bang_jensen_94,
288
                kattis_builddeps,
289
                kattis_escapewallmaria_1,
290
                kattis_escapewallmaria_2,
291
                kattis_escapewallmaria_3,
292
            },
293
            gen::{
294
                Complete,
295
                Cycle,
296
                Empty,
297
                RandomTournament,
298
            },
299
            op::{
300
                Degree,
301
                HasEdge,
302
                InNeighbors,
303
                IsBalanced,
304
                IsComplete,
305
                IsIsolated,
306
                IsOriented,
307
                IsPendant,
308
                IsRegular,
309
                IsSemicomplete,
310
                IsSimple,
311
                IsSubdigraph,
312
                IsSuperdigraph,
313
                IsSymmetric,
314
                IsWalk,
315
                Order,
316
            },
317
        },
318
        proptest::proptest,
319
    };
320

321
    proptest! {
322
        #[test]
323
        fn add_arc_arc_weight(s in 1..100_usize, t in 1..100_usize) {
324
            let mut digraph = Digraph::empty(100);
325

326
            digraph.add_arc(s, t);
327

328
            for u in digraph.vertices() {
329
                for v in digraph.vertices() {
330
                    assert_eq!(
331
                        digraph.arc_weight(u, v),
332
                        (u == s && v == t).then_some(&1)
333
                    );
334
                }
335
            }
336
        }
337

338
        #[test]
339
        fn add_arc_degree(s in 1..100_usize, t in 1..100_usize) {
340
            let mut digraph = Digraph::empty(100);
341

342
            digraph.add_arc(s, t);
343

344
            for u in digraph.vertices() {
345
                assert_eq!(
346
                    digraph.degree(u),
347
                    usize::from(u == s) + usize::from(u == t)
348
                );
349
            }
350
        }
351

352
        #[test]
353
        fn add_arc_has_arc(s in 1..100_usize, t in 1..100_usize) {
354
            let mut digraph = Digraph::empty(100);
355

356
            digraph.add_arc(s, t);
357

358
            assert!(digraph.has_arc(s, t));
359
        }
360

361
        #[test]
362
        fn add_arc_indegree(s in 1..100_usize, t in 1..100_usize) {
363
            let mut digraph = Digraph::empty(100);
364

365
            digraph.add_arc(s, t);
366

367
            for u in digraph.vertices() {
368
                assert_eq!(digraph.indegree(u), usize::from(u == t));
369
            }
370
        }
371

372
        #[test]
373
        fn add_arc_outdegree(s in 1..100_usize, t in 1..100_usize) {
374
            let mut digraph = Digraph::empty(100);
375

376
            digraph.add_arc(s, t);
377

378
            for u in digraph.vertices() {
379
                assert_eq!(digraph.outdegree(u), usize::from(u == s));
380
            }
381
        }
382

383
        #[test]
384
        fn add_arc_remove_arc(s in 1..100_usize, t in 1..100_usize) {
385
            let d = Digraph::empty(100);
386
            let mut h = d.clone();
387

388
            h.add_arc(s, t);
389

390
            for u in d.vertices() {
391
                for v in d.vertices() {
392
                    if u == s && v == t {
393
                        assert!(h.remove_arc(u, v));
394
                    } else {
395
                        assert!(!h.remove_arc(u, v));
396
                    }
397
                }
398
            }
399

400
            assert_eq!(d, h);
401
        }
402

403
        #[test]
404
        fn complete_degree(v in 1..100_usize) {
405
            let digraph = Digraph::complete(v);
406

407
            for s in digraph.vertices() {
408
                assert_eq!(digraph.degree(s), v * 2 - 2);
409
            }
410
        }
411

412
        #[test]
413
        fn complete_has_edge(v in 2..100_usize) {
414
            let digraph = Digraph::complete(v);
415

416
            for s in 0..v {
417
                for t in s + 1..v {
418
                    assert!(digraph.has_edge(s, t));
419
                }
420
            }
421
        }
422

423
        #[test]
424
        fn complete_indegree(v in 1..100_usize) {
425
            let digraph = Digraph::complete(v);
426

427
            for s in digraph.vertices() {
428
                assert_eq!(digraph.indegree(s), v - 1);
429
            }
430
        }
431

432
        #[test]
433
        fn complete_is_balanced(v in 1..100_usize) {
434
            assert!(Digraph::complete(v).is_balanced());
435
        }
436

437
        #[test]
438
        fn complete_is_complete(v in 1..100_usize) {
439
            assert!(Digraph::complete(v).is_complete());
440
        }
441

442
        #[test]
443
        fn complete_is_isolated(v in 2..100_usize) {
444
            let digraph = Digraph::complete(v);
445

446
            for s in digraph.vertices() {
447
                assert!(!digraph.is_isolated(s));
448
            }
449
        }
450

451
        #[test]
452
        fn complete_is_oriented(v in 2..100_usize) {
453
            assert!(!Digraph::complete(v).is_oriented());
454
        }
455

456
        #[test]
457
        fn complete_is_pendant(v in 1..100_usize) {
458
            let digraph = Digraph::complete(v);
459

460
            for s in digraph.vertices() {
461
                assert!(!digraph.is_pendant(s));
462
            }
463
        }
464

465
        #[test]
466
        fn complete_is_regular(v in 1..100_usize) {
467
            assert!(Digraph::complete(v).is_regular());
468
        }
469

470
        #[test]
471
        fn complete_is_semicomplete(v in 1..100_usize) {
472
            assert!(Digraph::complete(v).is_semicomplete());
473
        }
474

475
        #[test]
476
        fn complete_is_simple(v in 2..100_usize) {
477
            assert!(Digraph::complete(v).is_simple());
478
        }
479

480
        #[test]
481
        fn complete_is_subdigraph(v in 1..100_usize) {
482
            let digraph = Digraph::complete(v);
483

484
            assert!(digraph.is_subdigraph(&digraph));
485
        }
486

487
        #[test]
488
        fn complete_is_superdigraph(v in 1..100_usize) {
489
            let digraph = Digraph::complete(v);
490

491
            assert!(digraph.is_superdigraph(&digraph));
492
        }
493

494
        #[test]
495
        fn complete_is_symmetric(v in 1..100_usize) {
496
            assert!(Digraph::complete(v).is_symmetric());
497
        }
498

499
        #[test]
500
        fn complete_order(v in 1..100_usize) {
501
            assert_eq!(Digraph::complete(v).order(), v);
502
        }
503

504
        #[test]
505
        fn complete_outdegree(v in 1..100_usize) {
506
            let digraph = Digraph::complete(v);
507

508
            for s in digraph.vertices() {
509
                assert_eq!(digraph.outdegree(s), v - 1);
510
            }
511
        }
512

513
        #[test]
514
        fn complete_size(v in 1..100_usize) {
515
            assert_eq!(Digraph::complete(v).size(), v * (v - 1));
516
        }
517

518
        #[test]
519
        fn cycle_degree(v in 1..100_usize) {
520
            let digraph = Digraph::cycle(v);
521

522
            for s in digraph.vertices() {
523
                assert_eq!(digraph.degree(s), 2);
524
            }
525
        }
526

527
        #[test]
528
        fn cycle_has_edge(v in 3..100_usize) {
529
            let digraph = Digraph::cycle(v);
530

531
            for s in 0..v {
532
                for t in s + 1..v {
533
                    assert!(!digraph.has_edge(s, t));
534
                }
535
            }
536
        }
537

538
        #[test]
539
        fn cycle_indegree(v in 1..100_usize) {
540
            let digraph = Digraph::cycle(v);
541

542
            for s in digraph.vertices() {
543
                assert_eq!(digraph.indegree(s), 1);
544
            }
545
        }
546

547
        #[test]
548
        fn cycle_is_balanced(v in 1..100_usize) {
549
            assert!(Digraph::cycle(v).is_balanced());
550
        }
551

552
        #[test]
553
        fn cycle_is_complete(v in 3..100_usize) {
554
            assert!(!Digraph::cycle(v).is_complete());
555
        }
556

557
        #[test]
558
        fn cycle_is_isolated(v in 1..100_usize) {
559
            let digraph = Digraph::cycle(v);
560

561
            for s in digraph.vertices() {
562
                assert!(!digraph.is_isolated(s));
563
            }
564
        }
565

566
        #[test]
567
        fn cycle_is_oriented(v in 3..100_usize) {
568
            assert!(Digraph::cycle(v).is_oriented());
569
        }
570

571
        #[test]
572
        fn cycle_is_pendant(v in 1..100_usize) {
573
            let digraph = Digraph::cycle(v);
574

575
            for s in digraph.vertices() {
576
                assert!(!digraph.is_pendant(s));
577
            }
578
        }
579

580
        #[test]
581
        fn cycle_is_regular(v in 1..100_usize) {
582
            assert!(Digraph::cycle(v).is_regular());
583
        }
584

585
        #[test]
586
        fn cycle_is_semicomplete(v in 4..100_usize) {
587
            assert!(!Digraph::cycle(v).is_semicomplete());
588
        }
589

590
        #[test]
591
        fn cycle_is_simple(v in 2..100_usize) {
592
            assert!(Digraph::cycle(v).is_simple());
593
        }
594

595
        #[test]
596
        fn cycle_is_sink(v in 1..100_usize) {
597
            let digraph = Digraph::cycle(v);
598

599
            for s in digraph.vertices() {
600
                assert!(!digraph.is_sink(s));
601
            }
602
        }
603

604
        #[test]
605
        fn cycle_is_source(v in 1..100_usize) {
606
            let digraph = Digraph::cycle(v);
607

608
            for s in digraph.vertices() {
609
                assert!(!digraph.is_source(s));
610
            }
611
        }
612

613
        #[test]
614
        fn cycle_is_subdigraph(v in 1..100_usize) {
615
            let digraph = Digraph::cycle(v);
616

617
            assert!(digraph.is_subdigraph(&digraph));
618
        }
619

620
        #[test]
621
        fn cycle_is_superdigraph(v in 1..100_usize) {
622
            let digraph = Digraph::cycle(v);
623

624
            assert!(digraph.is_superdigraph(&digraph));
625
        }
626

627
        #[test]
628
        fn cycle_is_symmetric(v in 3..100_usize) {
629
            assert!(!Digraph::cycle(v).is_symmetric());
630
        }
631

632
        #[test]
633
        fn empty_arcs(v in 1..100_usize) {
634
            assert!(Digraph::empty(v).arcs().eq([]));
635
        }
636

637
        #[test]
638
        fn empty_degree(v in 1..100_usize) {
639
            let digraph = Digraph::empty(v);
640

641
            for s in digraph.vertices() {
642
                assert_eq!(digraph.degree(s), 0);
643
            }
644
        }
645

646
        #[test]
647
        fn empty_has_arc(v in 1..100_usize) {
648
            let digraph = Digraph::empty(v);
649

650
            for s in digraph.vertices() {
651
                for t in digraph.vertices() {
652
                    assert!(!digraph.has_arc(s, t));
653
                }
654
            }
655
        }
656

657
        #[test]
658
        fn empty_has_edge(v in 1..100_usize) {
659
            let digraph = Digraph::empty(v);
660

661
            for s in digraph.vertices() {
662
                for t in digraph.vertices() {
663
                    assert!(!digraph.has_edge(s, t));
664
                }
665
            }
666
        }
667

668
        #[test]
669
        fn empty_indegree(v in 1..100_usize) {
670
            let digraph = Digraph::empty(v);
671

672
            for s in digraph.vertices() {
673
                assert_eq!(digraph.indegree(s), 0);
674
            }
675
        }
676

677
        #[test]
678
        fn empty_is_balanced(v in 1..100_usize) {
679
            assert!(Digraph::empty(v).is_balanced());
680
        }
681

682
        #[test]
683
        fn empty_is_complete(v in 2..100_usize) {
684
            assert!(!Digraph::empty(v).is_complete());
685
        }
686

687
        #[test]
688
        fn empty_is_isolated(v in 1..100_usize) {
689
            let digraph = Digraph::empty(v);
690

691
            for s in digraph.vertices() {
692
                assert!(digraph.is_isolated(s));
693
            }
694
        }
695

696
        #[test]
697
        fn empty_is_oriented(v in 1..100_usize) {
698
            assert!(Digraph::empty(v).is_oriented());
699
        }
700

701
        #[test]
702
        fn empty_is_pendant(v in 1..100_usize) {
703
            let digraph = Digraph::empty(v);
704

705
            for s in digraph.vertices() {
706
                assert!(!digraph.is_pendant(s));
707
            }
708
        }
709

710
        #[test]
711
        fn empty_is_regular(v in 1..100_usize) {
712
            assert!(Digraph::empty(v).is_regular());
713
        }
714

715
        #[test]
716
        fn empty_is_semicomplete(v in 2..100_usize) {
717
            assert!(!Digraph::empty(v).is_semicomplete());
718
        }
719

720
        #[test]
721
        fn empty_is_simple(v in 1..100_usize) {
722
            assert!(Digraph::empty(v).is_simple());
723
        }
724

725
        #[test]
726
        fn empty_is_sink(v in 1..100_usize) {
727
            let digraph = Digraph::empty(v);
728

729
            for s in digraph.vertices() {
730
                assert!(digraph.is_sink(s));
731
            }
732
        }
733

734
        #[test]
735
        fn empty_is_source(v in 1..100_usize) {
736
            let digraph = Digraph::empty(v);
737

738
            for s in digraph.vertices() {
739
                assert!(digraph.is_source(s));
740
            }
741
        }
742

743
        #[test]
744
        fn empty_is_subdigraph(v in 1..100_usize) {
745
            let digraph = Digraph::empty(v);
746

747
            assert!(digraph.is_subdigraph(&digraph));
748
        }
749

750
        #[test]
751
        fn empty_is_superdigraph(v in 1..100_usize) {
752
            let digraph = Digraph::empty(v);
753

754
            assert!(digraph.is_superdigraph(&digraph));
755
        }
756

757
        #[test]
758
        fn empty_is_symmetric(v in 1..100_usize) {
759
            assert!(Digraph::empty(v).is_symmetric());
760
        }
761

762
        #[test]
763
        fn empty_outdegree(v in 1..100_usize) {
764
            let digraph = Digraph::empty(v);
765

766
            for s in digraph.vertices() {
767
                assert_eq!(digraph.outdegree(s), 0);
768
            }
769
        }
770

771
        #[test]
772
        fn has_arc_out_of_bounds(v in 1..100_usize) {
773
            let digraph = Digraph::empty(v);
774

775
            for s in 0..v {
776
                assert!(!digraph.has_arc(s, v));
777
                assert!(!digraph.has_arc(v, s));
778
            }
779
        }
780

781
        #[test]
782
        fn random_tournament_degree(v in 1..100_usize) {
783
            let digraph = Digraph::random_tournament(v);
784

785
            for s in digraph.vertices() {
786
                assert_eq!(digraph.degree(s), v - 1);
787
            }
788
        }
789

790
        #[test]
791
        fn random_tournament_has_edge(v in 1..100_usize) {
792
            let digraph = Digraph::random_tournament(v);
793

794
            for s in digraph.vertices() {
795
                for t in digraph.vertices() {
796
                    assert!(!digraph.has_edge(s, t));
797
                }
798
            }
799
        }
800

801
        #[test]
802
        fn random_tournament_indegree(v in 1..100_usize) {
803
            let digraph = Digraph::random_tournament(v);
804

805
            for s in digraph.vertices() {
806
                assert!((0..v).contains(&digraph.indegree(s)));
807
            }
808
        }
809

810
        #[test]
811
        fn random_tournament_is_complete(v in 2..100_usize) {
812
            assert!(!Digraph::random_tournament(v).is_complete());
813
        }
814

815
        #[test]
816
        fn random_tournament_is_isolated(v in 2..100_usize) {
817
            let digraph = Digraph::random_tournament(v);
818

819
            for s in digraph.vertices() {
820
                assert!(!digraph.is_isolated(s));
821
            }
822
        }
823

824
        #[test]
825
        fn random_tournament_is_oriented(v in 1..100_usize) {
826
            assert!(Digraph::random_tournament(v).is_oriented());
827
        }
828

829
        #[test]
830
        fn random_tournament_is_pendant(v in 3..100_usize) {
831
            let digraph = Digraph::random_tournament(v);
832

833
            for s in digraph.vertices() {
834
                assert!(!digraph.is_pendant(s));
835
            }
836
        }
837

838
        #[test]
839
        fn random_tournament_is_semicomplete(v in 1..100_usize) {
840
            assert!(Digraph::random_tournament(v).is_semicomplete());
841
        }
842

843
        #[test]
844
        fn random_tournament_is_simple(v in 1..100_usize) {
845
            assert!(Digraph::random_tournament(v).is_simple());
846
        }
847

848
        #[test]
849
        fn random_tournament_is_subdigraph(v in 1..100_usize) {
850
            let digraph = Digraph::random_tournament(v);
851

852
            assert!(digraph.is_subdigraph(&digraph));
853
        }
854

855
        #[test]
856
        fn random_tournament_is_superdigraph(v in 1..100_usize) {
857
            let digraph = Digraph::random_tournament(v);
858

859
            assert!(digraph.is_superdigraph(&digraph));
860
        }
861

862
        #[test]
863
        fn random_tournament_is_symmetric(v in 2..100_usize) {
864
            assert!(!Digraph::random_tournament(v).is_symmetric());
865
        }
866

867
        #[test]
868
        fn random_tournament_order(v in 1..100_usize) {
869
            assert_eq!(Digraph::random_tournament(v).order(), v);
870
        }
871

872
        #[test]
873
        fn random_tournament_outdegree(v in 1..100_usize) {
874
            let digraph = Digraph::random_tournament(v);
875

876
            for s in digraph.vertices() {
877
                assert!((0..v).contains(&digraph.outdegree(s)));
878
            }
879
        }
880

881
        #[test]
882
        fn random_tournament_size(v in 1..100_usize) {
883
            let digraph = Digraph::random_tournament(v);
884

885
            assert_eq!(digraph.size(), v * (v - 1) / 2);
886
        }
887
    }
888

889
    #[test]
890
    fn arcs_bang_jensen_34() {
1✔
891
        assert!(bang_jensen_34()
1✔
892
            .arcs()
1✔
893
            .eq(vec![(0, 4), (1, 0), (2, 1), (2, 3), (2, 5), (5, 4)]));
1✔
894
    }
1✔
895

896
    #[test]
897
    fn arcs_bang_jensen_94() {
1✔
898
        assert!(bang_jensen_94().arcs().eq(vec![
1✔
899
            (0, 1),
1✔
900
            (0, 2),
1✔
901
            (1, 3),
1✔
902
            (2, 1),
1✔
903
            (2, 3),
1✔
904
            (2, 4),
1✔
905
            (2, 5),
1✔
906
            (3, 5),
1✔
907
            (4, 6)
1✔
908
        ]));
1✔
909
    }
1✔
910

911
    #[test]
912
    fn arcs_kattis_builddeps() {
1✔
913
        assert!(kattis_builddeps().arcs().eq(vec![
1✔
914
            (0, 3),
1✔
915
            (0, 4),
1✔
916
            (2, 3),
1✔
917
            (2, 4),
1✔
918
            (2, 5),
1✔
919
            (3, 1),
1✔
920
            (4, 1),
1✔
921
            (5, 1)
1✔
922
        ]));
1✔
923
    }
1✔
924

925
    #[test]
926
    fn arcs_kattis_escapewallmaria_1() {
1✔
927
        assert!(kattis_escapewallmaria_1().arcs().eq(vec![
1✔
928
            (5, 6),
1✔
929
            (5, 9),
1✔
930
            (6, 5),
1✔
931
            (9, 5),
1✔
932
            (9, 13),
1✔
933
            (13, 9),
1✔
934
            (13, 12)
1✔
935
        ]));
1✔
936
    }
1✔
937

938
    #[test]
939
    fn arcs_kattis_escapewallmaria_2() {
1✔
940
        assert!(kattis_escapewallmaria_2().arcs().eq(vec![
1✔
941
            (5, 6),
1✔
942
            (5, 9),
1✔
943
            (6, 5),
1✔
944
            (9, 5),
1✔
945
            (12, 13),
1✔
946
            (13, 9),
1✔
947
            (13, 12)
1✔
948
        ]));
1✔
949
    }
1✔
950

951
    #[test]
952
    fn arcs_kattis_escapewallmaria_3() {
1✔
953
        assert!(kattis_escapewallmaria_3().arcs().eq(vec![
1✔
954
            (1, 2),
1✔
955
            (1, 5),
1✔
956
            (2, 1),
1✔
957
            (2, 6),
1✔
958
            (5, 1),
1✔
959
            (5, 6),
1✔
960
            (5, 9),
1✔
961
            (6, 2),
1✔
962
            (6, 5),
1✔
963
            (9, 5),
1✔
964
            (9, 13),
1✔
965
            (12, 13),
1✔
966
            (13, 9),
1✔
967
            (13, 12)
1✔
968
        ]));
1✔
969
    }
1✔
970

971
    #[test]
972
    fn arcs_weighted_bang_jensen_34() {
1✔
973
        assert!(bang_jensen_34().arcs_weighted().eq(vec![
1✔
974
            (0, 4, &1),
1✔
975
            (1, 0, &1),
1✔
976
            (2, 1, &1),
1✔
977
            (2, 3, &1),
1✔
978
            (2, 5, &1),
1✔
979
            (5, 4, &1)
1✔
980
        ]));
1✔
981
    }
1✔
982

983
    #[test]
984
    fn arcs_weighted_bang_jensen_94() {
1✔
985
        assert!(bang_jensen_94().arcs_weighted().eq(vec![
1✔
986
            (0, 1, &1),
1✔
987
            (0, 2, &1),
1✔
988
            (1, 3, &1),
1✔
989
            (2, 1, &1),
1✔
990
            (2, 3, &1),
1✔
991
            (2, 4, &1),
1✔
992
            (2, 5, &1),
1✔
993
            (3, 5, &1),
1✔
994
            (4, 6, &1)
1✔
995
        ]));
1✔
996
    }
1✔
997

998
    #[test]
999
    fn arcs_weighted_kattis_builddeps() {
1✔
1000
        assert!(kattis_builddeps().arcs_weighted().eq(vec![
1✔
1001
            (0, 3, &1),
1✔
1002
            (0, 4, &1),
1✔
1003
            (2, 3, &1),
1✔
1004
            (2, 4, &1),
1✔
1005
            (2, 5, &1),
1✔
1006
            (3, 1, &1),
1✔
1007
            (4, 1, &1),
1✔
1008
            (5, 1, &1)
1✔
1009
        ]));
1✔
1010
    }
1✔
1011

1012
    #[test]
1013
    fn arcs_weighted_kattis_escapewallmaria_1() {
1✔
1014
        assert!(kattis_escapewallmaria_1().arcs_weighted().eq(vec![
1✔
1015
            (5, 6, &1),
1✔
1016
            (5, 9, &1),
1✔
1017
            (6, 5, &1),
1✔
1018
            (9, 5, &1),
1✔
1019
            (9, 13, &1),
1✔
1020
            (13, 9, &1),
1✔
1021
            (13, 12, &1)
1✔
1022
        ]));
1✔
1023
    }
1✔
1024

1025
    #[test]
1026
    fn arcs_weighted_kattis_escapewallmaria_2() {
1✔
1027
        assert!(kattis_escapewallmaria_2().arcs_weighted().eq(vec![
1✔
1028
            (5, 6, &1),
1✔
1029
            (5, 9, &1),
1✔
1030
            (6, 5, &1),
1✔
1031
            (9, 5, &1),
1✔
1032
            (12, 13, &1),
1✔
1033
            (13, 9, &1),
1✔
1034
            (13, 12, &1)
1✔
1035
        ]));
1✔
1036
    }
1✔
1037

1038
    #[test]
1039
    fn arcs_weighted_kattis_escapewallmaria_3() {
1✔
1040
        assert!(kattis_escapewallmaria_3().arcs_weighted().eq(vec![
1✔
1041
            (1, 2, &1),
1✔
1042
            (1, 5, &1),
1✔
1043
            (2, 1, &1),
1✔
1044
            (2, 6, &1),
1✔
1045
            (5, 1, &1),
1✔
1046
            (5, 6, &1),
1✔
1047
            (5, 9, &1),
1✔
1048
            (6, 2, &1),
1✔
1049
            (6, 5, &1),
1✔
1050
            (9, 5, &1),
1✔
1051
            (9, 13, &1),
1✔
1052
            (12, 13, &1),
1✔
1053
            (13, 9, &1),
1✔
1054
            (13, 12, &1)
1✔
1055
        ]));
1✔
1056
    }
1✔
1057

1058
    #[test]
1059
    fn complete() {
1✔
1060
        assert!(Digraph::complete(1).arcs().eq([]));
1✔
1061
        assert!(Digraph::complete(2).arcs().eq([(0, 1), (1, 0)]));
1✔
1062

1063
        assert!(Digraph::complete(3)
1✔
1064
            .arcs()
1✔
1065
            .eq([(0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1)]));
1✔
1066
    }
1✔
1067

1068
    #[test]
1069
    fn complete_has_edge_trivial() {
1✔
1070
        assert!(!Digraph::complete(1).has_edge(0, 0));
1✔
1071
    }
1✔
1072

1073
    #[test]
1074
    fn complete_is_isolated_trivial() {
1✔
1075
        assert!(Digraph::complete(1).is_isolated(0));
1✔
1076
    }
1✔
1077

1078
    #[test]
1079
    fn complete_is_oriented_trivial() {
1✔
1080
        assert!(Digraph::complete(1).is_oriented());
1✔
1081
    }
1✔
1082

1083
    #[test]
1084
    fn complete_is_simple_trivial() {
1✔
1085
        assert!(Digraph::complete(1).is_simple());
1✔
1086
    }
1✔
1087

1088
    #[test]
1089
    fn converse_bang_jensen_34() {
1✔
1090
        assert!(bang_jensen_34().converse().arcs().eq([
1✔
1091
            (0, 1),
1✔
1092
            (1, 2),
1✔
1093
            (3, 2),
1✔
1094
            (4, 0),
1✔
1095
            (4, 5),
1✔
1096
            (5, 2)
1✔
1097
        ]));
1✔
1098
    }
1✔
1099

1100
    #[test]
1101
    fn converse_bang_jensen_94() {
1✔
1102
        assert!(bang_jensen_94().converse().arcs().eq([
1✔
1103
            (1, 0),
1✔
1104
            (1, 2),
1✔
1105
            (2, 0),
1✔
1106
            (3, 1),
1✔
1107
            (3, 2),
1✔
1108
            (4, 2),
1✔
1109
            (5, 2),
1✔
1110
            (5, 3),
1✔
1111
            (6, 4)
1✔
1112
        ]));
1✔
1113
    }
1✔
1114

1115
    #[test]
1116
    fn converse_kattis_builddeps() {
1✔
1117
        assert!(kattis_builddeps().converse().arcs().eq([
1✔
1118
            (1, 3),
1✔
1119
            (1, 4),
1✔
1120
            (1, 5),
1✔
1121
            (3, 0),
1✔
1122
            (3, 2),
1✔
1123
            (4, 0),
1✔
1124
            (4, 2),
1✔
1125
            (5, 2)
1✔
1126
        ]));
1✔
1127
    }
1✔
1128

1129
    #[test]
1130
    fn converse_kattis_escapewallmaria_1() {
1✔
1131
        assert!(kattis_escapewallmaria_1().converse().arcs().eq([
1✔
1132
            (5, 6),
1✔
1133
            (5, 9),
1✔
1134
            (6, 5),
1✔
1135
            (9, 5),
1✔
1136
            (9, 13),
1✔
1137
            (12, 13),
1✔
1138
            (13, 9)
1✔
1139
        ]));
1✔
1140
    }
1✔
1141

1142
    #[test]
1143
    fn converse_kattis_escapewallmaria_2() {
1✔
1144
        assert!(kattis_escapewallmaria_2().converse().arcs().eq([
1✔
1145
            (5, 6),
1✔
1146
            (5, 9),
1✔
1147
            (6, 5),
1✔
1148
            (9, 5),
1✔
1149
            (9, 13),
1✔
1150
            (12, 13),
1✔
1151
            (13, 12)
1✔
1152
        ]));
1✔
1153
    }
1✔
1154

1155
    #[test]
1156
    fn converse_kattis_escapewallmaria_3() {
1✔
1157
        assert!(kattis_escapewallmaria_3().converse().arcs().eq([
1✔
1158
            (1, 2),
1✔
1159
            (1, 5),
1✔
1160
            (2, 1),
1✔
1161
            (2, 6),
1✔
1162
            (5, 1),
1✔
1163
            (5, 6),
1✔
1164
            (5, 9),
1✔
1165
            (6, 2),
1✔
1166
            (6, 5),
1✔
1167
            (9, 5),
1✔
1168
            (9, 13),
1✔
1169
            (12, 13),
1✔
1170
            (13, 9),
1✔
1171
            (13, 12)
1✔
1172
        ]));
1✔
1173
    }
1✔
1174

1175
    #[test]
1176
    fn cycle() {
1✔
1177
        assert!(Digraph::cycle(1).arcs().eq([(0, 0)]));
1✔
1178
        assert!(Digraph::cycle(2).arcs().eq([(0, 1), (1, 0)]));
1✔
1179
        assert!(Digraph::cycle(3).arcs().eq([(0, 1), (1, 2), (2, 0)]));
1✔
1180
    }
1✔
1181

1182
    #[test]
1183
    fn cycle_has_edge_trivial() {
1✔
1184
        let digraph = Digraph::cycle(1);
1✔
1185

1✔
1186
        assert!(digraph.has_edge(0, 0));
1✔
1187
    }
1✔
1188

1189
    #[test]
1190
    fn cycle_has_edge_pair() {
1✔
1191
        let digraph = Digraph::cycle(2);
1✔
1192

1193
        for s in 0..2 {
3✔
1194
            for t in s + 1..2 {
2✔
1195
                assert!(digraph.has_edge(s, t));
1✔
1196
            }
1197
        }
1198
    }
1✔
1199

1200
    #[test]
1201
    fn cycle_is_complete_trivial() {
1✔
1202
        assert!(Digraph::cycle(1).is_complete());
1✔
1203
    }
1✔
1204

1205
    #[test]
1206
    fn cycle_is_complete_pair() {
1✔
1207
        assert!(Digraph::cycle(2).is_complete());
1✔
1208
    }
1✔
1209

1210
    #[test]
1211
    fn cycle_is_oriented_trivial() {
1✔
1212
        assert!(!Digraph::cycle(1).is_oriented());
1✔
1213
    }
1✔
1214

1215
    #[test]
1216
    fn cycle_is_oriented_pair() {
1✔
1217
        assert!(!Digraph::cycle(2).is_oriented());
1✔
1218
    }
1✔
1219

1220
    #[test]
1221
    fn cycle_is_semicomplete_trivial() {
1✔
1222
        assert!(Digraph::cycle(1).is_semicomplete());
1✔
1223
    }
1✔
1224

1225
    #[test]
1226
    fn cycle_is_semicomplete_pair() {
1✔
1227
        assert!(Digraph::cycle(2).is_semicomplete());
1✔
1228
    }
1✔
1229

1230
    #[test]
1231
    fn cycle_is_semicomplete_triple() {
1✔
1232
        assert!(Digraph::cycle(3).is_semicomplete());
1✔
1233
    }
1✔
1234

1235
    #[test]
1236
    fn cycle_is_simple_trivial() {
1✔
1237
        assert!(!Digraph::cycle(1).is_simple());
1✔
1238
    }
1✔
1239

1240
    #[test]
1241
    fn cycle_is_symmetric_trivial() {
1✔
1242
        assert!(Digraph::cycle(1).is_symmetric());
1✔
1243
    }
1✔
1244

1245
    #[test]
1246
    fn cycle_is_symmetric_pair() {
1✔
1247
        assert!(Digraph::cycle(2).is_symmetric());
1✔
1248
    }
1✔
1249

1250
    #[test]
1251
    fn degree_bang_jensen_34() {
1✔
1252
        let digraph = bang_jensen_34();
1✔
1253

1✔
1254
        assert!(digraph.degree(0) == 2);
1✔
1255
        assert!(digraph.degree(1) == 2);
1✔
1256
        assert!(digraph.degree(2) == 3);
1✔
1257
        assert!(digraph.degree(3) == 1);
1✔
1258
        assert!(digraph.degree(4) == 2);
1✔
1259
        assert!(digraph.degree(5) == 2);
1✔
1260
    }
1✔
1261

1262
    #[test]
1263
    fn degree_bang_jensen_94() {
1✔
1264
        let digraph = bang_jensen_94();
1✔
1265

1✔
1266
        assert!(digraph.degree(0) == 2);
1✔
1267
        assert!(digraph.degree(1) == 3);
1✔
1268
        assert!(digraph.degree(2) == 5);
1✔
1269
        assert!(digraph.degree(3) == 3);
1✔
1270
        assert!(digraph.degree(4) == 2);
1✔
1271
        assert!(digraph.degree(5) == 2);
1✔
1272
        assert!(digraph.degree(6) == 1);
1✔
1273
    }
1✔
1274

1275
    #[test]
1276
    fn degree_kattis_builddeps() {
1✔
1277
        let digraph = kattis_builddeps();
1✔
1278

1✔
1279
        assert!(digraph.degree(0) == 2);
1✔
1280
        assert!(digraph.degree(1) == 3);
1✔
1281
        assert!(digraph.degree(2) == 3);
1✔
1282
        assert!(digraph.degree(3) == 3);
1✔
1283
        assert!(digraph.degree(4) == 3);
1✔
1284
        assert!(digraph.degree(5) == 2);
1✔
1285
    }
1✔
1286

1287
    #[test]
1288
    fn degree_escapewallmaria_1() {
1✔
1289
        let digraph = kattis_escapewallmaria_1();
1✔
1290

1✔
1291
        assert!(digraph.degree(0) == 0);
1✔
1292
        assert!(digraph.degree(1) == 0);
1✔
1293
        assert!(digraph.degree(2) == 0);
1✔
1294
        assert!(digraph.degree(3) == 0);
1✔
1295
        assert!(digraph.degree(4) == 0);
1✔
1296
        assert!(digraph.degree(5) == 4);
1✔
1297
        assert!(digraph.degree(6) == 2);
1✔
1298
        assert!(digraph.degree(7) == 0);
1✔
1299
        assert!(digraph.degree(8) == 0);
1✔
1300
        assert!(digraph.degree(9) == 4);
1✔
1301
        assert!(digraph.degree(10) == 0);
1✔
1302
        assert!(digraph.degree(11) == 0);
1✔
1303
        assert!(digraph.degree(12) == 1);
1✔
1304
        assert!(digraph.degree(13) == 3);
1✔
1305
    }
1✔
1306

1307
    #[test]
1308
    fn degree_escapewallmaria_2() {
1✔
1309
        let digraph = kattis_escapewallmaria_2();
1✔
1310

1✔
1311
        assert!(digraph.degree(0) == 0);
1✔
1312
        assert!(digraph.degree(1) == 0);
1✔
1313
        assert!(digraph.degree(2) == 0);
1✔
1314
        assert!(digraph.degree(3) == 0);
1✔
1315
        assert!(digraph.degree(4) == 0);
1✔
1316
        assert!(digraph.degree(5) == 4);
1✔
1317
        assert!(digraph.degree(6) == 2);
1✔
1318
        assert!(digraph.degree(7) == 0);
1✔
1319
        assert!(digraph.degree(8) == 0);
1✔
1320
        assert!(digraph.degree(9) == 3);
1✔
1321
        assert!(digraph.degree(10) == 0);
1✔
1322
        assert!(digraph.degree(11) == 0);
1✔
1323
        assert!(digraph.degree(12) == 2);
1✔
1324
        assert!(digraph.degree(13) == 3);
1✔
1325
    }
1✔
1326

1327
    #[test]
1328
    fn degree_escapewallmaria_3() {
1✔
1329
        let digraph = kattis_escapewallmaria_3();
1✔
1330

1✔
1331
        assert!(digraph.degree(0) == 0);
1✔
1332
        assert!(digraph.degree(1) == 4);
1✔
1333
        assert!(digraph.degree(2) == 4);
1✔
1334
        assert!(digraph.degree(3) == 0);
1✔
1335
        assert!(digraph.degree(4) == 0);
1✔
1336
        assert!(digraph.degree(5) == 6);
1✔
1337
        assert!(digraph.degree(6) == 4);
1✔
1338
        assert!(digraph.degree(7) == 0);
1✔
1339
        assert!(digraph.degree(8) == 0);
1✔
1340
        assert!(digraph.degree(9) == 4);
1✔
1341
        assert!(digraph.degree(10) == 0);
1✔
1342
        assert!(digraph.degree(11) == 0);
1✔
1343
        assert!(digraph.degree(12) == 2);
1✔
1344
        assert!(digraph.degree(13) == 4);
1✔
1345
    }
1✔
1346

1347
    #[test]
1348
    fn empty() {
1✔
1349
        assert!(Digraph::empty(1).arcs().eq([]));
1✔
1350
        assert!(Digraph::empty(2).arcs().eq([]));
1✔
1351
        assert!(Digraph::empty(3).arcs().eq([]));
1✔
1352
    }
1✔
1353

1354
    #[test]
1355
    fn empty_is_complete_trivial() {
1✔
1356
        assert!(Digraph::trivial().is_complete());
1✔
1357
    }
1✔
1358

1359
    #[test]
1360
    fn empty_is_semicomplete_trivial() {
1✔
1361
        assert!(Digraph::trivial().is_semicomplete());
1✔
1362
    }
1✔
1363

1364
    #[test]
1365
    fn in_neighbors_bang_jensen_34() {
1✔
1366
        let digraph = bang_jensen_34();
1✔
1367

1✔
1368
        assert!(digraph.in_neighbors(0).eq([1]));
1✔
1369
        assert!(digraph.in_neighbors(1).eq([2]));
1✔
1370
        assert!(digraph.in_neighbors(2).eq([]));
1✔
1371
        assert!(digraph.in_neighbors(3).eq([2]));
1✔
1372
        assert!(digraph.in_neighbors(4).eq([0, 5]));
1✔
1373
        assert!(digraph.in_neighbors(5).eq([2]));
1✔
1374
    }
1✔
1375

1376
    #[test]
1377
    fn in_neighbors_bang_jensen_94() {
1✔
1378
        let digraph = bang_jensen_94();
1✔
1379

1✔
1380
        assert!(digraph.in_neighbors(0).eq([]));
1✔
1381
        assert!(digraph.in_neighbors(1).eq([0, 2]));
1✔
1382
        assert!(digraph.in_neighbors(2).eq([0]));
1✔
1383
        assert!(digraph.in_neighbors(3).eq([1, 2]));
1✔
1384
        assert!(digraph.in_neighbors(4).eq([2]));
1✔
1385
        assert!(digraph.in_neighbors(5).eq([2, 3]));
1✔
1386
        assert!(digraph.in_neighbors(6).eq([4]));
1✔
1387
    }
1✔
1388

1389
    #[test]
1390
    fn in_neighbors_kattis_builddeps() {
1✔
1391
        let digraph = kattis_builddeps();
1✔
1392

1✔
1393
        assert!(digraph.in_neighbors(0).eq([]));
1✔
1394
        assert!(digraph.in_neighbors(1).eq([3, 4, 5]));
1✔
1395
        assert!(digraph.in_neighbors(2).eq([]));
1✔
1396
        assert!(digraph.in_neighbors(3).eq([0, 2]));
1✔
1397
        assert!(digraph.in_neighbors(4).eq([0, 2]));
1✔
1398
        assert!(digraph.in_neighbors(5).eq([2]));
1✔
1399
    }
1✔
1400

1401
    #[test]
1402
    fn in_neighbors_kattis_escapewallmaria_1() {
1✔
1403
        let digraph = kattis_escapewallmaria_1();
1✔
1404

1✔
1405
        assert!(digraph.in_neighbors(0).eq([]));
1✔
1406
        assert!(digraph.in_neighbors(1).eq([]));
1✔
1407
        assert!(digraph.in_neighbors(2).eq([]));
1✔
1408
        assert!(digraph.in_neighbors(3).eq([]));
1✔
1409
        assert!(digraph.in_neighbors(4).eq([]));
1✔
1410
        assert!(digraph.in_neighbors(5).eq([6, 9]));
1✔
1411
        assert!(digraph.in_neighbors(6).eq([5]));
1✔
1412
        assert!(digraph.in_neighbors(7).eq([]));
1✔
1413
        assert!(digraph.in_neighbors(8).eq([]));
1✔
1414
        assert!(digraph.in_neighbors(9).eq([5, 13]));
1✔
1415
        assert!(digraph.in_neighbors(10).eq([]));
1✔
1416
        assert!(digraph.in_neighbors(11).eq([]));
1✔
1417
        assert!(digraph.in_neighbors(12).eq([13]));
1✔
1418
        assert!(digraph.in_neighbors(13).eq([9]));
1✔
1419
    }
1✔
1420

1421
    #[test]
1422
    fn in_neighbors_kattis_escapewallmaria_2() {
1✔
1423
        let digraph = kattis_escapewallmaria_2();
1✔
1424

1✔
1425
        assert!(digraph.in_neighbors(0).eq([]));
1✔
1426
        assert!(digraph.in_neighbors(1).eq([]));
1✔
1427
        assert!(digraph.in_neighbors(2).eq([]));
1✔
1428
        assert!(digraph.in_neighbors(3).eq([]));
1✔
1429
        assert!(digraph.in_neighbors(4).eq([]));
1✔
1430
        assert!(digraph.in_neighbors(5).eq([6, 9]));
1✔
1431
        assert!(digraph.in_neighbors(6).eq([5]));
1✔
1432
        assert!(digraph.in_neighbors(7).eq([]));
1✔
1433
        assert!(digraph.in_neighbors(8).eq([]));
1✔
1434
        assert!(digraph.in_neighbors(9).eq([5, 13]));
1✔
1435
        assert!(digraph.in_neighbors(10).eq([]));
1✔
1436
        assert!(digraph.in_neighbors(11).eq([]));
1✔
1437
        assert!(digraph.in_neighbors(12).eq([13]));
1✔
1438
        assert!(digraph.in_neighbors(13).eq([12]));
1✔
1439
    }
1✔
1440

1441
    #[test]
1442
    fn in_neighbors_kattis_escapewallmaria_3() {
1✔
1443
        let digraph = kattis_escapewallmaria_3();
1✔
1444

1✔
1445
        assert!(digraph.in_neighbors(0).eq([]));
1✔
1446
        assert!(digraph.in_neighbors(1).eq([2, 5]));
1✔
1447
        assert!(digraph.in_neighbors(2).eq([1, 6]));
1✔
1448
        assert!(digraph.in_neighbors(3).eq([]));
1✔
1449
        assert!(digraph.in_neighbors(4).eq([]));
1✔
1450
        assert!(digraph.in_neighbors(5).eq([1, 6, 9]));
1✔
1451
        assert!(digraph.in_neighbors(6).eq([2, 5]));
1✔
1452
        assert!(digraph.in_neighbors(7).eq([]));
1✔
1453
        assert!(digraph.in_neighbors(8).eq([]));
1✔
1454
        assert!(digraph.in_neighbors(9).eq([5, 13]));
1✔
1455
        assert!(digraph.in_neighbors(10).eq([]));
1✔
1456
        assert!(digraph.in_neighbors(11).eq([]));
1✔
1457
        assert!(digraph.in_neighbors(12).eq([13]));
1✔
1458
        assert!(digraph.in_neighbors(13).eq([9, 12]));
1✔
1459
    }
1✔
1460

1461
    #[test]
1462
    fn indegree_bang_jensen_34() {
1✔
1463
        let digraph = bang_jensen_34();
1✔
1464

1✔
1465
        assert!(digraph.indegree(0) == 1);
1✔
1466
        assert!(digraph.indegree(1) == 1);
1✔
1467
        assert!(digraph.indegree(2) == 0);
1✔
1468
        assert!(digraph.indegree(3) == 1);
1✔
1469
        assert!(digraph.indegree(4) == 2);
1✔
1470
        assert!(digraph.indegree(5) == 1);
1✔
1471
    }
1✔
1472

1473
    #[test]
1474
    fn indegree_bang_jensen_94() {
1✔
1475
        let digraph = bang_jensen_94();
1✔
1476

1✔
1477
        assert!(digraph.indegree(0) == 0);
1✔
1478
        assert!(digraph.indegree(1) == 2);
1✔
1479
        assert!(digraph.indegree(2) == 1);
1✔
1480
        assert!(digraph.indegree(3) == 2);
1✔
1481
        assert!(digraph.indegree(4) == 1);
1✔
1482
        assert!(digraph.indegree(5) == 2);
1✔
1483
        assert!(digraph.indegree(6) == 1);
1✔
1484
    }
1✔
1485

1486
    #[test]
1487
    fn indegree_kattis_builddeps() {
1✔
1488
        let digraph = kattis_builddeps();
1✔
1489

1✔
1490
        assert!(digraph.indegree(0) == 0);
1✔
1491
        assert!(digraph.indegree(1) == 3);
1✔
1492
        assert!(digraph.indegree(2) == 0);
1✔
1493
        assert!(digraph.indegree(3) == 2);
1✔
1494
        assert!(digraph.indegree(4) == 2);
1✔
1495
        assert!(digraph.indegree(5) == 1);
1✔
1496
    }
1✔
1497

1498
    #[test]
1499
    fn indegree_escapewallmaria_1() {
1✔
1500
        let digraph = kattis_escapewallmaria_1();
1✔
1501

1✔
1502
        assert!(digraph.indegree(0) == 0);
1✔
1503
        assert!(digraph.indegree(1) == 0);
1✔
1504
        assert!(digraph.indegree(2) == 0);
1✔
1505
        assert!(digraph.indegree(3) == 0);
1✔
1506
        assert!(digraph.indegree(4) == 0);
1✔
1507
        assert!(digraph.indegree(5) == 2);
1✔
1508
        assert!(digraph.indegree(6) == 1);
1✔
1509
        assert!(digraph.indegree(7) == 0);
1✔
1510
        assert!(digraph.indegree(8) == 0);
1✔
1511
        assert!(digraph.indegree(9) == 2);
1✔
1512
        assert!(digraph.indegree(10) == 0);
1✔
1513
        assert!(digraph.indegree(11) == 0);
1✔
1514
        assert!(digraph.indegree(12) == 1);
1✔
1515
        assert!(digraph.indegree(13) == 1);
1✔
1516
    }
1✔
1517

1518
    #[test]
1519
    fn indegree_escapewallmaria_2() {
1✔
1520
        let digraph = kattis_escapewallmaria_2();
1✔
1521

1✔
1522
        assert!(digraph.indegree(0) == 0);
1✔
1523
        assert!(digraph.indegree(1) == 0);
1✔
1524
        assert!(digraph.indegree(2) == 0);
1✔
1525
        assert!(digraph.indegree(3) == 0);
1✔
1526
        assert!(digraph.indegree(4) == 0);
1✔
1527
        assert!(digraph.indegree(5) == 2);
1✔
1528
        assert!(digraph.indegree(6) == 1);
1✔
1529
        assert!(digraph.indegree(7) == 0);
1✔
1530
        assert!(digraph.indegree(8) == 0);
1✔
1531
        assert!(digraph.indegree(9) == 2);
1✔
1532
        assert!(digraph.indegree(10) == 0);
1✔
1533
        assert!(digraph.indegree(11) == 0);
1✔
1534
        assert!(digraph.indegree(12) == 1);
1✔
1535
        assert!(digraph.indegree(13) == 1);
1✔
1536
    }
1✔
1537

1538
    #[test]
1539
    fn indegree_escapewallmaria_3() {
1✔
1540
        let digraph = kattis_escapewallmaria_3();
1✔
1541

1✔
1542
        assert!(digraph.indegree(0) == 0);
1✔
1543
        assert!(digraph.indegree(1) == 2);
1✔
1544
        assert!(digraph.indegree(2) == 2);
1✔
1545
        assert!(digraph.indegree(3) == 0);
1✔
1546
        assert!(digraph.indegree(4) == 0);
1✔
1547
        assert!(digraph.indegree(5) == 3);
1✔
1548
        assert!(digraph.indegree(6) == 2);
1✔
1549
        assert!(digraph.indegree(7) == 0);
1✔
1550
        assert!(digraph.indegree(8) == 0);
1✔
1551
        assert!(digraph.indegree(9) == 2);
1✔
1552
        assert!(digraph.indegree(10) == 0);
1✔
1553
        assert!(digraph.indegree(11) == 0);
1✔
1554
        assert!(digraph.indegree(12) == 1);
1✔
1555
        assert!(digraph.indegree(13) == 2);
1✔
1556
    }
1✔
1557

1558
    #[test]
1559
    fn is_balanced_bang_jensen_34() {
1✔
1560
        assert!(!bang_jensen_34().is_balanced());
1✔
1561
    }
1✔
1562

1563
    #[test]
1564
    fn is_balanced_bang_jensen_94() {
1✔
1565
        assert!(!bang_jensen_94().is_balanced());
1✔
1566
    }
1✔
1567

1568
    #[test]
1569
    fn is_balanced_kattis_builddeps() {
1✔
1570
        assert!(!kattis_builddeps().is_balanced());
1✔
1571
    }
1✔
1572

1573
    #[test]
1574
    fn is_balanced_kattis_escapewallmaria_1() {
1✔
1575
        assert!(!kattis_escapewallmaria_1().is_balanced());
1✔
1576
    }
1✔
1577

1578
    #[test]
1579
    fn is_balanced_kattis_escapewallmaria_2() {
1✔
1580
        assert!(!kattis_escapewallmaria_2().is_balanced());
1✔
1581
    }
1✔
1582

1583
    #[test]
1584
    fn is_balanced_kattis_escapewallmaria_3() {
1✔
1585
        assert!(kattis_escapewallmaria_3().is_balanced());
1✔
1586
    }
1✔
1587

1588
    #[test]
1589
    fn is_complete_bang_jensen_34() {
1✔
1590
        assert!(!bang_jensen_34().is_complete());
1✔
1591
    }
1✔
1592

1593
    #[test]
1594
    fn is_complete_bang_jensen_94() {
1✔
1595
        assert!(!bang_jensen_94().is_complete());
1✔
1596
    }
1✔
1597

1598
    #[test]
1599
    fn is_complete_kattis_builddeps() {
1✔
1600
        assert!(!kattis_builddeps().is_complete());
1✔
1601
    }
1✔
1602

1603
    #[test]
1604
    fn is_complete_kattis_escapewallmaria_1() {
1✔
1605
        assert!(!kattis_escapewallmaria_1().is_complete());
1✔
1606
    }
1✔
1607

1608
    #[test]
1609
    fn is_complete_kattis_escapewallmaria_2() {
1✔
1610
        assert!(!kattis_escapewallmaria_2().is_complete());
1✔
1611
    }
1✔
1612

1613
    #[test]
1614
    fn is_complete_kattis_escapewallmaria_3() {
1✔
1615
        assert!(!kattis_escapewallmaria_3().is_complete());
1✔
1616
    }
1✔
1617

1618
    #[test]
1619
    fn is_isolated_bang_jensen_34() {
1✔
1620
        let digraph = bang_jensen_34();
1✔
1621

1✔
1622
        assert!(!digraph.is_isolated(0));
1✔
1623
        assert!(!digraph.is_isolated(1));
1✔
1624
        assert!(!digraph.is_isolated(2));
1✔
1625
        assert!(!digraph.is_isolated(3));
1✔
1626
        assert!(!digraph.is_isolated(4));
1✔
1627
        assert!(!digraph.is_isolated(5));
1✔
1628
    }
1✔
1629

1630
    #[test]
1631
    fn is_isolated_bang_jensen_94() {
1✔
1632
        let digraph = bang_jensen_94();
1✔
1633

1✔
1634
        assert!(!digraph.is_isolated(0));
1✔
1635
        assert!(!digraph.is_isolated(1));
1✔
1636
        assert!(!digraph.is_isolated(2));
1✔
1637
        assert!(!digraph.is_isolated(3));
1✔
1638
        assert!(!digraph.is_isolated(4));
1✔
1639
        assert!(!digraph.is_isolated(5));
1✔
1640
        assert!(!digraph.is_isolated(6));
1✔
1641
    }
1✔
1642

1643
    #[test]
1644
    fn is_isolated_kattis_builddeps() {
1✔
1645
        let digraph = kattis_builddeps();
1✔
1646

1✔
1647
        assert!(!digraph.is_isolated(0));
1✔
1648
        assert!(!digraph.is_isolated(1));
1✔
1649
        assert!(!digraph.is_isolated(2));
1✔
1650
        assert!(!digraph.is_isolated(3));
1✔
1651
        assert!(!digraph.is_isolated(4));
1✔
1652
        assert!(!digraph.is_isolated(5));
1✔
1653
    }
1✔
1654

1655
    #[test]
1656
    fn is_isolated_kattis_escapewallmaria_1() {
1✔
1657
        let digraph = kattis_escapewallmaria_1();
1✔
1658

1✔
1659
        assert!(digraph.is_isolated(0));
1✔
1660
        assert!(digraph.is_isolated(1));
1✔
1661
        assert!(digraph.is_isolated(2));
1✔
1662
        assert!(digraph.is_isolated(3));
1✔
1663
        assert!(digraph.is_isolated(4));
1✔
1664
        assert!(!digraph.is_isolated(5));
1✔
1665
        assert!(!digraph.is_isolated(6));
1✔
1666
        assert!(digraph.is_isolated(7));
1✔
1667
        assert!(digraph.is_isolated(8));
1✔
1668
        assert!(!digraph.is_isolated(9));
1✔
1669
        assert!(digraph.is_isolated(10));
1✔
1670
        assert!(digraph.is_isolated(11));
1✔
1671
        assert!(!digraph.is_isolated(12));
1✔
1672
        assert!(!digraph.is_isolated(13));
1✔
1673
    }
1✔
1674

1675
    #[test]
1676
    fn is_isolated_kattis_escapewallmaria_2() {
1✔
1677
        let digraph = kattis_escapewallmaria_2();
1✔
1678

1✔
1679
        assert!(digraph.is_isolated(0));
1✔
1680
        assert!(digraph.is_isolated(1));
1✔
1681
        assert!(digraph.is_isolated(2));
1✔
1682
        assert!(digraph.is_isolated(3));
1✔
1683
        assert!(digraph.is_isolated(4));
1✔
1684
        assert!(!digraph.is_isolated(5));
1✔
1685
        assert!(!digraph.is_isolated(6));
1✔
1686
        assert!(digraph.is_isolated(7));
1✔
1687
        assert!(digraph.is_isolated(8));
1✔
1688
        assert!(!digraph.is_isolated(9));
1✔
1689
        assert!(digraph.is_isolated(10));
1✔
1690
        assert!(digraph.is_isolated(11));
1✔
1691
        assert!(!digraph.is_isolated(12));
1✔
1692
        assert!(!digraph.is_isolated(13));
1✔
1693
    }
1✔
1694

1695
    #[test]
1696
    fn is_isolated_kattis_escapewallmaria_3() {
1✔
1697
        let digraph = kattis_escapewallmaria_3();
1✔
1698

1✔
1699
        assert!(digraph.is_isolated(0));
1✔
1700
        assert!(!digraph.is_isolated(1));
1✔
1701
        assert!(!digraph.is_isolated(2));
1✔
1702
        assert!(digraph.is_isolated(3));
1✔
1703
        assert!(digraph.is_isolated(4));
1✔
1704
        assert!(!digraph.is_isolated(5));
1✔
1705
        assert!(!digraph.is_isolated(6));
1✔
1706
        assert!(digraph.is_isolated(7));
1✔
1707
        assert!(digraph.is_isolated(8));
1✔
1708
        assert!(!digraph.is_isolated(9));
1✔
1709
        assert!(digraph.is_isolated(10));
1✔
1710
        assert!(digraph.is_isolated(11));
1✔
1711
        assert!(!digraph.is_isolated(12));
1✔
1712
        assert!(!digraph.is_isolated(13));
1✔
1713
    }
1✔
1714

1715
    #[test]
1716
    fn is_oriented_bang_jensen_34() {
1✔
1717
        assert!(bang_jensen_34().is_oriented());
1✔
1718
    }
1✔
1719

1720
    #[test]
1721
    fn is_oriented_bang_jensen_94() {
1✔
1722
        assert!(bang_jensen_94().is_oriented());
1✔
1723
    }
1✔
1724

1725
    #[test]
1726
    fn is_oriented_kattis_builddeps() {
1✔
1727
        assert!(kattis_builddeps().is_oriented());
1✔
1728
    }
1✔
1729

1730
    #[test]
1731
    fn is_oriented_kattis_escapewallmaria_1() {
1✔
1732
        assert!(!kattis_escapewallmaria_1().is_oriented());
1✔
1733
    }
1✔
1734

1735
    #[test]
1736
    fn is_oriented_kattis_escapewallmaria_2() {
1✔
1737
        assert!(!kattis_escapewallmaria_2().is_oriented());
1✔
1738
    }
1✔
1739

1740
    #[test]
1741
    fn is_oriented_kattis_escapewallmaria_3() {
1✔
1742
        assert!(!kattis_escapewallmaria_3().is_oriented());
1✔
1743
    }
1✔
1744

1745
    #[test]
1746
    fn is_pendant_bang_jensen_34() {
1✔
1747
        let digraph = bang_jensen_34();
1✔
1748

1✔
1749
        assert!(!digraph.is_pendant(0));
1✔
1750
        assert!(!digraph.is_pendant(1));
1✔
1751
        assert!(!digraph.is_pendant(2));
1✔
1752
        assert!(digraph.is_pendant(3));
1✔
1753
        assert!(!digraph.is_pendant(4));
1✔
1754
        assert!(!digraph.is_pendant(5));
1✔
1755
    }
1✔
1756

1757
    #[test]
1758
    fn is_pendant_bang_jensen_94() {
1✔
1759
        let digraph = bang_jensen_94();
1✔
1760

1✔
1761
        assert!(!digraph.is_pendant(0));
1✔
1762
        assert!(!digraph.is_pendant(1));
1✔
1763
        assert!(!digraph.is_pendant(2));
1✔
1764
        assert!(!digraph.is_pendant(3));
1✔
1765
        assert!(!digraph.is_pendant(4));
1✔
1766
        assert!(!digraph.is_pendant(5));
1✔
1767
        assert!(digraph.is_pendant(6));
1✔
1768
    }
1✔
1769

1770
    #[test]
1771
    fn is_pendant_kattis_builddeps() {
1✔
1772
        let digraph = kattis_builddeps();
1✔
1773

1✔
1774
        assert!(!digraph.is_pendant(0));
1✔
1775
        assert!(!digraph.is_pendant(1));
1✔
1776
        assert!(!digraph.is_pendant(2));
1✔
1777
        assert!(!digraph.is_pendant(3));
1✔
1778
        assert!(!digraph.is_pendant(4));
1✔
1779
        assert!(!digraph.is_pendant(5));
1✔
1780
    }
1✔
1781

1782
    #[test]
1783
    fn is_pendant_kattis_escapewallmaria_1() {
1✔
1784
        let digraph = kattis_escapewallmaria_1();
1✔
1785

1✔
1786
        assert!(!digraph.is_pendant(0));
1✔
1787
        assert!(!digraph.is_pendant(1));
1✔
1788
        assert!(!digraph.is_pendant(2));
1✔
1789
        assert!(!digraph.is_pendant(3));
1✔
1790
        assert!(!digraph.is_pendant(4));
1✔
1791
        assert!(!digraph.is_pendant(5));
1✔
1792
        assert!(!digraph.is_pendant(6));
1✔
1793
        assert!(!digraph.is_pendant(7));
1✔
1794
        assert!(!digraph.is_pendant(8));
1✔
1795
        assert!(!digraph.is_pendant(9));
1✔
1796
        assert!(!digraph.is_pendant(10));
1✔
1797
        assert!(!digraph.is_pendant(11));
1✔
1798
        assert!(digraph.is_pendant(12));
1✔
1799
        assert!(!digraph.is_pendant(13));
1✔
1800
    }
1✔
1801

1802
    #[test]
1803
    fn is_pendant_kattis_escapewallmaria_2() {
1✔
1804
        let digraph = kattis_escapewallmaria_2();
1✔
1805

1✔
1806
        assert!(!digraph.is_pendant(0));
1✔
1807
        assert!(!digraph.is_pendant(1));
1✔
1808
        assert!(!digraph.is_pendant(2));
1✔
1809
        assert!(!digraph.is_pendant(3));
1✔
1810
        assert!(!digraph.is_pendant(4));
1✔
1811
        assert!(!digraph.is_pendant(5));
1✔
1812
        assert!(!digraph.is_pendant(6));
1✔
1813
        assert!(!digraph.is_pendant(7));
1✔
1814
        assert!(!digraph.is_pendant(8));
1✔
1815
        assert!(!digraph.is_pendant(9));
1✔
1816
        assert!(!digraph.is_pendant(10));
1✔
1817
        assert!(!digraph.is_pendant(11));
1✔
1818
        assert!(!digraph.is_pendant(12));
1✔
1819
        assert!(!digraph.is_pendant(13));
1✔
1820
    }
1✔
1821

1822
    #[test]
1823
    fn is_pendant_kattis_escapewallmaria_3() {
1✔
1824
        let digraph = kattis_escapewallmaria_3();
1✔
1825

1✔
1826
        assert!(!digraph.is_pendant(0));
1✔
1827
        assert!(!digraph.is_pendant(1));
1✔
1828
        assert!(!digraph.is_pendant(2));
1✔
1829
        assert!(!digraph.is_pendant(3));
1✔
1830
        assert!(!digraph.is_pendant(4));
1✔
1831
        assert!(!digraph.is_pendant(5));
1✔
1832
        assert!(!digraph.is_pendant(6));
1✔
1833
        assert!(!digraph.is_pendant(7));
1✔
1834
        assert!(!digraph.is_pendant(8));
1✔
1835
        assert!(!digraph.is_pendant(9));
1✔
1836
        assert!(!digraph.is_pendant(10));
1✔
1837
        assert!(!digraph.is_pendant(11));
1✔
1838
        assert!(!digraph.is_pendant(12));
1✔
1839
        assert!(!digraph.is_pendant(13));
1✔
1840
    }
1✔
1841

1842
    #[test]
1843
    fn is_regular_bang_jensen_34() {
1✔
1844
        assert!(!bang_jensen_34().is_regular());
1✔
1845
    }
1✔
1846

1847
    #[test]
1848
    fn is_regular_bang_jensen_94() {
1✔
1849
        assert!(!bang_jensen_94().is_regular());
1✔
1850
    }
1✔
1851

1852
    #[test]
1853
    fn is_regular_kattis_builddeps() {
1✔
1854
        assert!(!kattis_builddeps().is_regular());
1✔
1855
    }
1✔
1856

1857
    #[test]
1858
    fn is_regular_kattis_escapewallmaria_1() {
1✔
1859
        assert!(!kattis_escapewallmaria_1().is_regular());
1✔
1860
    }
1✔
1861

1862
    #[test]
1863
    fn is_regular_kattis_escapewallmaria_2() {
1✔
1864
        assert!(!kattis_escapewallmaria_2().is_regular());
1✔
1865
    }
1✔
1866

1867
    #[test]
1868
    fn is_regular_kattis_escapewallmaria_3() {
1✔
1869
        assert!(!kattis_escapewallmaria_3().is_regular());
1✔
1870
    }
1✔
1871

1872
    #[test]
1873
    fn is_semicomplete_bang_jensen_34() {
1✔
1874
        assert!(!bang_jensen_34().is_semicomplete());
1✔
1875
    }
1✔
1876

1877
    #[test]
1878
    fn is_semicomplete_bang_jensen_94() {
1✔
1879
        assert!(!bang_jensen_94().is_semicomplete());
1✔
1880
    }
1✔
1881

1882
    #[test]
1883
    fn is_semicomplete_kattis_builddeps() {
1✔
1884
        assert!(!kattis_builddeps().is_semicomplete());
1✔
1885
    }
1✔
1886

1887
    #[test]
1888
    fn is_semicomplete_kattis_escapewallmaria_1() {
1✔
1889
        assert!(!kattis_escapewallmaria_1().is_semicomplete());
1✔
1890
    }
1✔
1891

1892
    #[test]
1893
    fn is_semicomplete_kattis_escapewallmaria_2() {
1✔
1894
        assert!(!kattis_escapewallmaria_2().is_semicomplete());
1✔
1895
    }
1✔
1896

1897
    #[test]
1898
    fn is_semicomplete_kattis_escapewallmaria_3() {
1✔
1899
        assert!(!kattis_escapewallmaria_3().is_semicomplete());
1✔
1900
    }
1✔
1901

1902
    #[test]
1903
    fn is_simple_bang_jensen_34() {
1✔
1904
        assert!(bang_jensen_34().is_simple());
1✔
1905
    }
1✔
1906

1907
    #[test]
1908
    fn is_simple_bang_jensen_94() {
1✔
1909
        assert!(bang_jensen_94().is_simple());
1✔
1910
    }
1✔
1911

1912
    #[test]
1913
    fn is_simple_kattis_builddeps() {
1✔
1914
        assert!(kattis_builddeps().is_simple());
1✔
1915
    }
1✔
1916

1917
    #[test]
1918
    fn is_simple_kattis_escapewallmaria_1() {
1✔
1919
        assert!(kattis_escapewallmaria_1().is_simple());
1✔
1920
    }
1✔
1921

1922
    #[test]
1923
    fn is_simple_kattis_escapewallmaria_2() {
1✔
1924
        assert!(kattis_escapewallmaria_2().is_simple());
1✔
1925
    }
1✔
1926

1927
    #[test]
1928
    fn is_simple_kattis_escapewallmaria_3() {
1✔
1929
        assert!(kattis_escapewallmaria_3().is_simple());
1✔
1930
    }
1✔
1931

1932
    #[test]
1933
    fn is_symmetric_bang_jensen_34() {
1✔
1934
        assert!(!bang_jensen_34().is_symmetric());
1✔
1935
    }
1✔
1936

1937
    #[test]
1938
    fn is_symmetric_bang_jensen_94() {
1✔
1939
        assert!(!bang_jensen_94().is_symmetric());
1✔
1940
    }
1✔
1941

1942
    #[test]
1943
    fn is_symmetric_kattis_builddeps() {
1✔
1944
        assert!(!kattis_builddeps().is_symmetric());
1✔
1945
    }
1✔
1946

1947
    #[test]
1948
    fn is_symmetric_kattis_escapewallmaria_1() {
1✔
1949
        assert!(!kattis_escapewallmaria_1().is_symmetric());
1✔
1950
    }
1✔
1951

1952
    #[test]
1953
    fn is_symmetric_kattis_escapewallmaria_2() {
1✔
1954
        assert!(!kattis_escapewallmaria_2().is_symmetric());
1✔
1955
    }
1✔
1956

1957
    #[test]
1958
    fn is_symmetric_kattis_escapewallmaria_3() {
1✔
1959
        assert!(kattis_escapewallmaria_3().is_symmetric());
1✔
1960
    }
1✔
1961

1962
    #[test]
1963
    fn is_walk_bang_jensen_34() {
1✔
1964
        let digraph = bang_jensen_34();
1✔
1965

1✔
1966
        assert!(digraph.is_walk(&[0, 4]));
1✔
1967
        assert!(digraph.is_walk(&[1, 0, 4]));
1✔
1968
        assert!(digraph.is_walk(&[2, 1, 0, 4]));
1✔
1969
        assert!(digraph.is_walk(&[2, 3]));
1✔
1970
        assert!(digraph.is_walk(&[2, 5, 4]));
1✔
1971
        assert!(digraph.is_walk(&[5, 4]));
1✔
1972

1973
        assert!(!digraph.is_walk(&[0, 1]));
1✔
1974
        assert!(!digraph.is_walk(&[1, 2]));
1✔
1975
        assert!(!digraph.is_walk(&[2, 0]));
1✔
1976
        assert!(!digraph.is_walk(&[3]));
1✔
1977
        assert!(!digraph.is_walk(&[4]));
1✔
1978
        assert!(!digraph.is_walk(&[5, 0]));
1✔
1979
    }
1✔
1980

1981
    #[test]
1982
    fn is_walk_bang_jensen_94() {
1✔
1983
        let digraph = bang_jensen_94();
1✔
1984

1✔
1985
        assert!(digraph.is_walk(&[0, 1, 3, 5]));
1✔
1986
        assert!(digraph.is_walk(&[0, 2, 1, 3, 5]));
1✔
1987
        assert!(digraph.is_walk(&[0, 2, 3, 5]));
1✔
1988
        assert!(digraph.is_walk(&[0, 2, 4, 6]));
1✔
1989
        assert!(digraph.is_walk(&[0, 2, 5]));
1✔
1990
        assert!(digraph.is_walk(&[1, 3, 5]));
1✔
1991
        assert!(digraph.is_walk(&[2, 1, 3, 5]));
1✔
1992
        assert!(digraph.is_walk(&[2, 3, 5]));
1✔
1993
        assert!(digraph.is_walk(&[2, 4, 6]));
1✔
1994
        assert!(digraph.is_walk(&[2, 5]));
1✔
1995
        assert!(digraph.is_walk(&[3, 5]));
1✔
1996
        assert!(digraph.is_walk(&[4, 6]));
1✔
1997

1998
        assert!(!digraph.is_walk(&[0, 3]));
1✔
1999
        assert!(!digraph.is_walk(&[1, 0]));
1✔
2000
        assert!(!digraph.is_walk(&[2, 0]));
1✔
2001
        assert!(!digraph.is_walk(&[3, 0]));
1✔
2002
        assert!(!digraph.is_walk(&[4, 0]));
1✔
2003
        assert!(!digraph.is_walk(&[5]));
1✔
2004
        assert!(!digraph.is_walk(&[6]));
1✔
2005
    }
1✔
2006

2007
    #[test]
2008
    fn is_walk_kattis_builddeps() {
1✔
2009
        let digraph = kattis_builddeps();
1✔
2010

1✔
2011
        assert!(digraph.is_walk(&[0, 3, 1]));
1✔
2012
        assert!(digraph.is_walk(&[0, 4, 1]));
1✔
2013
        assert!(digraph.is_walk(&[2, 3, 1]));
1✔
2014
        assert!(digraph.is_walk(&[2, 4, 1]));
1✔
2015
        assert!(digraph.is_walk(&[2, 5, 1]));
1✔
2016
        assert!(digraph.is_walk(&[3, 1]));
1✔
2017
        assert!(digraph.is_walk(&[4, 1]));
1✔
2018
        assert!(digraph.is_walk(&[5, 1]));
1✔
2019

2020
        assert!(!digraph.is_walk(&[0, 1]));
1✔
2021
        assert!(!digraph.is_walk(&[1]));
1✔
2022
        assert!(!digraph.is_walk(&[2, 0]));
1✔
2023
        assert!(!digraph.is_walk(&[3, 0]));
1✔
2024
        assert!(!digraph.is_walk(&[4, 0]));
1✔
2025
        assert!(!digraph.is_walk(&[5, 0]));
1✔
2026
    }
1✔
2027

2028
    #[test]
2029
    #[allow(clippy::cognitive_complexity)]
2030
    fn is_walk_kattis_escapewallmaria_1() {
1✔
2031
        let digraph = kattis_escapewallmaria_1();
1✔
2032

1✔
2033
        assert!(digraph.is_walk(&[5, 6, 5]));
1✔
2034
        assert!(digraph.is_walk(&[5, 9, 5]));
1✔
2035
        assert!(digraph.is_walk(&[5, 9, 13, 9]));
1✔
2036
        assert!(digraph.is_walk(&[5, 9, 13, 12]));
1✔
2037
        assert!(digraph.is_walk(&[6, 5, 6]));
1✔
2038
        assert!(digraph.is_walk(&[6, 5, 9, 13, 9]));
1✔
2039
        assert!(digraph.is_walk(&[6, 5, 9, 13, 12]));
1✔
2040
        assert!(digraph.is_walk(&[9, 5, 6, 5]));
1✔
2041
        assert!(digraph.is_walk(&[9, 5, 9]));
1✔
2042
        assert!(digraph.is_walk(&[9, 13, 9]));
1✔
2043
        assert!(digraph.is_walk(&[9, 13, 12]));
1✔
2044
        assert!(digraph.is_walk(&[13, 9, 5, 6, 5]));
1✔
2045
        assert!(digraph.is_walk(&[13, 9, 5, 9]));
1✔
2046
        assert!(digraph.is_walk(&[13, 9, 13]));
1✔
2047
        assert!(digraph.is_walk(&[13, 12]));
1✔
2048

2049
        assert!(!digraph.is_walk(&[0]));
1✔
2050
        assert!(!digraph.is_walk(&[1]));
1✔
2051
        assert!(!digraph.is_walk(&[2]));
1✔
2052
        assert!(!digraph.is_walk(&[3]));
1✔
2053
        assert!(!digraph.is_walk(&[4]));
1✔
2054
        assert!(!digraph.is_walk(&[5, 0]));
1✔
2055
        assert!(!digraph.is_walk(&[6, 0]));
1✔
2056
        assert!(!digraph.is_walk(&[7]));
1✔
2057
        assert!(!digraph.is_walk(&[8]));
1✔
2058
        assert!(!digraph.is_walk(&[9, 0]));
1✔
2059
        assert!(!digraph.is_walk(&[10]));
1✔
2060
        assert!(!digraph.is_walk(&[11]));
1✔
2061
        assert!(!digraph.is_walk(&[12]));
1✔
2062
        assert!(!digraph.is_walk(&[13, 0]));
1✔
2063
    }
1✔
2064

2065
    #[test]
2066
    #[allow(clippy::cognitive_complexity)]
2067
    fn is_walk_kattis_escapewallmaria_2() {
1✔
2068
        let digraph = kattis_escapewallmaria_2();
1✔
2069

1✔
2070
        assert!(digraph.is_walk(&[5, 6, 5]));
1✔
2071
        assert!(digraph.is_walk(&[5, 9, 5]));
1✔
2072
        assert!(digraph.is_walk(&[6, 5, 6]));
1✔
2073
        assert!(digraph.is_walk(&[6, 5, 9, 5]));
1✔
2074
        assert!(digraph.is_walk(&[9, 5, 6, 5]));
1✔
2075
        assert!(digraph.is_walk(&[9, 5, 9]));
1✔
2076
        assert!(digraph.is_walk(&[12, 13, 9, 5, 6, 5]));
1✔
2077
        assert!(digraph.is_walk(&[12, 13, 9, 5, 9]));
1✔
2078
        assert!(digraph.is_walk(&[12, 13, 12]));
1✔
2079
        assert!(digraph.is_walk(&[13, 9, 5, 6, 5]));
1✔
2080
        assert!(digraph.is_walk(&[13, 9, 5, 9]));
1✔
2081
        assert!(digraph.is_walk(&[13, 12, 13]));
1✔
2082

2083
        assert!(!digraph.is_walk(&[0]));
1✔
2084
        assert!(!digraph.is_walk(&[1]));
1✔
2085
        assert!(!digraph.is_walk(&[2]));
1✔
2086
        assert!(!digraph.is_walk(&[3]));
1✔
2087
        assert!(!digraph.is_walk(&[4]));
1✔
2088
        assert!(!digraph.is_walk(&[5, 0]));
1✔
2089
        assert!(!digraph.is_walk(&[6, 0]));
1✔
2090
        assert!(!digraph.is_walk(&[7]));
1✔
2091
        assert!(!digraph.is_walk(&[8]));
1✔
2092
        assert!(!digraph.is_walk(&[9, 0]));
1✔
2093
        assert!(!digraph.is_walk(&[10]));
1✔
2094
        assert!(!digraph.is_walk(&[11]));
1✔
2095
        assert!(!digraph.is_walk(&[12, 0]));
1✔
2096
        assert!(!digraph.is_walk(&[13, 0]));
1✔
2097
    }
1✔
2098

2099
    #[test]
2100
    #[allow(clippy::cognitive_complexity)]
2101
    fn is_walk_kattis_escapewallmaria_3() {
1✔
2102
        let digraph = kattis_escapewallmaria_3();
1✔
2103

1✔
2104
        assert!(digraph.is_walk(&[1, 2, 1]));
1✔
2105
        assert!(digraph.is_walk(&[1, 2, 6, 2]));
1✔
2106
        assert!(digraph.is_walk(&[1, 2, 6, 5, 1]));
1✔
2107
        assert!(digraph.is_walk(&[1, 2, 6, 5, 6]));
1✔
2108
        assert!(digraph.is_walk(&[1, 2, 6, 5, 9, 5]));
1✔
2109
        assert!(digraph.is_walk(&[1, 2, 6, 5, 9, 13]));
1✔
2110
        assert!(digraph.is_walk(&[1, 2, 6, 5, 9, 13, 9]));
1✔
2111
        assert!(digraph.is_walk(&[1, 2, 6, 5, 9, 13, 12, 13]));
1✔
2112
        assert!(digraph.is_walk(&[1, 5, 1]));
1✔
2113
        assert!(digraph.is_walk(&[1, 5, 6, 2, 1]));
1✔
2114
        assert!(digraph.is_walk(&[1, 5, 6, 2, 6]));
1✔
2115
        assert!(digraph.is_walk(&[1, 5, 9, 5]));
1✔
2116
        assert!(digraph.is_walk(&[1, 5, 9, 13, 9]));
1✔
2117
        assert!(digraph.is_walk(&[1, 5, 9, 13, 12, 13]));
1✔
2118
        assert!(digraph.is_walk(&[2, 1, 2]));
1✔
2119
        assert!(digraph.is_walk(&[2, 1, 5, 1]));
1✔
2120
        assert!(digraph.is_walk(&[2, 1, 5, 6, 2]));
1✔
2121
        assert!(digraph.is_walk(&[2, 1, 5, 6, 5]));
1✔
2122
        assert!(digraph.is_walk(&[2, 1, 5, 9, 5]));
1✔
2123
        assert!(digraph.is_walk(&[2, 1, 5, 9, 13, 9]));
1✔
2124
        assert!(digraph.is_walk(&[2, 1, 5, 9, 13, 12, 13]));
1✔
2125
        assert!(digraph.is_walk(&[2, 6, 2]));
1✔
2126
        assert!(digraph.is_walk(&[2, 6, 5, 1, 2]));
1✔
2127
        assert!(digraph.is_walk(&[2, 6, 5, 1, 5]));
1✔
2128
        assert!(digraph.is_walk(&[2, 6, 5, 6]));
1✔
2129
        assert!(digraph.is_walk(&[2, 6, 5, 9, 5]));
1✔
2130
        assert!(digraph.is_walk(&[2, 6, 5, 9, 13, 9]));
1✔
2131
        assert!(digraph.is_walk(&[2, 6, 5, 9, 13, 12, 13]));
1✔
2132
        assert!(digraph.is_walk(&[5, 1, 2, 1]));
1✔
2133
        assert!(digraph.is_walk(&[5, 1, 2, 6, 2]));
1✔
2134
        assert!(digraph.is_walk(&[5, 1, 2, 6, 5]));
1✔
2135
        assert!(digraph.is_walk(&[5, 1, 5]));
1✔
2136
        assert!(digraph.is_walk(&[5, 6, 2, 1, 2]));
1✔
2137
        assert!(digraph.is_walk(&[5, 6, 2, 1, 5]));
1✔
2138
        assert!(digraph.is_walk(&[5, 6, 2, 6]));
1✔
2139
        assert!(digraph.is_walk(&[5, 6, 5]));
1✔
2140
        assert!(digraph.is_walk(&[5, 9, 5]));
1✔
2141
        assert!(digraph.is_walk(&[5, 9, 13, 9]));
1✔
2142
        assert!(digraph.is_walk(&[5, 9, 13, 12, 13]));
1✔
2143
        assert!(digraph.is_walk(&[6, 2, 1, 2]));
1✔
2144
        assert!(digraph.is_walk(&[6, 2, 1, 5, 1]));
1✔
2145
        assert!(digraph.is_walk(&[6, 2, 1, 5, 6]));
1✔
2146
        assert!(digraph.is_walk(&[6, 2, 1, 5, 9, 5]));
1✔
2147
        assert!(digraph.is_walk(&[6, 2, 1, 5, 9, 13, 9]));
1✔
2148
        assert!(digraph.is_walk(&[6, 2, 1, 5, 9, 13, 12, 13]));
1✔
2149
        assert!(digraph.is_walk(&[6, 2, 6]));
1✔
2150
        assert!(digraph.is_walk(&[6, 5, 1, 2, 1]));
1✔
2151
        assert!(digraph.is_walk(&[6, 5, 1, 5]));
1✔
2152
        assert!(digraph.is_walk(&[6, 5, 6]));
1✔
2153
        assert!(digraph.is_walk(&[6, 5, 9, 5]));
1✔
2154
        assert!(digraph.is_walk(&[6, 5, 9, 13, 9]));
1✔
2155
        assert!(digraph.is_walk(&[6, 5, 9, 13, 12, 13]));
1✔
2156
        assert!(digraph.is_walk(&[9, 5, 1, 2, 1]));
1✔
2157
        assert!(digraph.is_walk(&[9, 5, 1, 2, 6, 2]));
1✔
2158
        assert!(digraph.is_walk(&[9, 5, 1, 2, 6, 5]));
1✔
2159
        assert!(digraph.is_walk(&[9, 5, 1, 5]));
1✔
2160
        assert!(digraph.is_walk(&[9, 5, 6, 2, 1, 2]));
1✔
2161
        assert!(digraph.is_walk(&[9, 5, 6, 2, 1, 5]));
1✔
2162
        assert!(digraph.is_walk(&[9, 5, 6, 2, 6]));
1✔
2163
        assert!(digraph.is_walk(&[9, 5, 6, 5]));
1✔
2164
        assert!(digraph.is_walk(&[9, 5, 9]));
1✔
2165
        assert!(digraph.is_walk(&[9, 13, 9]));
1✔
2166
        assert!(digraph.is_walk(&[9, 13, 12, 13]));
1✔
2167
        assert!(digraph.is_walk(&[12, 13, 9, 5, 1, 2, 1]));
1✔
2168
        assert!(digraph.is_walk(&[12, 13, 9, 5, 1, 5]));
1✔
2169
        assert!(digraph.is_walk(&[12, 13, 9, 5, 6, 2, 1, 2]));
1✔
2170
        assert!(digraph.is_walk(&[12, 13, 9, 5, 6, 2, 1, 5]));
1✔
2171
        assert!(digraph.is_walk(&[12, 13, 9, 5, 6, 2, 6]));
1✔
2172
        assert!(digraph.is_walk(&[12, 13, 9, 5, 6, 5]));
1✔
2173
        assert!(digraph.is_walk(&[12, 13, 9, 5, 9]));
1✔
2174
        assert!(digraph.is_walk(&[12, 13, 9, 13]));
1✔
2175
        assert!(digraph.is_walk(&[12, 13, 12]));
1✔
2176

2177
        assert!(!digraph.is_walk(&[0]));
1✔
2178
        assert!(!digraph.is_walk(&[1, 0]));
1✔
2179
        assert!(!digraph.is_walk(&[2, 0]));
1✔
2180
        assert!(!digraph.is_walk(&[3]));
1✔
2181
        assert!(!digraph.is_walk(&[4]));
1✔
2182
        assert!(!digraph.is_walk(&[5, 0]));
1✔
2183
        assert!(!digraph.is_walk(&[6, 0]));
1✔
2184
        assert!(!digraph.is_walk(&[7]));
1✔
2185
        assert!(!digraph.is_walk(&[8]));
1✔
2186
        assert!(!digraph.is_walk(&[9, 0]));
1✔
2187
        assert!(!digraph.is_walk(&[10]));
1✔
2188
        assert!(!digraph.is_walk(&[11]));
1✔
2189
        assert!(!digraph.is_walk(&[12, 0]));
1✔
2190
        assert!(!digraph.is_walk(&[13, 0]));
1✔
2191
    }
1✔
2192

2193
    #[test]
2194
    fn order_bang_jensen_34() {
1✔
2195
        assert_eq!(bang_jensen_34().order(), 6);
1✔
2196
    }
1✔
2197

2198
    #[test]
2199
    fn order_bang_jensen_94() {
1✔
2200
        assert_eq!(bang_jensen_94().order(), 7);
1✔
2201
    }
1✔
2202

2203
    #[test]
2204
    fn order_kattis_builddeps() {
1✔
2205
        assert_eq!(kattis_builddeps().order(), 6);
1✔
2206
    }
1✔
2207

2208
    #[test]
2209
    fn order_kattis_escapewallmaria_1() {
1✔
2210
        assert_eq!(kattis_escapewallmaria_1().order(), 14);
1✔
2211
    }
1✔
2212

2213
    #[test]
2214
    fn order_kattis_escapewallmaria_2() {
1✔
2215
        assert_eq!(kattis_escapewallmaria_2().order(), 14);
1✔
2216
    }
1✔
2217

2218
    #[test]
2219
    fn order_kattis_escapewallmaria_3() {
1✔
2220
        assert_eq!(kattis_escapewallmaria_3().order(), 14);
1✔
2221
    }
1✔
2222

2223
    #[test]
2224
    fn out_neighbors_bang_jensen_34() {
1✔
2225
        let digraph = bang_jensen_34();
1✔
2226

1✔
2227
        assert!(digraph.out_neighbors(0).eq([4]));
1✔
2228
        assert!(digraph.out_neighbors(1).eq([0]));
1✔
2229
        assert!(digraph.out_neighbors(2).eq([1, 3, 5]));
1✔
2230
        assert!(digraph.out_neighbors(3).eq([]));
1✔
2231
        assert!(digraph.out_neighbors(4).eq([]));
1✔
2232
        assert!(digraph.out_neighbors(5).eq([4]));
1✔
2233
    }
1✔
2234

2235
    #[test]
2236
    fn out_neighbors_bang_jensen_94() {
1✔
2237
        let digraph = bang_jensen_94();
1✔
2238

1✔
2239
        assert!(digraph.out_neighbors(0).eq([1, 2]));
1✔
2240
        assert!(digraph.out_neighbors(1).eq([3]));
1✔
2241
        assert!(digraph.out_neighbors(2).eq([1, 3, 4, 5]));
1✔
2242
        assert!(digraph.out_neighbors(3).eq([5]));
1✔
2243
        assert!(digraph.out_neighbors(4).eq([6]));
1✔
2244
        assert!(digraph.out_neighbors(5).eq([]));
1✔
2245
        assert!(digraph.out_neighbors(6).eq([]));
1✔
2246
    }
1✔
2247

2248
    #[test]
2249
    fn out_neighbors_kattis_builddeps() {
1✔
2250
        let digraph = kattis_builddeps();
1✔
2251

1✔
2252
        assert!(digraph.out_neighbors(0).eq([3, 4]));
1✔
2253
        assert!(digraph.out_neighbors(1).eq([]));
1✔
2254
        assert!(digraph.out_neighbors(2).eq([3, 4, 5]));
1✔
2255
        assert!(digraph.out_neighbors(3).eq([1]));
1✔
2256
        assert!(digraph.out_neighbors(4).eq([1]));
1✔
2257
        assert!(digraph.out_neighbors(5).eq([1]));
1✔
2258
    }
1✔
2259

2260
    #[test]
2261
    fn out_neighbors_kattis_escapewallmaria_1() {
1✔
2262
        let digraph = kattis_escapewallmaria_1();
1✔
2263

1✔
2264
        assert!(digraph.out_neighbors(0).eq([]));
1✔
2265
        assert!(digraph.out_neighbors(1).eq([]));
1✔
2266
        assert!(digraph.out_neighbors(2).eq([]));
1✔
2267
        assert!(digraph.out_neighbors(3).eq([]));
1✔
2268
        assert!(digraph.out_neighbors(4).eq([]));
1✔
2269
        assert!(digraph.out_neighbors(5).eq([6, 9]));
1✔
2270
        assert!(digraph.out_neighbors(6).eq([5]));
1✔
2271
        assert!(digraph.out_neighbors(7).eq([]));
1✔
2272
        assert!(digraph.out_neighbors(8).eq([]));
1✔
2273
        assert!(digraph.out_neighbors(9).eq([5, 13]));
1✔
2274
        assert!(digraph.out_neighbors(10).eq([]));
1✔
2275
        assert!(digraph.out_neighbors(11).eq([]));
1✔
2276
        assert!(digraph.out_neighbors(12).eq([]));
1✔
2277
        assert!(digraph.out_neighbors(13).eq([9, 12]));
1✔
2278
    }
1✔
2279

2280
    #[test]
2281
    fn out_neighbors_kattis_escapewallmaria_2() {
1✔
2282
        let digraph = kattis_escapewallmaria_2();
1✔
2283

1✔
2284
        assert!(digraph.out_neighbors(0).eq([]));
1✔
2285
        assert!(digraph.out_neighbors(1).eq([]));
1✔
2286
        assert!(digraph.out_neighbors(2).eq([]));
1✔
2287
        assert!(digraph.out_neighbors(3).eq([]));
1✔
2288
        assert!(digraph.out_neighbors(4).eq([]));
1✔
2289
        assert!(digraph.out_neighbors(5).eq([6, 9]));
1✔
2290
        assert!(digraph.out_neighbors(6).eq([5]));
1✔
2291
        assert!(digraph.out_neighbors(7).eq([]));
1✔
2292
        assert!(digraph.out_neighbors(8).eq([]));
1✔
2293
        assert!(digraph.out_neighbors(9).eq([5]));
1✔
2294
        assert!(digraph.out_neighbors(10).eq([]));
1✔
2295
        assert!(digraph.out_neighbors(11).eq([]));
1✔
2296
        assert!(digraph.out_neighbors(12).eq([13]));
1✔
2297
        assert!(digraph.out_neighbors(13).eq([9, 12]));
1✔
2298
    }
1✔
2299

2300
    #[test]
2301
    fn out_neighbors_kattis_escapewallmaria_3() {
1✔
2302
        let digraph = kattis_escapewallmaria_3();
1✔
2303

1✔
2304
        assert!(digraph.out_neighbors(0).eq([]));
1✔
2305
        assert!(digraph.out_neighbors(1).eq([2, 5]));
1✔
2306
        assert!(digraph.out_neighbors(2).eq([1, 6]));
1✔
2307
        assert!(digraph.out_neighbors(3).eq([]));
1✔
2308
        assert!(digraph.out_neighbors(4).eq([]));
1✔
2309
        assert!(digraph.out_neighbors(5).eq([1, 6, 9]));
1✔
2310
        assert!(digraph.out_neighbors(6).eq([2, 5]));
1✔
2311
        assert!(digraph.out_neighbors(7).eq([]));
1✔
2312
        assert!(digraph.out_neighbors(8).eq([]));
1✔
2313
        assert!(digraph.out_neighbors(9).eq([5, 13]));
1✔
2314
        assert!(digraph.out_neighbors(10).eq([]));
1✔
2315
        assert!(digraph.out_neighbors(11).eq([]));
1✔
2316
        assert!(digraph.out_neighbors(12).eq([13]));
1✔
2317
        assert!(digraph.out_neighbors(13).eq([9, 12]));
1✔
2318
    }
1✔
2319

2320
    #[test]
2321
    fn out_neighbors_weighted_bang_jensen_34() {
1✔
2322
        let digraph = bang_jensen_34();
1✔
2323

1✔
2324
        assert!(digraph.out_neighbors_weighted(0).eq([(4, &1)]));
1✔
2325
        assert!(digraph.out_neighbors_weighted(1).eq([(0, &1)]));
1✔
2326

2327
        assert!(digraph
1✔
2328
            .out_neighbors_weighted(2)
1✔
2329
            .eq([(1, &1), (3, &1), (5, &1)]));
1✔
2330

2331
        assert!(digraph.out_neighbors_weighted(3).eq([]));
1✔
2332
        assert!(digraph.out_neighbors_weighted(4).eq([]));
1✔
2333
        assert!(digraph.out_neighbors_weighted(5).eq([(4, &1)]));
1✔
2334
    }
1✔
2335

2336
    #[test]
2337
    fn out_neighbors_weighted_bang_jensen_94() {
1✔
2338
        let digraph = bang_jensen_94();
1✔
2339

1✔
2340
        assert!(digraph.out_neighbors_weighted(0).eq([(1, &1), (2, &1)]));
1✔
2341
        assert!(digraph.out_neighbors_weighted(1).eq([(3, &1)]));
1✔
2342

2343
        assert!(digraph
1✔
2344
            .out_neighbors_weighted(2)
1✔
2345
            .eq([(1, &1), (3, &1), (4, &1), (5, &1)]));
1✔
2346

2347
        assert!(digraph.out_neighbors_weighted(3).eq([(5, &1)]));
1✔
2348
        assert!(digraph.out_neighbors_weighted(4).eq([(6, &1)]));
1✔
2349
        assert!(digraph.out_neighbors_weighted(5).eq([]));
1✔
2350
        assert!(digraph.out_neighbors_weighted(6).eq([]));
1✔
2351
    }
1✔
2352

2353
    #[test]
2354
    fn out_neighbors_weighted_kattis_builddeps() {
1✔
2355
        let digraph = kattis_builddeps();
1✔
2356

1✔
2357
        assert!(digraph.out_neighbors_weighted(0).eq([(3, &1), (4, &1)]));
1✔
2358
        assert!(digraph.out_neighbors_weighted(1).eq([]));
1✔
2359

2360
        assert!(digraph
1✔
2361
            .out_neighbors_weighted(2)
1✔
2362
            .eq([(3, &1), (4, &1), (5, &1)]));
1✔
2363

2364
        assert!(digraph.out_neighbors_weighted(3).eq([(1, &1)]));
1✔
2365
        assert!(digraph.out_neighbors_weighted(4).eq([(1, &1)]));
1✔
2366
        assert!(digraph.out_neighbors_weighted(5).eq([(1, &1)]));
1✔
2367
    }
1✔
2368

2369
    #[test]
2370
    fn out_neighbors_weighted_kattis_escapewallmaria_1() {
1✔
2371
        let digraph = kattis_escapewallmaria_1();
1✔
2372

1✔
2373
        assert!(digraph.out_neighbors_weighted(0).eq([]));
1✔
2374
        assert!(digraph.out_neighbors_weighted(1).eq([]));
1✔
2375
        assert!(digraph.out_neighbors_weighted(2).eq([]));
1✔
2376
        assert!(digraph.out_neighbors_weighted(3).eq([]));
1✔
2377
        assert!(digraph.out_neighbors_weighted(4).eq([]));
1✔
2378

2379
        assert!(digraph.out_neighbors_weighted(5).eq([(6, &1), (9, &1)]));
1✔
2380
        assert!(digraph.out_neighbors_weighted(6).eq([(5, &1)]));
1✔
2381
        assert!(digraph.out_neighbors_weighted(7).eq([]));
1✔
2382
        assert!(digraph.out_neighbors_weighted(8).eq([]));
1✔
2383
        assert!(digraph.out_neighbors_weighted(9).eq([(5, &1), (13, &1)]));
1✔
2384
        assert!(digraph.out_neighbors_weighted(10).eq([]));
1✔
2385
        assert!(digraph.out_neighbors_weighted(11).eq([]));
1✔
2386
        assert!(digraph.out_neighbors_weighted(12).eq([]));
1✔
2387
        assert!(digraph.out_neighbors_weighted(13).eq([(9, &1), (12, &1)]));
1✔
2388
    }
1✔
2389

2390
    #[test]
2391
    fn out_neighbors_weighted_kattis_escapewallmaria_2() {
1✔
2392
        let digraph = kattis_escapewallmaria_2();
1✔
2393

1✔
2394
        assert!(digraph.out_neighbors_weighted(0).eq([]));
1✔
2395
        assert!(digraph.out_neighbors_weighted(1).eq([]));
1✔
2396
        assert!(digraph.out_neighbors_weighted(2).eq([]));
1✔
2397
        assert!(digraph.out_neighbors_weighted(3).eq([]));
1✔
2398
        assert!(digraph.out_neighbors_weighted(4).eq([]));
1✔
2399
        assert!(digraph.out_neighbors_weighted(5).eq([(6, &1), (9, &1)]));
1✔
2400
        assert!(digraph.out_neighbors_weighted(6).eq([(5, &1)]));
1✔
2401
        assert!(digraph.out_neighbors_weighted(7).eq([]));
1✔
2402
        assert!(digraph.out_neighbors_weighted(8).eq([]));
1✔
2403
        assert!(digraph.out_neighbors_weighted(9).eq([(5, &1)]));
1✔
2404
        assert!(digraph.out_neighbors_weighted(10).eq([]));
1✔
2405
        assert!(digraph.out_neighbors_weighted(11).eq([]));
1✔
2406
        assert!(digraph.out_neighbors_weighted(12).eq([(13, &1)]));
1✔
2407
        assert!(digraph.out_neighbors_weighted(13).eq([(9, &1), (12, &1)]));
1✔
2408
    }
1✔
2409

2410
    #[test]
2411
    fn out_neighbors_weighted_kattis_escapewallmaria_3() {
1✔
2412
        let digraph = kattis_escapewallmaria_3();
1✔
2413

1✔
2414
        assert!(digraph.out_neighbors_weighted(0).eq([]));
1✔
2415
        assert!(digraph.out_neighbors_weighted(1).eq([(2, &1), (5, &1)]));
1✔
2416
        assert!(digraph.out_neighbors_weighted(2).eq([(1, &1), (6, &1)]));
1✔
2417
        assert!(digraph.out_neighbors_weighted(3).eq([]));
1✔
2418
        assert!(digraph.out_neighbors_weighted(4).eq([]));
1✔
2419

2420
        assert!(digraph
1✔
2421
            .out_neighbors_weighted(5)
1✔
2422
            .eq([(1, &1), (6, &1), (9, &1)]));
1✔
2423

2424
        assert!(digraph.out_neighbors_weighted(6).eq([(2, &1), (5, &1)]));
1✔
2425
        assert!(digraph.out_neighbors_weighted(7).eq([]));
1✔
2426
        assert!(digraph.out_neighbors_weighted(8).eq([]));
1✔
2427
        assert!(digraph.out_neighbors_weighted(9).eq([(5, &1), (13, &1)]));
1✔
2428
        assert!(digraph.out_neighbors_weighted(10).eq([]));
1✔
2429
        assert!(digraph.out_neighbors_weighted(11).eq([]));
1✔
2430
        assert!(digraph.out_neighbors_weighted(12).eq([(13, &1)]));
1✔
2431
        assert!(digraph.out_neighbors_weighted(13).eq([(9, &1), (12, &1)]));
1✔
2432
    }
1✔
2433

2434
    #[test]
2435
    fn outdegree_bang_jensen_34() {
1✔
2436
        let digraph = bang_jensen_34();
1✔
2437

1✔
2438
        assert_eq!(digraph.outdegree(0), 1);
1✔
2439
        assert_eq!(digraph.outdegree(1), 1);
1✔
2440
        assert_eq!(digraph.outdegree(2), 3);
1✔
2441
        assert_eq!(digraph.outdegree(3), 0);
1✔
2442
        assert_eq!(digraph.outdegree(4), 0);
1✔
2443
        assert_eq!(digraph.outdegree(5), 1);
1✔
2444
    }
1✔
2445

2446
    #[test]
2447
    fn outdegree_bang_jensen_94() {
1✔
2448
        let digraph = bang_jensen_94();
1✔
2449

1✔
2450
        assert_eq!(digraph.outdegree(0), 2);
1✔
2451
        assert_eq!(digraph.outdegree(1), 1);
1✔
2452
        assert_eq!(digraph.outdegree(2), 4);
1✔
2453
        assert_eq!(digraph.outdegree(3), 1);
1✔
2454
        assert_eq!(digraph.outdegree(4), 1);
1✔
2455
        assert_eq!(digraph.outdegree(5), 0);
1✔
2456
        assert_eq!(digraph.outdegree(6), 0);
1✔
2457
    }
1✔
2458

2459
    #[test]
2460
    fn outdegree_kattis_builddeps() {
1✔
2461
        let digraph = kattis_builddeps();
1✔
2462

1✔
2463
        assert_eq!(digraph.outdegree(0), 2);
1✔
2464
        assert_eq!(digraph.outdegree(1), 0);
1✔
2465
        assert_eq!(digraph.outdegree(2), 3);
1✔
2466
        assert_eq!(digraph.outdegree(3), 1);
1✔
2467
        assert_eq!(digraph.outdegree(4), 1);
1✔
2468
        assert_eq!(digraph.outdegree(5), 1);
1✔
2469
    }
1✔
2470

2471
    #[test]
2472
    fn outdegree_kattis_escapewallmaria_1() {
1✔
2473
        let digraph = kattis_escapewallmaria_1();
1✔
2474

1✔
2475
        assert_eq!(digraph.outdegree(0), 0);
1✔
2476
        assert_eq!(digraph.outdegree(1), 0);
1✔
2477
        assert_eq!(digraph.outdegree(2), 0);
1✔
2478
        assert_eq!(digraph.outdegree(3), 0);
1✔
2479
        assert_eq!(digraph.outdegree(4), 0);
1✔
2480
        assert_eq!(digraph.outdegree(5), 2);
1✔
2481
        assert_eq!(digraph.outdegree(6), 1);
1✔
2482
        assert_eq!(digraph.outdegree(7), 0);
1✔
2483
        assert_eq!(digraph.outdegree(8), 0);
1✔
2484
        assert_eq!(digraph.outdegree(9), 2);
1✔
2485
        assert_eq!(digraph.outdegree(10), 0);
1✔
2486
        assert_eq!(digraph.outdegree(11), 0);
1✔
2487
        assert_eq!(digraph.outdegree(12), 0);
1✔
2488
        assert_eq!(digraph.outdegree(13), 2);
1✔
2489
    }
1✔
2490

2491
    #[test]
2492
    fn outdegree_kattis_escapewallmaria_2() {
1✔
2493
        let digraph = kattis_escapewallmaria_2();
1✔
2494

1✔
2495
        assert_eq!(digraph.outdegree(0), 0);
1✔
2496
        assert_eq!(digraph.outdegree(1), 0);
1✔
2497
        assert_eq!(digraph.outdegree(2), 0);
1✔
2498
        assert_eq!(digraph.outdegree(3), 0);
1✔
2499
        assert_eq!(digraph.outdegree(4), 0);
1✔
2500
        assert_eq!(digraph.outdegree(5), 2);
1✔
2501
        assert_eq!(digraph.outdegree(6), 1);
1✔
2502
        assert_eq!(digraph.outdegree(7), 0);
1✔
2503
        assert_eq!(digraph.outdegree(8), 0);
1✔
2504
        assert_eq!(digraph.outdegree(9), 1);
1✔
2505
        assert_eq!(digraph.outdegree(10), 0);
1✔
2506
        assert_eq!(digraph.outdegree(11), 0);
1✔
2507
        assert_eq!(digraph.outdegree(12), 1);
1✔
2508
        assert_eq!(digraph.outdegree(13), 2);
1✔
2509
    }
1✔
2510

2511
    #[test]
2512
    fn outdegree_kattis_escapewallmaria_3() {
1✔
2513
        let digraph = kattis_escapewallmaria_3();
1✔
2514

1✔
2515
        assert_eq!(digraph.outdegree(0), 0);
1✔
2516
        assert_eq!(digraph.outdegree(1), 2);
1✔
2517
        assert_eq!(digraph.outdegree(2), 2);
1✔
2518
        assert_eq!(digraph.outdegree(3), 0);
1✔
2519
        assert_eq!(digraph.outdegree(4), 0);
1✔
2520
        assert_eq!(digraph.outdegree(5), 3);
1✔
2521
        assert_eq!(digraph.outdegree(6), 2);
1✔
2522
        assert_eq!(digraph.outdegree(7), 0);
1✔
2523
        assert_eq!(digraph.outdegree(8), 0);
1✔
2524
        assert_eq!(digraph.outdegree(9), 2);
1✔
2525
        assert_eq!(digraph.outdegree(10), 0);
1✔
2526
        assert_eq!(digraph.outdegree(11), 0);
1✔
2527
        assert_eq!(digraph.outdegree(12), 1);
1✔
2528
        assert_eq!(digraph.outdegree(13), 2);
1✔
2529
    }
1✔
2530

2531
    #[test]
2532
    fn random_tournament_is_complete_trivial() {
1✔
2533
        assert!(Digraph::random_tournament(1).is_complete());
1✔
2534
    }
1✔
2535

2536
    #[test]
2537
    fn random_tournament_is_isolated_trivial() {
1✔
2538
        assert!(Digraph::random_tournament(1).is_isolated(0));
1✔
2539
    }
1✔
2540

2541
    #[test]
2542
    fn random_tournament_is_pendant_trivial() {
1✔
2543
        assert!(!Digraph::random_tournament(1).is_pendant(0));
1✔
2544
    }
1✔
2545

2546
    #[test]
2547
    fn random_tournament_is_pendant_pair() {
1✔
2548
        let digraph = Digraph::random_tournament(2);
1✔
2549

2550
        for s in digraph.vertices() {
2✔
2551
            assert!(digraph.is_pendant(s));
2✔
2552
        }
2553
    }
1✔
2554

2555
    #[test]
2556
    fn random_tournament_is_simple_trivial() {
1✔
2557
        assert!(Digraph::random_tournament(1).is_simple());
1✔
2558
    }
1✔
2559

2560
    #[test]
2561
    fn remove_arc_bang_jensen_34() {
1✔
2562
        let mut digraph = bang_jensen_34();
1✔
2563

1✔
2564
        assert!(digraph
1✔
2565
            .arcs()
1✔
2566
            .eq([(0, 4), (1, 0), (2, 1), (2, 3), (2, 5), (5, 4)]));
1✔
2567

2568
        assert!(!digraph.remove_arc(0, 1));
1✔
2569

2570
        assert!(digraph.remove_arc(0, 4));
1✔
2571
        assert!(digraph.remove_arc(1, 0));
1✔
2572
        assert!(digraph.remove_arc(2, 1));
1✔
2573
        assert!(digraph.remove_arc(2, 3));
1✔
2574
        assert!(digraph.remove_arc(2, 5));
1✔
2575
        assert!(digraph.remove_arc(5, 4));
1✔
2576

2577
        assert!(digraph.arcs().eq([]));
1✔
2578

2579
        assert!(!digraph.remove_arc(0, 4));
1✔
2580
        assert!(!digraph.remove_arc(1, 0));
1✔
2581
        assert!(!digraph.remove_arc(2, 1));
1✔
2582
        assert!(!digraph.remove_arc(2, 3));
1✔
2583
        assert!(!digraph.remove_arc(2, 5));
1✔
2584
        assert!(!digraph.remove_arc(5, 4));
1✔
2585
    }
1✔
2586

2587
    #[test]
2588
    fn remove_arc_bang_jensen_94() {
1✔
2589
        let mut digraph = bang_jensen_94();
1✔
2590

1✔
2591
        assert!(digraph.arcs().eq([
1✔
2592
            (0, 1),
1✔
2593
            (0, 2),
1✔
2594
            (1, 3),
1✔
2595
            (2, 1),
1✔
2596
            (2, 3),
1✔
2597
            (2, 4),
1✔
2598
            (2, 5),
1✔
2599
            (3, 5),
1✔
2600
            (4, 6)
1✔
2601
        ]));
1✔
2602

2603
        assert!(!digraph.remove_arc(0, 3));
1✔
2604

2605
        assert!(digraph.remove_arc(0, 1));
1✔
2606
        assert!(digraph.remove_arc(0, 2));
1✔
2607
        assert!(digraph.remove_arc(1, 3));
1✔
2608
        assert!(digraph.remove_arc(2, 1));
1✔
2609
        assert!(digraph.remove_arc(2, 3));
1✔
2610
        assert!(digraph.remove_arc(2, 4));
1✔
2611
        assert!(digraph.remove_arc(2, 5));
1✔
2612
        assert!(digraph.remove_arc(3, 5));
1✔
2613
        assert!(digraph.remove_arc(4, 6));
1✔
2614

2615
        assert!(digraph.arcs().eq([]));
1✔
2616

2617
        assert!(!digraph.remove_arc(0, 1));
1✔
2618
        assert!(!digraph.remove_arc(0, 2));
1✔
2619
        assert!(!digraph.remove_arc(1, 3));
1✔
2620
        assert!(!digraph.remove_arc(2, 1));
1✔
2621
        assert!(!digraph.remove_arc(2, 3));
1✔
2622
        assert!(!digraph.remove_arc(2, 4));
1✔
2623
        assert!(!digraph.remove_arc(2, 5));
1✔
2624
        assert!(!digraph.remove_arc(3, 5));
1✔
2625
        assert!(!digraph.remove_arc(4, 6));
1✔
2626
    }
1✔
2627

2628
    #[test]
2629
    fn remove_arc_kattis_builddeps() {
1✔
2630
        let mut digraph = kattis_builddeps();
1✔
2631

1✔
2632
        assert!(digraph.arcs().eq([
1✔
2633
            (0, 3),
1✔
2634
            (0, 4),
1✔
2635
            (2, 3),
1✔
2636
            (2, 4),
1✔
2637
            (2, 5),
1✔
2638
            (3, 1),
1✔
2639
            (4, 1),
1✔
2640
            (5, 1)
1✔
2641
        ]));
1✔
2642

2643
        assert!(!digraph.remove_arc(0, 1));
1✔
2644

2645
        assert!(digraph.remove_arc(0, 3));
1✔
2646
        assert!(digraph.remove_arc(0, 4));
1✔
2647
        assert!(digraph.remove_arc(2, 3));
1✔
2648
        assert!(digraph.remove_arc(2, 4));
1✔
2649
        assert!(digraph.remove_arc(2, 5));
1✔
2650
        assert!(digraph.remove_arc(3, 1));
1✔
2651
        assert!(digraph.remove_arc(4, 1));
1✔
2652
        assert!(digraph.remove_arc(5, 1));
1✔
2653

2654
        assert!(digraph.arcs().eq([]));
1✔
2655

2656
        assert!(!digraph.remove_arc(0, 3));
1✔
2657
        assert!(!digraph.remove_arc(0, 4));
1✔
2658
        assert!(!digraph.remove_arc(2, 3));
1✔
2659
        assert!(!digraph.remove_arc(2, 4));
1✔
2660
        assert!(!digraph.remove_arc(2, 5));
1✔
2661
        assert!(!digraph.remove_arc(3, 1));
1✔
2662
        assert!(!digraph.remove_arc(4, 1));
1✔
2663
        assert!(!digraph.remove_arc(5, 1));
1✔
2664
    }
1✔
2665

2666
    #[test]
2667
    fn remove_arc_kattis_escapewallmaria_1() {
1✔
2668
        let mut digraph = kattis_escapewallmaria_1();
1✔
2669

1✔
2670
        assert!(digraph
1✔
2671
            .arcs()
1✔
2672
            .eq([(5, 6), (5, 9), (6, 5), (9, 5), (9, 13), (13, 9), (13, 12)]));
1✔
2673

2674
        assert!(!digraph.remove_arc(0, 1));
1✔
2675

2676
        assert!(digraph.remove_arc(5, 6));
1✔
2677
        assert!(digraph.remove_arc(5, 9));
1✔
2678
        assert!(digraph.remove_arc(6, 5));
1✔
2679
        assert!(digraph.remove_arc(9, 5));
1✔
2680
        assert!(digraph.remove_arc(9, 13));
1✔
2681
        assert!(digraph.remove_arc(13, 9));
1✔
2682
        assert!(digraph.remove_arc(13, 12));
1✔
2683

2684
        assert!(digraph.arcs().eq([]));
1✔
2685

2686
        assert!(!digraph.remove_arc(5, 6));
1✔
2687
        assert!(!digraph.remove_arc(5, 9));
1✔
2688
        assert!(!digraph.remove_arc(6, 5));
1✔
2689
        assert!(!digraph.remove_arc(9, 5));
1✔
2690
        assert!(!digraph.remove_arc(9, 13));
1✔
2691
        assert!(!digraph.remove_arc(13, 9));
1✔
2692
        assert!(!digraph.remove_arc(13, 12));
1✔
2693
    }
1✔
2694

2695
    #[test]
2696
    fn remove_arc_kattis_escapewallmaria_2() {
1✔
2697
        let mut digraph = kattis_escapewallmaria_2();
1✔
2698

1✔
2699
        assert!(digraph
1✔
2700
            .arcs()
1✔
2701
            .eq([(5, 6), (5, 9), (6, 5), (9, 5), (12, 13), (13, 9), (13, 12)]));
1✔
2702

2703
        assert!(!digraph.remove_arc(0, 1));
1✔
2704

2705
        assert!(digraph.remove_arc(5, 6));
1✔
2706
        assert!(digraph.remove_arc(5, 9));
1✔
2707
        assert!(digraph.remove_arc(6, 5));
1✔
2708
        assert!(digraph.remove_arc(9, 5));
1✔
2709
        assert!(digraph.remove_arc(12, 13));
1✔
2710
        assert!(digraph.remove_arc(13, 9));
1✔
2711
        assert!(digraph.remove_arc(13, 12));
1✔
2712

2713
        assert!(digraph.arcs().eq([]));
1✔
2714

2715
        assert!(!digraph.remove_arc(5, 6));
1✔
2716
        assert!(!digraph.remove_arc(5, 9));
1✔
2717
        assert!(!digraph.remove_arc(6, 5));
1✔
2718
        assert!(!digraph.remove_arc(9, 5));
1✔
2719
        assert!(!digraph.remove_arc(12, 13));
1✔
2720
        assert!(!digraph.remove_arc(13, 9));
1✔
2721
        assert!(!digraph.remove_arc(13, 12));
1✔
2722
    }
1✔
2723

2724
    #[test]
2725
    #[allow(clippy::cognitive_complexity)]
2726
    fn remove_arc_kattis_escapewallmaria_3() {
1✔
2727
        let mut digraph = kattis_escapewallmaria_3();
1✔
2728

1✔
2729
        assert!(digraph.arcs().eq([
1✔
2730
            (1, 2),
1✔
2731
            (1, 5),
1✔
2732
            (2, 1),
1✔
2733
            (2, 6),
1✔
2734
            (5, 1),
1✔
2735
            (5, 6),
1✔
2736
            (5, 9),
1✔
2737
            (6, 2),
1✔
2738
            (6, 5),
1✔
2739
            (9, 5),
1✔
2740
            (9, 13),
1✔
2741
            (12, 13),
1✔
2742
            (13, 9),
1✔
2743
            (13, 12)
1✔
2744
        ]));
1✔
2745

2746
        assert!(!digraph.remove_arc(0, 1));
1✔
2747

2748
        assert!(digraph.remove_arc(1, 2));
1✔
2749
        assert!(digraph.remove_arc(1, 5));
1✔
2750
        assert!(digraph.remove_arc(2, 1));
1✔
2751
        assert!(digraph.remove_arc(2, 6));
1✔
2752
        assert!(digraph.remove_arc(5, 1));
1✔
2753
        assert!(digraph.remove_arc(5, 6));
1✔
2754
        assert!(digraph.remove_arc(5, 9));
1✔
2755
        assert!(digraph.remove_arc(6, 2));
1✔
2756
        assert!(digraph.remove_arc(6, 5));
1✔
2757
        assert!(digraph.remove_arc(9, 5));
1✔
2758
        assert!(digraph.remove_arc(9, 13));
1✔
2759
        assert!(digraph.remove_arc(12, 13));
1✔
2760
        assert!(digraph.remove_arc(13, 9));
1✔
2761
        assert!(digraph.remove_arc(13, 12));
1✔
2762

2763
        assert!(digraph.arcs().eq([]));
1✔
2764

2765
        assert!(!digraph.remove_arc(1, 2));
1✔
2766
        assert!(!digraph.remove_arc(1, 5));
1✔
2767
        assert!(!digraph.remove_arc(2, 1));
1✔
2768
        assert!(!digraph.remove_arc(2, 6));
1✔
2769
        assert!(!digraph.remove_arc(5, 1));
1✔
2770
        assert!(!digraph.remove_arc(5, 6));
1✔
2771
        assert!(!digraph.remove_arc(5, 9));
1✔
2772
        assert!(!digraph.remove_arc(6, 2));
1✔
2773
        assert!(!digraph.remove_arc(6, 5));
1✔
2774
        assert!(!digraph.remove_arc(9, 5));
1✔
2775
        assert!(!digraph.remove_arc(9, 13));
1✔
2776
        assert!(!digraph.remove_arc(12, 13));
1✔
2777
        assert!(!digraph.remove_arc(13, 9));
1✔
2778
        assert!(!digraph.remove_arc(13, 12));
1✔
2779
    }
1✔
2780

2781
    #[test]
2782
    fn size_bang_jensen_34() {
1✔
2783
        assert_eq!(bang_jensen_34().size(), 6);
1✔
2784
    }
1✔
2785

2786
    #[test]
2787
    fn size_bang_jensen_94() {
1✔
2788
        assert_eq!(bang_jensen_94().size(), 9);
1✔
2789
    }
1✔
2790

2791
    #[test]
2792
    fn size_kattis_builddeps() {
1✔
2793
        assert_eq!(kattis_builddeps().size(), 8);
1✔
2794
    }
1✔
2795

2796
    #[test]
2797
    fn size_kattis_escapewallmaria_1() {
1✔
2798
        assert_eq!(kattis_escapewallmaria_1().size(), 7);
1✔
2799
    }
1✔
2800

2801
    #[test]
2802
    fn size_kattis_escapewallmaria_2() {
1✔
2803
        assert_eq!(kattis_escapewallmaria_2().size(), 7);
1✔
2804
    }
1✔
2805

2806
    #[test]
2807
    fn size_kattis_escapewallmaria_3() {
1✔
2808
        assert_eq!(kattis_escapewallmaria_3().size(), 14);
1✔
2809
    }
1✔
2810

2811
    #[test]
2812
    fn toggle() {
1✔
2813
        let mut digraph = Digraph::empty(3);
1✔
2814

1✔
2815
        digraph.toggle(0, 1);
1✔
2816
        digraph.toggle(0, 2);
1✔
2817

1✔
2818
        assert_eq!(digraph.blocks, [0b110]);
1✔
2819
    }
1✔
2820

2821
    #[test]
2822
    #[should_panic(expected = "s = 3 is out of bounds.")]
2823
    fn toggle_panic_s_gte_v() {
1✔
2824
        let mut digraph = Digraph::empty(3);
1✔
2825

1✔
2826
        digraph.toggle(3, 0);
1✔
2827
    }
1✔
2828

2829
    #[test]
2830
    #[should_panic(expected = "t = 3 is out of bounds.")]
2831
    fn toggle_panic_t_gte_v() {
1✔
2832
        let mut digraph = Digraph::empty(3);
1✔
2833

1✔
2834
        digraph.toggle(0, 3);
1✔
2835
    }
1✔
2836
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc