mirror of
https://github.com/DrasLorus/hls_max_template.git
synced 2024-11-08 23:03:15 +01:00
Initial Commit
This commit is contained in:
commit
f06e861bf0
8 changed files with 485 additions and 0 deletions
11
.gitignore
vendored
Normal file
11
.gitignore
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
*.cpp.o
|
||||
*.compdb_entry
|
||||
|
||||
.vscode
|
||||
.cache
|
||||
|
||||
compile_commands.json
|
||||
|
||||
bin
|
||||
hls_files/max_template
|
||||
hls_files/*.log
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2021 DrasLorus
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
86
Makefile
Normal file
86
Makefile
Normal file
|
@ -0,0 +1,86 @@
|
|||
############################################################
|
||||
#
|
||||
# Copyright © 2021 "DrasLorus"
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
# file and associated documentation files (the “Software”),
|
||||
# to deal in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
# the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
############################################################
|
||||
|
||||
CXX=g++
|
||||
CXXFLAGS:=-std=c++14 -Wno-unused-label -Wno-unknown-pragmas -Wall -D_MAX_IS_TOP_
|
||||
LDFLAGS:=
|
||||
|
||||
XILINX_HOME=/opt/Xilinx
|
||||
XILINX_VER=2020.2
|
||||
VITIS_HOME=${XILINX_HOME}/Vitis_HLS/${XILINX_VER}
|
||||
|
||||
CXXFLAGS:=${CXXFLAGS} -isystem ${VITIS_HOME}/include
|
||||
|
||||
SRCDIR=sources
|
||||
|
||||
BINDIR=bin
|
||||
SOURCES:=$(SRCDIR)/modules/max.cpp $(SRCDIR)/testbenches/max_tb.cpp
|
||||
OBJ=$(SOURCES:.cpp=.cpp.o)
|
||||
|
||||
TBBIN=$(BINDIR)/tb.out
|
||||
|
||||
all: $(BINDIR) $(TBBIN)
|
||||
|
||||
$(BINDIR):
|
||||
mkdir -p $(BINDIR)
|
||||
|
||||
$(TBBIN): $(OBJ)
|
||||
$(CXX) -o $(TBBIN) $(OBJ) $(LDFLAGS)
|
||||
|
||||
%.cpp.o : %.cpp
|
||||
$(CXX) -o $@ -c $< $(CXXFLAGS)
|
||||
|
||||
.PHONY: clean clear
|
||||
clean:
|
||||
rm -vf $(OBJ)
|
||||
|
||||
.PHONY: clean clear
|
||||
clear: clean
|
||||
rm -vf $(TBBIN) $(BINDIR)/results.dat $(COMPDB_ENTRIES) compile_commands.json
|
||||
|
||||
testbench: $(TBBIN)
|
||||
cd $(BINDIR); ../$(TBBIN)
|
||||
|
||||
.PHONY: %.compdb_entry
|
||||
%.compdb_entry: %.cpp
|
||||
@echo " {" > $@
|
||||
@echo " \"command\": \"$(CXX) $(CFLAGS) $(CXXFLAGS) -c $<\"," >> $@
|
||||
@echo " \"directory\": \"$(CURDIR)\"," >> $@
|
||||
@echo " \"file\": \"$<\"" >> $@
|
||||
@echo " }," >> $@
|
||||
|
||||
COMPDB_ENTRIES = $(addsuffix .compdb_entry, $(basename $(SOURCES)))
|
||||
|
||||
compile_commands.json: $(COMPDB_ENTRIES)
|
||||
@echo "[" > $@.tmp
|
||||
@cat $^ >> $@.tmp
|
||||
@sed '$$d' < $@.tmp > $@
|
||||
@echo " }" >> $@
|
||||
@echo "]" >> $@
|
||||
@rm $@.tmp
|
||||
|
||||
clang-tidy: compile_commands.json
|
||||
clang-tidy -p $(CURDIR) $(SOURCES)
|
||||
|
||||
cppcheck: compile_commands.json
|
||||
cppcheck --suppress=missingIncludeSystem --enable=all --inconclusive --std=c++14 --project=$(CURDIR)/compile_commands.json
|
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# hls_max_template
|
||||
|
||||
A max function in C++14 using recursive template for High-Level Synthesis.
|
37
hls_files/script.tcl
Normal file
37
hls_files/script.tcl
Normal file
|
@ -0,0 +1,37 @@
|
|||
############################################################
|
||||
#
|
||||
# Copyright © 2021 "DrasLorus"
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
# file and associated documentation files (the “Software”),
|
||||
# to deal in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
# the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
############################################################
|
||||
|
||||
open_project -reset max_template
|
||||
set_top do_max_64
|
||||
add_files ../sources/modules/max.hpp
|
||||
add_files ../sources/modules/max.cpp -cflags "--std=c++14 -Wno-unknown-pragmas -D_MAX_IS_TOP_"
|
||||
add_files -tb ../sources/testbenches/max_tb.cpp -cflags "--std=c++14 -Wno-unknown-pragmas -D_MAX_IS_TOP_"
|
||||
open_solution -reset "solution" -flow_target vivado
|
||||
set_part {xczu7ev-ffvf1517-3-e}
|
||||
create_clock -period 10 -name default
|
||||
config_export -format ip_catalog -rtl verilog
|
||||
set_directive_top -name do_max_64 "do_max_64"
|
||||
csim_design -O
|
||||
csynth_design
|
||||
cosim_design
|
||||
#export_design -flow impl -rtl verilog -format ip_catalog
|
85
sources/modules/max.cpp
Normal file
85
sources/modules/max.cpp
Normal file
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
* Copyright © 2021 "DrasLorus"
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
* file and associated documentation files (the “Software”),
|
||||
* to deal in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "max.hpp"
|
||||
#include <iostream>
|
||||
|
||||
#ifdef _MAX_IS_TOP_
|
||||
|
||||
#define IS_EVEN(N) (((N >> 1) << 1) == N)
|
||||
|
||||
// uint8_t do_max_63(const uint8_t in_array[63]) {
|
||||
// #pragma HLS interface ap_memory port=in_array
|
||||
|
||||
// uint8_t load_array[63];
|
||||
// #pragma HLS array_partition variable=load_array complete
|
||||
|
||||
// for (uint8_t u = 0; u < 63; u++){
|
||||
// #pragma HLS unroll
|
||||
// load_array[u] = in_array[u];
|
||||
// }
|
||||
|
||||
// return max_template<63>::process(load_array);
|
||||
// }
|
||||
|
||||
uint8_t do_max_64(const uint8_t in_array[64]) {
|
||||
#pragma HLS interface ap_memory port=in_array
|
||||
|
||||
uint8_t load_array[64];
|
||||
#pragma HLS array_partition variable=load_array complete
|
||||
|
||||
for (uint8_t u = 0; u < 64; u++){
|
||||
#pragma HLS unroll
|
||||
load_array[u] = in_array[u];
|
||||
}
|
||||
|
||||
return max_pow2<64>::process(load_array);
|
||||
}
|
||||
|
||||
// float do_max_63f(const float in_array[63]) {
|
||||
// #pragma HLS interface ap_memory port=in_array
|
||||
|
||||
// float load_array[63];
|
||||
// #pragma HLS array_partition variable=load_array complete
|
||||
|
||||
// for (uint8_t u = 0; u < 63; u++){
|
||||
// #pragma HLS unroll
|
||||
// load_array[u] = in_array[u];
|
||||
// }
|
||||
|
||||
// return max_template<63>::process(load_array);
|
||||
// }
|
||||
|
||||
// float do_max_64f(const float in_array[64]) {
|
||||
// #pragma HLS interface ap_memory port=in_array
|
||||
|
||||
// float load_array[64];
|
||||
// #pragma HLS array_partition variable=load_array complete
|
||||
|
||||
// for (uint8_t u = 0; u < 64; u++){
|
||||
// #pragma HLS unroll
|
||||
// load_array[u] = in_array[u];
|
||||
// }
|
||||
|
||||
// return max_pow2<64>::process(load_array);
|
||||
// }
|
||||
|
||||
#endif
|
164
sources/modules/max.hpp
Normal file
164
sources/modules/max.hpp
Normal file
|
@ -0,0 +1,164 @@
|
|||
/*
|
||||
* Copyright © 2021 "DrasLorus"
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
* file and associated documentation files (the “Software”),
|
||||
* to deal in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef _MAX_TEMPLATE_HPP_
|
||||
#define _MAX_TEMPLATE_HPP_ 1
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
|
||||
#ifdef _MAX_IS_TOP_
|
||||
|
||||
// uint8_t do_max_63(const uint8_t in_array[63]);
|
||||
uint8_t do_max_64(const uint8_t in_array[64]);
|
||||
// float do_max_63f(const float in_array[63]);
|
||||
// float do_max_64f(const float in_array[64]);
|
||||
|
||||
#endif
|
||||
|
||||
template <uint8_t N>
|
||||
struct max_pow2 {
|
||||
template <typename T>
|
||||
static T process(const T values[N]) {
|
||||
static_assert(N > 2, "N cannot be less than 3!");
|
||||
T half_values[N / 2];
|
||||
#pragma HLS array_partition variable = half_values complete
|
||||
for (uint8_t i = 0; i < N / 2; i++) {
|
||||
#pragma HLS unroll
|
||||
const uint8_t j = i << 1;
|
||||
const uint8_t jp1 = j + 1;
|
||||
half_values[i] = (values[j] < values[jp1] ? values[jp1] : values[j]);
|
||||
}
|
||||
return max_pow2<N / 2>::process(half_values);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct max_pow2<2> {
|
||||
template <typename T>
|
||||
static T process(const T values[2]) {
|
||||
return (values[0] < values[1] ? values[1] : values[0]);
|
||||
}
|
||||
};
|
||||
|
||||
// TRUE MAX TEMPLATE BELOW
|
||||
|
||||
template <unsigned N, bool bEven>
|
||||
class max_struct {
|
||||
public:
|
||||
template <typename T>
|
||||
static T process(const T values[N]);
|
||||
};
|
||||
|
||||
template <unsigned N>
|
||||
class max_struct<N, true> {
|
||||
private:
|
||||
static constexpr unsigned half = N >> 1;
|
||||
|
||||
public:
|
||||
template <typename T>
|
||||
static T process(const T values[N]);
|
||||
};
|
||||
|
||||
template <unsigned N>
|
||||
class max_struct<N, false> {
|
||||
private:
|
||||
static constexpr unsigned Nm1 = N - 1;
|
||||
static constexpr unsigned half = (Nm1 >> 1);
|
||||
static constexpr unsigned halfp1 = half + 1;
|
||||
|
||||
public:
|
||||
template <typename T>
|
||||
static T process(const T values[N]);
|
||||
};
|
||||
|
||||
template <>
|
||||
class max_struct<1, false> {
|
||||
|
||||
public:
|
||||
template <typename T>
|
||||
static T process(const T values[1]) {
|
||||
return values[0];
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
class max_struct<2, true> {
|
||||
|
||||
public:
|
||||
template <typename T>
|
||||
static T process(const T values[2]) {
|
||||
return (values[0] < values[1] ? values[1] : values[0]);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
class max_struct<3, false> {
|
||||
|
||||
public:
|
||||
template <typename T>
|
||||
static T process(const T values[3]) {
|
||||
const T max2 = (values[0] < values[1] ? values[1] : values[0]);
|
||||
return (values[2] < max2 ? max2 : values[2]);
|
||||
}
|
||||
};
|
||||
|
||||
#define IS_EVEN(N) (((N >> 1) << 1) == N)
|
||||
|
||||
template <unsigned N>
|
||||
template <typename T>
|
||||
T max_struct<N, true>::process(const T values[N]) {
|
||||
static_assert(N > 2, "N cannot be less than 3!");
|
||||
T half_values[half];
|
||||
#pragma HLS array_partition variable = half_values complete
|
||||
for (uint8_t i = 0; i < half; i++) {
|
||||
#pragma HLS unroll
|
||||
const uint8_t j = i << 1;
|
||||
const uint8_t jp1 = j + 1;
|
||||
half_values[i] = (values[j] < values[jp1] ? values[jp1] : values[j]);
|
||||
}
|
||||
return max_struct<half, IS_EVEN(half)>::process(half_values);
|
||||
}
|
||||
|
||||
template <unsigned N>
|
||||
template <typename T>
|
||||
T max_struct<N, false>::process(const T values[N]) {
|
||||
static_assert(N > 3, "N cannot be less than 3!");
|
||||
T half_values[halfp1];
|
||||
#pragma HLS array_partition variable = half_values complete
|
||||
for (uint8_t i = 0; i < half; i++) {
|
||||
#pragma HLS unroll
|
||||
const uint8_t j = i << 1;
|
||||
const uint8_t jp1 = j + 1;
|
||||
half_values[i] = (values[j] < values[jp1] ? values[jp1] : values[j]);
|
||||
}
|
||||
half_values[half] = values[Nm1];
|
||||
return max_struct<halfp1, IS_EVEN(halfp1)>::process(half_values);
|
||||
}
|
||||
|
||||
template <unsigned N>
|
||||
class max_template : public max_struct<N, IS_EVEN(N)> {
|
||||
};
|
||||
|
||||
#undef IS_EVEN
|
||||
|
||||
#endif // _MAX_TEMPLATE_HPP_
|
78
sources/testbenches/max_tb.cpp
Normal file
78
sources/testbenches/max_tb.cpp
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Copyright © 2021 "DrasLorus"
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
* file and associated documentation files (the “Software”),
|
||||
* to deal in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "../modules/max.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <ctime>
|
||||
#include <iostream>
|
||||
#include <random>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(int, char **) {
|
||||
srand(time(nullptr));
|
||||
|
||||
vector<uint8_t> to_be_maxed64(64, 0);
|
||||
for (auto && it : to_be_maxed64) {
|
||||
it = uint8_t(floor(float(rand()) / float(RAND_MAX) * 256.f));
|
||||
}
|
||||
|
||||
vector<uint8_t> to_be_maxed63(63, 0);
|
||||
for (auto && it : to_be_maxed63) {
|
||||
it = uint8_t(floor(float(rand()) / float(RAND_MAX) * 256.f));
|
||||
}
|
||||
|
||||
vector<float> to_be_maxed64f(64, 0);
|
||||
for (auto && it : to_be_maxed64f) {
|
||||
it = float(rand()) / float(RAND_MAX) * 1000.f;
|
||||
}
|
||||
|
||||
vector<float> to_be_maxed63f(63, 0);
|
||||
for (auto && it : to_be_maxed63f) {
|
||||
it = float(rand()) / float(RAND_MAX) * 1000.f;
|
||||
}
|
||||
|
||||
const uint8_t max64_value = do_max_64(to_be_maxed64.data());
|
||||
// const uint8_t max63_value = do_max_63(to_be_maxed63.data());
|
||||
// const float max64f_value = do_max_64f(to_be_maxed64f.data());
|
||||
// const float max63f_value = do_max_63f(to_be_maxed63f.data());
|
||||
|
||||
// cout << unsigned(max64_value) << " " << unsigned(max63_value) << endl;
|
||||
// cout << float(max64f_value) << " " << float(max63f_value) << endl;
|
||||
|
||||
int retval = 0;
|
||||
|
||||
const uint8_t max_64_test = *max_element(to_be_maxed64.begin(), to_be_maxed64.end());
|
||||
// const uint8_t max_63_test = *max_element(to_be_maxed63.begin(), to_be_maxed63.end());
|
||||
// const float max_64f_test = *max_element(to_be_maxed64f.begin(), to_be_maxed64f.end());
|
||||
// const float max_63f_test = *max_element(to_be_maxed63f.begin(), to_be_maxed63f.end());
|
||||
|
||||
retval += (max_64_test == max64_value ? 0 : 1);
|
||||
// retval += (max_63_test == max63_value ? 0 : 1);
|
||||
// retval += (max_64f_test == max64f_value ? 0 : 1);
|
||||
// retval += (max_63f_test == max63f_value ? 0 : 1);
|
||||
|
||||
cout << (retval == 0 ? "Test passed. " : "Test failed. ") << unsigned(max_64_test) << " vs " << unsigned(max64_value) << endl;
|
||||
|
||||
return retval;
|
||||
}
|
Loading…
Reference in a new issue