Skip to content

Add a ruby source code syntax test #1228

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from Oct 4, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions tests/syntax-tests/highlighted/Ruby/output.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
class RepeatedSubstring
 def find_repeated_substring(s)
 # catch the edge cases
 return 'NONE' if s == ''
 # check if the string consists of only one character => "aaaaaa" => "a"
 return s.split('').uniq[0] if s.split('').uniq.length == 1

 searched = []
 longest_prefix = 0
 long_prefix = ''
 (0..s.length - 1).each do |i|
 next if searched.include? s[i]

 searched.push(s[i])
 next_occurrences = next_index(s, i + 1, s[i])
 next_occurrences.each do |next_occurrence|
 next if next_occurrence == -1

 prefix = ge_prefix(s[i..next_occurrence - 1], s[next_occurrence..s.length])
 if prefix.length > longest_prefix
 longest_prefix = prefix.length
 long_prefix = prefix
 end
 end
 end
 # if prefix == " " it is a invalid sequence
 return 'NONE' if long_prefix.strip.empty?

 long_prefix
 end

 def get_prefix(s1, s2)
 prefix = ''
 min_length = [s1.length, s2.length].min
 return '' if s1.nil? || s2.nil?

 (0..min_length - 1).each do |i|
 return prefix if s1[i] != s2[i]

 prefix += s1[i]
 end
 prefix
 end

 def next_index(seq, index, value)
 indexes = []
 (index..seq.length).each do |i|
 indexes.push(i) if seq[i] == value
 end
 indexes
 end

 def find_repeated_substring_file(file_path)
 File.open(file_path).read.each_line.map { |line| find_repeated_substring(line) }
 end
end
56 changes: 56 additions & 0 deletions tests/syntax-tests/source/Ruby/output.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
class RepeatedSubstring
def find_repeated_substring(s)
# catch the edge cases
return 'NONE' if s == ''
# check if the string consists of only one character => "aaaaaa" => "a"
return s.split('').uniq[0] if s.split('').uniq.length == 1

searched = []
longest_prefix = 0
long_prefix = ''
(0..s.length - 1).each do |i|
next if searched.include? s[i]

searched.push(s[i])
next_occurrences = next_index(s, i + 1, s[i])
next_occurrences.each do |next_occurrence|
next if next_occurrence == -1

prefix = ge_prefix(s[i..next_occurrence - 1], s[next_occurrence..s.length])
if prefix.length > longest_prefix
longest_prefix = prefix.length
long_prefix = prefix
end
end
end
# if prefix == " " it is a invalid sequence
return 'NONE' if long_prefix.strip.empty?

long_prefix
end

def get_prefix(s1, s2)
prefix = ''
min_length = [s1.length, s2.length].min
return '' if s1.nil? || s2.nil?

(0..min_length - 1).each do |i|
return prefix if s1[i] != s2[i]

prefix += s1[i]
end
prefix
end

def next_index(seq, index, value)
indexes = []
(index..seq.length).each do |i|
indexes.push(i) if seq[i] == value
end
indexes
end

def find_repeated_substring_file(file_path)
File.open(file_path).read.each_line.map { |line| find_repeated_substring(line) }
end
end