// Какую концепцию проверяем?
// Это не просто проверка функции ListAll, это проверка какой-то концепции кода
// Варианты.
// 1. Пустой listAll() даёт пустой список.
// 2. Непустой listAll() даёт непустой список.
void testListAll() {
ArrayList<Product> productList = new ArrayList<Product>();
// Проводим поиск в списке — что в этот список вносится?
// И не будет ли физической зависимости тестов друг от друга?
// И для чего вообще нужен этот search, если мы listAll тестируем?
// Что такое ProductRepository и он вообще проверен?
when(this.productRepository.search((String) any())).thenReturn(productList);
// Ну, хорошо.
List<Product> actualListAllResult = this.productService.listAll("Keyword");
// Отказ, они не same: первый мы только что создали, а второй откуда-то пришёл.
assertSame(productList, actualListAllResult);
// Получается, что концепция — поиск, когда ничего не находится?
assertTrue(actualListAllResult.isEmpty());
verify(this.productRepository).search((String) any());
// Получается, единственная концепция, которую мы тестируем,— поиск в пустом списке даёт пустоту
// (и та некорректная из-за assertSame).
assertTrue(this.productService.getAll().isEmpty());
}
#include <stdio.h>
int main()
{
int sz = sizeof('A'); // латинское
printf("sz = %d\n", sz);
return 0;
}
char test='A'
на стеке будет 1 байт (+выравнивание). Здесь Си, грубо говоря, проводит преобразование типа — прямо при компиляции. Если написать char test=L'Й'
, сообщит, что преобразование при компиляции ushort→char обрежет результат с 1049 до 25. class AsyncSimpleContext { // интерфейс
public:
virtual void syncExec(const Runnable& body) = 0;
template <class Body>
void syncExecT(const Body& body); // тело упущу, тут всё стандартно,
// идиома «виртуальный шаблон»
}
class FmMain : public AsyncSimpleContext
{
// Разрешите не писать реализацию syncExec — тут всё просто:
// в конструкторе соединить сигнал со слотом методом BlockingQueuedConnection
// в syncExec проверить id потока и или вызвать прямо, или возбудить сигнал.
signals:
void sigSyncExec(const Runnable&);
private slots:
void slotSyncExec(const Runnable&);
}
не удается преобразовать 'char*' в 'int*' для аргумента '1' в 'int
недопустимое преобразование из 'int*' в 'int'
warning: narrowing conversion of '143' from 'int' to 'char' inside
1) То есть считал строку, скомпилировал - получил двоичный код. Выполнил этот двоичный код.
3) Байт-код понятен среде/виртуальной машине (.NET, Java), которая компилирует байт-код в двоичный код
switch (opcode) {
case OP_ADD: {
auto res = stack.pop() + stack.pop();
stack.push(res);
}
.....
}
const struct s & ref = f();
struct s && ref = f();
void modify(s& arg) { ++arg[1]; }
...
modify(f());
namespace Addresses {
uintptr_t myAddresses = processManager.xxx;
}
namespace Addresses {
extern uintptr_t myAddresses;
}
size_t str::replace(
std::string& aString,
const char aWhat,
const char aByWhat)
{
size_t r = 0;
FOR_S(i, 0, aString.length())
if (aString[i] == aWhat) {
aString[i] = aByWhat;
++r;
}
return r;
}
size_t str::replace(
std::string &aString,
char aWhat,
CONST_STR aByWhat)
{
if (aByWhat.length()==1)
{ // Simple replace
return str::replace(aString, aWhat, aByWhat[0]);
}
// More complex replace
static const size_t szWhat = 1;
const size_t szByWhat = aByWhat.length();
size_t p = 0, r = 0;
while ((p = aString.find(aWhat, p)) != std::string::npos)
{
aString.replace(p, szWhat, aByWhat);
p += szByWhat;
++r;
}
return r;
}