Prakticke aspekty vývoje softwaru: Projekt 1 – Testování  1.0
Projekt zaměřený na osvojení praktik testování včetně technik test driven development, black box testing a white box testing.
white_box_code.h
Zobrazit dokumentaci tohoto souboru.
1 //======= Copyright (c) 2026, FIT VUT Brno, All rights reserved. ============//
2 //
3 // Purpose: White Box - suffixový automat
4 //
5 // $NoKeywords: $ivs_project_1 $white_box_code.cpp
6 // $Authors: Martin Dočekal <idocekal@fit.vutbr.cz>
7 // Maksim Aparovich <iaparovich@fit.vut.cz>
8 // $Date: $2026-02-09
9 //============================================================================//
19 #ifndef SUFFIX_AUTOMATON_HPP
20 #define SUFFIX_AUTOMATON_HPP
21 
22 #include <string>
23 #include <unordered_map>
24 #include <vector>
25 #include <memory>
26 #include <cstddef>
27 #include <optional>
28 
32 struct State {
33  size_t len;
34  std::optional<size_t> link;
35  std::unordered_map<char, size_t> next;
36 
41  State() : len(0), link(std::nullopt) {}
42 };
43 
44 
49 private:
50  std::vector<State> states;
51  size_t last;
52 
53 public:
54 
60 
66  SuffixAutomaton(const std::string& seq) : SuffixAutomaton() {
67  add_sequence(seq);
68  }
69 
75  void add_element(char elem);
76 
82  void add_sequence(const std::string& seq);
83 
93  bool step(const size_t state_index, const char& elem, size_t& next_state) const;
94 
102  const std::unordered_map<char, size_t>& next(const size_t state_index) const;
103 
110  bool contains(const std::string& seq) const;
111 
118  std::vector<size_t> topological_sort() const;
119 
127  std::string longest_direct_continuation(const size_t state_index) const;
128 
134  size_t size() const;
135 
140  void clear();
141 
149  const State& get_state(size_t index) const ;
150 
151 };
152 
153 #endif // SUFFIX_AUTOMATON_HPP
154 
155 /*** Konec souboru white_box_code.h ***/
SuffixAutomaton
Třída sufixového automatu.
Definition: white_box_code.h:48
SuffixAutomaton::size
size_t size() const
Získání počtu stavů v automatu.
Definition: white_box_code.cpp:155
SuffixAutomaton::longest_direct_continuation
std::string longest_direct_continuation(const size_t state_index) const
Získání nejdelšího přímého pokračování z daného stavu Nejdelší přímé pokračování je definováno jako s...
Definition: white_box_code.cpp:140
State::next
std::unordered_map< char, size_t > next
Přechody pro každý prvek.
Definition: white_box_code.h:35
SuffixAutomaton::clear
void clear()
Vyčištění automatu.
Definition: white_box_code.cpp:159
SuffixAutomaton::add_element
void add_element(char elem)
Přidání prvku do automatu.
Definition: white_box_code.cpp:26
SuffixAutomaton::step
bool step(const size_t state_index, const char &elem, size_t &next_state) const
Krok z daného stavu pomocí prvku.
Definition: white_box_code.cpp:91
State::link
std::optional< size_t > link
Odkaz na nejdelší suffix, který je v jiné třídě ekvivalence endpos.
Definition: white_box_code.h:34
SuffixAutomaton::topological_sort
std::vector< size_t > topological_sort() const
Získání topologického uspořádání stavů Složitost: O(n), kde n je počet stavů v automatu.
Definition: white_box_code.cpp:118
State
Stav sufixového automatu.
Definition: white_box_code.h:32
State::len
size_t len
Délka nejdelšího suffixu reprezentovaného tímto stavem.
Definition: white_box_code.h:33
SuffixAutomaton::add_sequence
void add_sequence(const std::string &seq)
Přidání sekvence elementů do automatu.
Definition: white_box_code.cpp:85
State::State
State()
Konstruktor nového objektu State.
Definition: white_box_code.h:41
SuffixAutomaton::next
const std::unordered_map< char, size_t > & next(const size_t state_index) const
Získání elementů, ze kterých je možný přechod z daného stavu.
Definition: white_box_code.cpp:102
SuffixAutomaton::get_state
const State & get_state(size_t index) const
Získání stavu na daném indexu.
Definition: white_box_code.cpp:167
SuffixAutomaton::contains
bool contains(const std::string &seq) const
Kontrola, zda automat obsahuje danou sekvenci.
Definition: white_box_code.cpp:107
SuffixAutomaton::SuffixAutomaton
SuffixAutomaton()
Konstruktor nového prázdného objektu sufixového automatu.
Definition: white_box_code.cpp:20
SuffixAutomaton::SuffixAutomaton
SuffixAutomaton(const std::string &seq)
Konstruktor nového objektu sufixového automatu.
Definition: white_box_code.h:66